Communication entre deux Arduino
Dans ce tutoriel, nous allons apprendre :
- Communication entre deux Arduino - Aperçu
- Communication entre deux Arduino via Ethernet/WiFi
- Exemple d'application : Un bouton/interrupteur connecté à l'Arduino #1 contrôle une LED connectée à l'Arduino #2 via Ethernet/WiFi
- Comment connecter deux Arduino via Internet
Le tutoriel fournit le code Arduino pour deux cas :
- Arduino Uno R4 WiFi
- Arduino Uno/Mega avec Ethernet Shield 2
Préparation du matériel
2 | × | Arduino UNO R4 WiFi | |
2 | × | USB Cable Type-C | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | |
1 | × | (Optional) Transparent Acrylic Enclosure For Arduino Uno |
Alternatively if using Ethernet:
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
Communication entre deux Arduino - Vue d'ensemble
Considérons un cas spécifique : l'Arduino #1 communique avec l'Arduino #2. Il existe de nombreuses méthodes pour permettre la communication entre deux Arduino. Nous pouvons en choisir une en fonction de la portée de la communication. Le tableau ci-dessous montre certaines méthodes et leur portée de communication.
Methods | Range |
---|---|
I2C | very short |
SPI | very short |
UART (TTL) | very short |
UART (RS-232/485/422) | short |
Bluetooth | short |
LoRa | long |
Ethernet/WiFi | unlimited(*) |
※ NOTE THAT:
(*):
- Si deux Arduino sont connectés à Internet, la portée de communication est illimitée.
- Si deux Arduino ne sont pas connectés à Internet, mais qu'ils sont connectés au même réseau LAN, ils peuvent toujours communiquer entre eux. La portée de communication est limitée au réseau LAN.
Parmi les méthodes ci-dessus, ce tutoriel utilise Ethernet/WiFi pour permettre la communication entre deux Arduino car cela permet à deux Arduino de communiquer sur une distance illimitée.
Communication entre deux Arduino via Ethernet/WiFi
Deux Arduino peuvent communiquer l'un avec l'autre via Ethernet/WiFi si :
- Deux Arduino dans le même réseau LAN, la connectivité Internet n'est PAS nécessaire
- Deux Arduino dans des réseaux LAN différents, la connectivité Internet est nécessaire
Peu importe que deux Arduino se connectent entre eux au sein d'un réseau LAN local ou via Internet, il existe deux types de communication :
- Deux Arduino communiquent directement l'un avec l'autre.
- Deux Arduino communiquent via un serveur centralisé (par exemple, un serveur MQTT). Voir Communication entre deux Arduino via MQTT
Dans le cas d'une communication directe, dans la plupart des cas, un Arduino joue le rôle de client TCP, l'autre celui de serveur TCP.
Dans le cas de la communication via un serveur centralisé, dans la plupart des cas, les deux Arduino jouent le rôle de client TCP.
Selon l'application, nous devons choisir un protocole d'application pour la communication entre deux Arduino. Voici quelques-uns des protocoles d'application que nous pouvons utiliser :
- Protocole auto-défini sur TCP brut (directement)
- Modbus TCP (directement)
- HTTP (directement)
- Telnet (directement)
- SSH (directement)
- MQTT (via un serveur centralisé)
※ NOTE THAT:
Peu importe si :
- Les deux Arduino utilisent Ethernet
- Les deux Arduino utilisent le WiFi
- Un Arduino utilise Ethernet, l'autre utilise le WiFi
Le protocole UDP dépasse le cadre de ce tutoriel.
Exemple d'application
Réalisons l'application suivante : Un bouton/interrupteur connecté à l'Arduino #1 contrôle une LED connectée à l'Arduino #2 via Ethernet/WiFi.
Ce tutoriel utilise deux Arduino Ethernet Shield 2. Vous pouvez utiliser un autre WiFi Shield ou Ethernet Shield à la place. Si vous utilisez un autre shield, il suffit de modifier légèrement le code.
Comme mentionné ci-dessus, il existe certains protocoles d'application que nous pouvons utiliser. Dans cet exemple, pour simplifier, nous définirons un protocole par nous-même (un protocole auto-défini).
Protocole auto-défini
Définissons un protocole simple :
- Une connexion TCP est établie entre l'Arduino #1 et l'Arduino #2
- Arduino #1 :
- Agit en tant que client TCP, initie activement une demande de connexion TCP à l'Arduino #2
- Lorsque l'interrupteur est mis en position ON, l'Arduino #1 envoie un octet (commande) avec la valeur 1 à l'Arduino #2.
- Lorsque l'interrupteur est mis en position OFF, l'Arduino #1 envoie un octet (commande) avec la valeur 0 à l'Arduino #2.
- Arduino #2 :
- Agit en tant que serveur TCP, écoute les demandes de connexion TCP de l'Arduino #1
- Si l'octet reçu est 1, allumez la LED
- Si l'octet reçu est 0, éteignez la LED
Schéma de câblage
※ NOTE THAT:
vous devez ajouter une résistance pour la LED si celle-ci n'a pas de résistance intégrée. Vous pouvez en savoir plus dans les tutoriels Arduino - LED et Arduino - Button.
Communication entre deux Arduino via WiFi
Code Arduino pour Arduino Uno R4 WiFi #1
Code Arduino pour Arduino Uno R4 WiFi #2
Communication entre deux Arduino via Ethernet
Code Arduino pour Arduino Ethernet #1
Code Arduino pour Arduino Ethernet #2
Étapes rapides
- Si vous utilisez le Shield Ethernet, empilez les Shields Ethernet sur l'Arduino #1 et l'Arduino #2
- Connectez un bouton/interrupteur à l'Arduino #1
- Connectez une LED à l'Arduino #2
- Ouvrez l'IDE Arduino (appelé Arduino IDE #1)
- Installez la bibliothèque ezButton sur Arduino IDE
- Connectez l'Arduino #1 au PC via un câble USB et sélectionnez le port COM de l'Arduino #1 sur l'Arduino IDE #1
- Ouvrez une autre fenêtre de l'IDE Arduino (appelé Arduino IDE #2) en cliquant sur l'icône de l'IDE Arduino sur votre PC (important !(**))
- Connectez l'Arduino #2 au PC via un câble USB et sélectionnez le port COM de l'Arduino #2 sur l'Arduino IDE #2
- Copiez le code de l'Arduino #1, collez-le dans l'Arduino IDE #1 et enregistrez-le (nommé Arduino1)
- Copiez le code de l'Arduino #2, collez-le dans l'Arduino IDE #2 et enregistrez-le (nommé Arduino2)
- Téléchargez d'abord le code de l'Arduino #2 sur l'Arduino #2
- Ouvrez le moniteur série sur l'Arduino IDE #2, obtenez l'adresse IP du serveur TCP.
- Mettre à jour l'adresse IP du serveur TCP dans le code de l'Arduino #1
- Téléverser le code de l'Arduino #1 sur l'Arduino #1
- Ouvrir le moniteur série sur l'IDE Arduino #1
- Appuyer et maintenir le bouton sur l'Arduino #1 → observer l'état de la LED sur l'Arduino #2 (ALLUMÉ)
- Relâcher le bouton sur l'Arduino #1 → observer l'état de la LED sur l'Arduino #2 (ÉTEINT)
- Appuyer, maintenir et relâcher le bouton plusieurs fois.
- Voir la sortie sur les deux moniteurs série
- Moniteur série de l'Arduino #1
- Moniteur série de l'Arduino #2
- Si vous ouvrez la fenêtre Arduino IDE #2 via "Fichier" → "Nouveau" ou "Ouvrir" depuis la fenêtre Arduino IDE #2, vous ne pourrez PAS ouvrir deux moniteurs série pour deux Arduino sur le même PC en même temps.
- Il existe une alternative à ce protocole auto-défini. C'est le Modbus TCP. Le protocole Modbus est standardisé, il présente de nombreux avantages par rapport au protocole auto-défini. Voir plus dans le tutoriel Arduino - Modbus.
※ NOTE THAT:
Vidéo
Comment connecter deux Arduino via Internet
Il existe deux types d'adresse IP : l'adresse IP privée et l'adresse IP publique. L'adresse IP que vous utilisez dans votre réseau domestique est généralement une adresse IP privée.
Vous pouvez facilement identifier l'adresse IP privée. L'adresse IP privée a trois schémas : 10.x.x.x, 172.16.x.x, 192.168.x.x
Il n'est PAS important d'utiliser l'adresse IP privée dans le cas suivant :
- Si deux Arduino se trouvent sur le même réseau LAN, qu'ils communiquent directement ou via un serveur centralisé, que votre réseau LAN soit connecté à Internet ou non.
- Si deux Arduino se trouvent sur des réseaux LAN différents et communiquent entre eux via un serveur centralisé.
Dans le cas où deux Arduino sont dans des réseaux LAN différents et communiquent directement entre eux, le client TCP Arduino peut utiliser l'adresse IP privée. Cependant, le serveur TCP Arduino DOIT utiliser soit :
- Une adresse IP publique
- Une adresse IP privée avec "Redirection de port" sur le routeur/point d'accès
Le processus de mise en place du "Port Forwarding" diffère pour chaque routeur/point d'accès. Cela sort du cadre de ce tutoriel.