Cet article a été mis à jour le 29 décembre 2020. Tous les scripts sont maintenant compatibles avec Python 3. Il existe plusieurs options possibles pour établir une communication entre un Raspberry Pi et un Arduino: communication série (UART), I2C, Ethernet, communication sans fil... Dans cet article, nous abordons l'option qui s'avère probablement la plus simple: la communication série par l'entremise d'un câble USB. Nous allons simplement brancher l'Arduino à un des ports USB du Raspberry Pi, de la même façon que nous le faisons lorsque nous désirons programmer l'Arduino avec un ordinateur conventionnel. Arduino et son alimentation La bibliothèque pyserial De nos jours, la bibliothèque pyserial est présente par défaut dans la distribution de base du Raspberry Pi OS, mais à tout hasard, si elle n'y est pas, vous pouvez l'installer avec une ou l'autre de ces deux commandes: pip3 install pyserial ...ou encore... sudo apt-get install python3-serial Envoi d'un message de l'Arduino vers le Raspberry Pi Commençons par une communication unidirectionnelle de l'Arduino vers le Raspberry Pi. Du côté Arduino, l'envoi de messages se fait par la commande "Serial.println". Par exemple, le sketch ci-dessous envoie un message toutes les 3 secondes. J'ai ajouté un compteur pour que le message ne soit pas rigoureusement identique d'une fois à l'autre. Nous pourrons donc vérifier que tous les messages envoyés par l'Arduino sont bel et bien captés par le Raspberry Pi. Comme vous pouvez le constater, c'est exactement comme si vous vouliez afficher un message sur le moniteur série de l'environnement de programmation Arduino; vous pouvez d'ailleurs utiliser le moniteur série pour vérifier dès maintenant que le sketch fonctionne de la façon prévue. Du côté Raspberry Pi, la fonction "serial.Serial" nous permet de lire les messages reçus . Le premier paramètre de cette fonction est le nom du port usb occupé par l'Arduino: dans mon cas, c'était ttyUSB0; ce sera peut-être la même chose pour vous aussi, mais ce n'est pas certain. Pour en avoir le coeur net, vous pouvez écrire cette instruction dans le terminal: ls /dev/tty* La liste qui s'affiche devrait être légèrement différente selon que l'Arduino est connecté ou non au Raspberry Pi. Le nom correct devrait être celui qui apparaît dans la liste pendant que l'Arduino est branché, mais qui n'y apparaît pas quand l'Arduino est débranché du port USB du Raspberry Pi. Voici donc un sketch en Python qui permettra au Raspberry Pi d'écouter ce que lui dit l'Arduino, et d'afficher le résultat. Envoi d'un message du Raspberry Pi vers l'Arduino Essayons maintenant l'autre direction: branchons quelques LEDs à l'Arduino, et c'est le Raspberry Pi qui indiquera à l'Arduino quelles LEDs il doit éteindre ou allumer. Donc, une LED (accompagnée de sa résistance protectrice) est branchée à chacune des broches suivantes de l'Arduino: 2, 3 et 4 . Commençons par le sketch Arduino. Grâce à la fonction Serial.read, le sketch ci-dessous allume ou éteint les LEDs en fonction du message reçu: il allume la LED 1 (broche 2) s'il reçoit le message "1", il éteint la LED 2 (broche 3) s'il reçoit le message "5", etc. Pourquoi soustraire le caractère '0'? C'est parce qu'au départ, lorsque l'Arduino reçoit le message "1", il s'agit d'un caractère dont le code ASCII est 49. En soustrayant le caractère '0' (dont le code ASCII est 48), le caractère '1' qui a été reçu devient le nombre entier 1. Si vous le désirez, vous pouvez vérifier que ce sketch fonctionne correctement à l'intérieur de l'environnement de programmation Arduino, avant même de brancher l'Arduino au Raspberry: dans le moniteur Série, tapez des nombres entre 1 et 6 et voyez que les LEDs s'allument ou s'éteignent en fonction des nombres que vous envoyez. Et voici le script en Python qui sera exécuté par le Raspberry Pi: c'est maintenant lui qui envoie des informations à l'Arduino: Communication bidirectionnelle entre le Raspberry Pi et l'Arduino Finalement, voici un exemple où le Raspberry Pi demande une information à l'Arduino (l'état d'un potentiomètre dont le curseur est branché à A0 ), et affiche la réponse que lui a retournée l'Arduino. Le sketch Arduino: Le script en python du Raspberry Pi: Sources: Mon point de départ a été la lecture de cet article dans le blog d'Oscar Liang. Yves Pelletier (Twitter: @ElectroAmateur)