Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Arduino
  3. Communication
Extrait - Arduino Apprivoisez l'électronique et le codage (3e édition)
Extraits du livre
Arduino Apprivoisez l'électronique et le codage (3e édition)
9 avis
Revenir à la page d'achat du livre

Communication

Introduction

L’Arduino possède de nombreux moyens pour échanger des informations avec d’autres appareils. Nous allons tester plusieurs modes de communication pour contrôler à distance l’allumage ou l’extinction de LED (en les remplaçant par des relais, vous pourrez contrôler n’importe quel appareil électrique).

Bus I2C

Nous l’avons déjà utilisé, par exemple pour communiquer avec l’afficheur LCD. Mais il peut aussi servir à échanger des informations avec un autre Arduino. En théorie, le bus I2C est capable de relier jusqu’à 128 périphériques (à condition que chacun possède une adresse différente). Ce protocole de communication nécessite qu’un des périphériques tienne le rôle du "maître". Il donne les ordres aux autres, les "esclaves" qui obéissent.

Les termes de "maître" et "esclave" peuvent paraître choquants pour désigner la communication entre les périphériques. Il est certain que la comparaison est plutôt de mauvais goût. Cependant, il s’agit de la terminologie officielle, employée depuis quelques décennies. Il est donc difficile de ne pas l’utiliser.

1. Le mode Master Writer (le maître écrit)

Dans cet exemple de communication entre deux cartes Arduino, le maître est équipé de quatre boutons. Si l’on appuie sur l’un d’eux, il envoie l’information à l’autre Arduino (l’esclave), qui allume ou éteint la LED correspondante.

Pour le branchement, il y a deux possibilités. Vous pouvez alimenter chaque Arduino séparément.

 Dans ce cas, reliez seulement les bornes analogiques A4, A5 et la borne GND des deux cartes Arduino. Mais si vous souhaitez n’utiliser qu’une seule source d’alimentation, il faudra également brancher ensemble les bornes 5 V.

images/08-01.png

Utilisation du bus I2C (Master Writer)

Évidemment, le code n’est pas le même pour les deux cartes Arduino. Voilà le code du maître :

// I2C_Master_Writer_Maitre 
// Appel de la bibliothèque (pour gérer le bus I2C) ...

Liaison série

L’Arduino peut aussi communiquer par la liaison série.

 Pour cela, reliez les bornes numériques dédiées des deux cartes (0 et 1 pour l’Arduino Uno) ainsi que les masses (GND). La borne TX (1) assure la transmission et la borne RX (0) la réception des données. Pour cette raison, il ne faut pas oublier de croiser les deux câbles (connectez à chaque fois la borne TX à la borne RX de l’autre Arduino).

images/08-03.png

Utilisation d’une liaison série pour relier deux cartes Arduino

C’est exactement le même principe que pour envoyer des données au moniteur série (mais sans passer par le convertisseur USB).

Cependant, ce mode de communication est également utilisé par le téléversement, il faut donc débrancher les câbles TX et RX avant de transférer le nouveau sketch (puis les rebrancher pour tester la communication entre les deux cartes).

L’exemple de code ci-dessous reprend le principe de la communication par bus I2C (Master Writer). L’émetteur est équipé de quatre boutons. Si quelqu’un appuie sur l’un d’eux, il transmet l’information au récepteur (l’autre Arduino), qui allume ou éteint la LED correspondante.

Voilà le code de l’Arduino émetteur :

// Serie_emission 
//Boutons 
const...

Bluetooth

La communication Bluetooth fonctionne sur le même principe que la liaison série. Vous pouvez utiliser un module Bluetooth de type HC-05. Son branchement est extrêmement simple, mais n’oubliez pas de retirer le module pendant le téléversement (car il utilise aussi les bornes 0 et 1) et d’inverser les bornes TX et RX (branchez le TX de l’Arduino sur le RX du module et le RX de l’Arduino sur le TX du module).

images/08-04.png

Branchement du module Bluetooth

Le code est identique à celui de l’Arduino en mode réception d’une liaison série. Les LED (bleue, verte, orange et rouge) changent d’état (allumée ou éteinte) lorsqu’elles reçoivent un message (1, 2, 3 et 4).

// Bluetooth 
//LED 
const int LEDBLEUE = 6; 
const int LEDVERTE = 7; 
const int LEDORANGE = 8; 
const int LEDROUGE = 9; 
// Stockage du contenu du message et de l'état des LED 
char message = 0; 
boolean etatLedBleue = LOW; 
boolean etatLedVerte = LOW; 
boolean etatLedOrange = LOW; 
boolean etatLedRouge = LOW; 
void setup()  { 
  Serial.begin(9600); 
  // Initialisation des sorties 
  pinMode(LEDBLEUE, OUTPUT); 
  pinMode(LEDVERTE, OUTPUT); 
  pinMode(LEDORANGE, OUTPUT); 
  pinMode(LEDROUGE, OUTPUT); 
} 
void loop()...

Radio (433 MHz)

Il s’agit d’un ensemble constitué de deux modules radio (l’émetteur et le récepteur) fonctionnant à une fréquence de 433,92 MHz. Cette fréquence est libre, mais peut parfois être saturée, car elle est aussi utilisée pour commander les portes de garage, les volets électriques, les stations météo, les babyphones, les talkies-walkies, les véhicules télécommandés...). Sachez aussi que la communication n’est absolument pas sécurisée. Ne l’utilisez donc pas pour transmettre des informations sensibles.

Pour communiquer par radio, vous avez besoin des deux modules (l’émetteur et un récepteur sont généralement vendus ensemble).

1. Le branchement

Le branchement est assez simple, les modules ne nécessitent qu’un seul fil pour transmettre les données (en plus de l’alimentation). Par défaut, l’émetteur utilise la borne numérique n°12 et le récepteur la borne n°11 (mais il est possible d’utiliser d’autres bornes en le précisant dans le code).

images/08-08.png

Communication radio entre deux cartes Arduino

2. La bibliothèque

La bibliothèque VirtualWire apporte de nouvelles fonctions et simplifie la gestion des modules radio, mais elle n’est pas directement reconnue par le gestionnaire de bibliothèque. Il faut donc la télécharger et l’installer manuellement.

 Vous la trouverez à cette adresse : http://www.airspayce.com/mikem/arduino/VirtualWire/

 Puis, lancez l’IDE et sélectionnez Croquis - Inclure une bibliothèque - Ajouter la bibliothèque...

Infrarouge

C’est un mode de communication très courant. Il est souvent utilisé pour télécommander les appareils domestiques (télévision, lecteurs audio et vidéo). La télécommande (l’émetteur) est équipée d’une simple LED infrarouge (lumière invisible pour l’œil humain). Si l’utilisateur appuie sur un bouton, l’émetteur envoie un signal constitué d’un simple clignotement (différent pour chaque bouton). C’est un peu comme si elle transmettait un message lumineux en Morse, mais c’est beaucoup plus rapide (et c’est un autre langage). L’appareil à télécommander (le récepteur) est équipé d’un capteur infrarouge qui lui permet de détecter le signal. Il est également capable de décoder le message reçu et d’exécuter l’action correspondante (changer de chaîne, augmenter le volume, éteindre l’appareil...).

Le principal avantage de ce système, par rapport au signal radio, c’est qu’il ne traverse pas les murs. Ainsi quand vous envoyez des instructions à votre télévision, les signaux ne sont pas transmis aux appareils situés chez vos voisins. L’inconvénient est qu’il faut viser l’appareil à télécommander et éviter les obstacles entre émetteur et récepteur.

1. L’installation de la bibliothèque

Pour permettre à l’Arduino de communiquer par infrarouge, le plus simple est d’installer la bibliothèque IRremote.

 Pour cela, lancez l’IDE et sélectionnez Croquis - Inclure une bibliothèque - Gérer les bibliothèques. Ensuite, recherchez et installez la bibliothèque IRremote (by Shirriff).

images/08-10.png

Installation de la bibliothèque IRremote

2. Le branchement

Vous pouvez facilement récupérer la télécommande et dessouder le capteur infrarouge d’un vieil appareil hors d’usage (ou obsolète comme un magnétoscope). Mais vous pouvez aussi acheter un capteur (ou un module) infrarouge, accompagné d’une petite télécommande standard (21 boutons) ou utiliser une télécommande de récupération....

Réseau (câble Ethernet)

La carte d’extension Ethernet permet de connecter l’Arduino au réseau local (ou à Internet). De plus, elle intègre un lecteur de cartes micro SD. Étant donné qu’elle utilise le bus de données SPI pour communiquer, les bornes 11, 12 et 13 ne sont donc pas utilisables pour autre chose. La carte réseau utilise également la borne 10 et le lecteur de cartes micro SD, la borne 4, mais toutes les autres entrées et sorties sont utilisables. Le shield Ethernet permet par exemple de transformer l’Arduino en serveur.

images/08-16-.png

L’Arduino avec la carte d’extension Ethernet

Pour cela, vous devez posséder quelques notions de gestion de réseau informatique et connaître les rudiments du langage HTML.

 Pour commencer, nous allons simplement créer une page web statique en utilisant le code HTML suivant :

HTTP/1.1 200 OK Content-Type: text/html Connection: close Refresh: 5 
<!DOCTYPE HTML> 
<html> 
<center><big>Bienvenue sur le serveur Arduino.</big></center><br> 
</html> 

 Insérez le shield Ethernet dans l’Arduino. Branchez ensuite le câble USB à l’ordinateur (comme d’habitude) et utilisez un câble réseau pour connecter le shield au réseau local (un hub, un switch, un routeur ou une box Internet).

 Lancez ensuite l’IDE Arduino pour concevoir le code.

Les bibliothèques SPI et Ethernet sont nécessaires au fonctionnement du shield Ethernet.

// Appel des bibliothèques 
#include <SPI.h> 
#include <Ethernet.h> 

 Vous pouvez indiquer l’adresse MAC du shield. Il s’agit d’une adresse unique attribuée par le constructeur et, théoriquement, deux appareils ne sont pas censés posséder la même adresse dans le monde. Elle figure normalement sur un autocollant (sur la carte ou sur l’emballage). Cependant, il peut arriver avec certains périphériques réseau (à prix réduit, achetés directement en Asie sur Internet), que l’adresse MAC ne soit pas fournie. Heureusement, elle est seulement utilisée pour identifier l’appareil au niveau du réseau local (Box ou routeur), il est donc possible d’employer la même adresse...

Télécommande FlySky FS-I6

Le FlySky FS-I6 a été choisi parce qu’il est très courant et peu coûteux. Il convient donc parfaitement aux makers ou aux débutants. Ce type de télécommande est généralement utilisé pour piloter des avions en modèles réduits. Vous pouvez même l’utiliser pour contrôler directement des servomoteurs. Mais l’Arduino augmente énormément les possibilités d’utilisation.

images/Maj2-08-01.PNG

Télécommande FlySky FS-I6 et récepteur 10 voies

Le récepteur utilise la liaison série, il suffit donc de l’alimenter et de le relier au port RX de l’Arduino.

images/Maj2-08-02.png

Branchement du récepteur 6 ou 10 voies

Pour simplifier la communication entre le récepteur et l’Arduino, le plus simple est d’installer la bibliothèque iBusBM. Pour cela, lancez l’IDE Arduino et allez dans Outils - Gérer les bibliothèques. Tapez ensuite "iBusBM" dans la barre de recherche, sélectionnez la bibliothèque iBusBM et cliquez sur Installer.

images/Maj2-08-03.png

Installation de la bibliothèque iBusBM

L’émetteur possède 2 joysticks (2 x 2 = 4 axes), 2 potentiomètres et 4 interrupteurs, soit un total de 10 voies. Il est entièrement paramétrable, vous pouvez donc choisir (en fonction de votre utilisation) la voie (channel) correspondant...

Raspberry Pi (en USB)

Le Raspberry Pi peut évidemment utiliser les mêmes modes de communication que l’Arduino (bus I2C, liaison série par GPIO, infrarouge, radio, Bluetooth, Ethernet, Wi-Fi...). Toutefois, l’utilisation des GPIO (bornes d’entrée et sortie) est compliquée par la différence de tension entre les deux cartes (3,3 V pour le Raspberry et 5 V pour l’Arduino Uno). Cependant, le problème n’est pas insurmontable. Il est possible d’utiliser un abaisseur de niveau logique (comme la puce 74HC4050) ou un Arduino fonctionnant sous 3,3 V.

Mais le plus simple consiste à créer une liaison série en branchant le câble USB de l’Arduino dans l’une des prises USB du Raspberry Pi (comme pour un ordinateur classique). Il est toutefois conseillé de prévoir une alimentation séparée pour l’Arduino (ou d’utiliser un hub USB alimenté), car le Raspberry ne sera pas forcément capable de fournir (à ses ports USB), le courant nécessaire à l’Arduino. Cela dépend de l’alimentation du Raspberry et des éléments rajoutés (LED, capteurs...).

 Pour commencer, vous pouvez installer l’IDE Arduino, cela permet de tester la liaison et éventuellement de programmer l’Arduino directement depuis le Raspberry. Sous RaspberryPi OS, cette étape est très simple, car l’IDE Arduino est déjà présent dans la liste des dépôts. Il suffit donc d’ouvrir un terminal et de taper :

sudo apt-get install arduino 

 À la fin de l’installation, l’IDE Arduino peut être lancé depuis la barre des menus (catégorie Electronique). Branchez l’Arduino, sélectionnez le type de carte (Arduino Uno par défaut) et le port proposé par l’IDE (/dev/ttyACM0 ou /dev/ttyUSB0).

 Pour vérifier la communication entre le Raspberry Pi et l’Arduino, téléversez un sketch simple. Allez par exemple...

Cafetière connectée

Elle permet d’illustrer la communication entre l’Arduino et d’autres périphériques. Il en existe plusieurs versions (Bluetooth, infrarouge, boutons poussoirs), mais la plus amusante est certainement la cafetière contrôlée par Minitel présentée en 2019 à la Maker Fight de Mulhouse (et à la Maker Faire de Paris).

images/Maj0801.png

3615 Café, la cafetière Minitel

Vous trouverez toutes les instructions nécessaires sur https://arduiblog.com/.