Raspberry Pi – Arduino – Lier les deux via Serie / UART

Pour recevoir des données en 433Mz sur le Raspberry Pi, vous pouvez utiliser différentes bibliothèques mais toutes sollicitent le CPU à presque 100% (si vous en connaissez une qui ne le fait pas je suis preneur !). Alors une solution est de passer par un Arduino qui nous enverra les données valides sur le port série.

Arduino Raspberry Pi serial uart

Je continue d’avancer doucement sur mon projet Pi Home Connect, et donc suite à mon article sur la création d’une node, il faut recevoir les données. Utilisant pour le moment une transmission 433Mz il fallait donc pouvoir recevoir les messages de ma sonde. La réception directement sur le Raspberry utilisant le CPU a (presque) son maximum, j’ai choisi d’utiliser un Arduino.

Comme je ne voulais pas avoir plusieurs sources d’alimentation, j’ai trouvé l’excellent article de Jared Wolff sur une connexion simple et rapide entre les deux :

PiHomeConnect - Arduino - Serial UART with Raspberry Pi

Voilà comment avec 4 fils relier les deux. Merci Jared !!

Pour exploiter la communication entre les deux il vous faudra désactiver la console coté Raspberry Pi :

  • Mettre à jour votre système
    apt-get update && apt-get upgrade
  • Installer si nécessaire raspi-config
    apt-get install raspi-config
  • Exécuter raspi-config et sélectionner les étapes suivantes :
    PiHomeConnect - Arduino - Serial UART with Raspberry Pi - Disable console - 1 PiHomeConnect - Arduino - Serial UART with Raspberry Pi - Disable console - 2 PiHomeConnect - Arduino - Serial UART with Raspberry Pi - Disable console - 3
  • Redémarrer le Raspberry Pi

Maintenant vous pouvez échanger avec votre Arduino sur le port série. Coté Raspberry vous pouvez utiliser un programme en Python par exemple :

import serial
import sys
import string

ser = serial.Serial('/dev/ttyAMA0', 115200)
while True :
    try:
    	# Read data incoming on the serial line
        data=ser.readline()
        print data
    except:
    	print "Unexpected error:", sys.exc_info()
    	sys.exit()

Et sur l’Arduino :

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("Hello");
  delay(1000);
}

Vous aimerez aussi...