Communicatie tussen twee Arduino
In deze tutorial gaan we leren:
- Communicatie tussen twee Arduino - Overzicht
- Communicatie tussen twee Arduino via Ethernet/WiFi
- Voorbeeldtoepassing: Een knop/schakelaar aangesloten op Arduino #1 bestuurt een LED aangesloten op Arduino #2 via Ethernet/WiFi
- Hoe twee Arduino via internet te verbinden

De tutorial bevat Arduino code voor twee situaties:
- Arduino Uno R4 WiFi
- Arduino Uno/Mega met Ethernet Shield
Benodigde Hardware
| 2 | × | Arduino UNO R4 WiFi | |
| 2 | × | USB-kabel Type-C |
Alternatief bij gebruik van Ethernet:
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Communicatie tussen twee Arduino - Overzicht
Laten we een specifieke situatie bekijken: Arduino #1 communiceert met Arduino #2. Er zijn veel methoden om communicatie tussen twee Arduino mogelijk te maken. We kunnen een methode kiezen afhankelijk van het communicatiebereik. De onderstaande tabel toont enkele methoden en hun bereik.
| Methoden | Bereik |
|---|---|
| I2C | zeer kort |
| SPI | zeer kort |
| UART (TTL) | zeer kort |
| UART (RS-232/485/422) | kort |
| Bluetooth | kort |
| LoRa | lang |
| Ethernet/WiFi | onbeperkt(*) |
※ Notiz:
(*):
- Als twee Arduino’s verbonden zijn met het internet, is het communicatiebereik onbeperkt
- Als twee Arduino’s niet verbonden zijn met het internet, maar in hetzelfde LAN-netwerk zitten, kunnen ze nog steeds met elkaar communiceren. Het bereik is beperkt tot het LAN-netwerk.
Van de bovenstaande methoden gebruikt deze tutorial Ethernet/WiFi om communicatie tussen twee Arduino mogelijk te maken omdat dit communicatie op onbeperkte afstand mogelijk maakt.
Communicatie tussen twee Arduino via Ethernet/WiFi
Twee Arduino’s kunnen via Ethernet/WiFi met elkaar communiceren als:
- De twee Arduino’s in hetzelfde LAN-netwerk zitten, is internetverbinding NIET nodig
- De twee Arduino’s in verschillende LAN-netwerken zitten, is internetverbinding WEL nodig
Ongeacht of twee Arduino’s binnen een lokaal LAN-netwerk of via het internet met elkaar verbonden zijn, zijn er twee soorten communicatie:
- Twee Arduino communiceren rechtstreeks met elkaar
- Twee Arduino communiceren via een gecentraliseerde server (bijv. MQTT-server). Zie Communicatie tussen twee Arduino via MQTT
In het geval van directe communicatie speelt in de meeste gevallen de ene Arduino de rol van TCP-client en de andere de rol van TCP-server.
In het geval van communicatie via een gecentraliseerde server spelen beide Arduino meestal de rol van TCP-client.
Afhankelijk van de toepassing kiezen we een toepassingsprotocol voor de communicatie tussen twee Arduino. Hieronder staan enkele protocollen die we kunnen gebruiken:
- Zelfgedefinieerd protocol over raw TCP (direct)
- Modbus TCP (direct)
- HTTP (direct)
- Telnet (direct)
- SSH (direct)
- MQTT (via een gecentraliseerde server)
※ Notiz:
Het maakt NIET uit of:
- Beide Arduino gebruikmaken van Ethernet
- Beide Arduino gebruikmaken van WiFi
- Eén Arduino gebruikmaakt van Ethernet en de andere van WiFi
UDP-protocol valt buiten de scope van deze tutorial.
Voorbeeldtoepassing
Laten we de volgende toepassing realiseren: Een knop/schakelaar verbonden met Arduino #1 bestuurt een LED verbonden met Arduino #2 via Ethernet/WiFi.

Deze tutorial gebruikt twee Arduino Ethernet Shields. U kunt in plaats daarvan een andere WiFi Shield of Ethernet Shield gebruiken. Bij een ander shield hoeft u alleen de code iets aan te passen.
Zoals hierboven genoemd zijn er verschillende toepassingsprotocollen mogelijk. In dit voorbeeld houden we het simpel, we definiëren ons eigen protocol (een zelfgedefinieerd protocol).
Zelfgedefinieerd Protocol
Laten we een simpel protocol definiëren:
- Er wordt een TCP-verbinding opgezet tussen Arduino #1 en Arduino #2
- Arduino #1:
- Gedraagt zich als TCP-client, maakt actief verbinding met Arduino #2
- Als de schakelaar op AAN wordt gezet, stuurt Arduino #1 een byte (commando) met waarde 1 naar Arduino #2
- Als de schakelaar op UIT wordt gezet, stuurt Arduino #1 een byte (commando) met waarde 0 naar Arduino #2
- Arduino #2:
- Gedraagt zich als TCP-server, luistert naar verbindingen van Arduino #1
- Ontvangt het een byte met waarde 1, dan gaat de LED AAN
- Ontvangt het een byte met waarde 0, dan gaat de LED UIT
Aansluitschema

※ Notiz:
U moet een weerstand toevoegen voor de LED als de LED geen ingebouwde weerstand heeft. Meer informatie vindt u in de Arduino - LED en Arduino - Knop tutorials.
Communicatie tussen twee Arduino via WiFi
Arduino Code voor Arduino Uno R4 WiFi #1
Arduino Code voor Arduino Uno R4 WiFi #2
Communicatie tussen twee Arduino via Ethernet
Arduino Code voor Arduino Ethernet #1
Arduino Code voor Arduino Ethernet #2
Snelle Stappen
- Als u het Ethernet Shield gebruikt, stapel dan het Ethernet Shield op Arduino #1 en Arduino #2
- Verbind een knop/schakelaar met Arduino #1
- Verbind een LED met Arduino #2
- Open Arduino IDE (hierna Arduino IDE #1 genoemd)
- Installeer de ezButton library in Arduino IDE
- Verbind Arduino #1 met de pc via USB-kabel en selecteer de juiste COM-poort van Arduino #1 in Arduino IDE #1
- Open een tweede Arduino IDE venster (Arduino IDE #2) door op het Arduino IDE icoon te klikken op uw pc (belangrijk!())
- Verbind Arduino #2 met de pc via USB-kabel en selecteer de juiste COM-poort van Arduino #2 in Arduino IDE #2
- Kopieer de code voor Arduino #1, plak deze in Arduino IDE #1 en sla op (bewaar als Arduino1)
- Kopieer de code voor Arduino #2, plak deze in Arduino IDE #2 en sla op (bewaar als Arduino2)
- Upload eerst de code naar Arduino #2
- Open de Serial Monitor in Arduino IDE #2 en noteer het TCP Server IP-adres
- Pas het TCP Server IP-adres aan in de Arduino #1 code
- Upload de code naar Arduino #1
- Open de Serial Monitor in Arduino IDE #1
- Houd de knop op Arduino #1 ingedrukt → zie de staat van de LED op Arduino #2 (AAN)
- Laat de knop op Arduino #1 los → zie de staat van de LED op Arduino #2 (UIT)
- Druk, houd vast en laat de knop meerdere keren los
- Bekijk de output op beide Serial Monitors
- Serial Monitor van Arduino #1
- Serial Monitor van Arduino #2
- (): Als u Arduino IDE #2 opent via "Bestand" → "Nieuw" of "Openen" vanuit het huidige Arduino IDE #2 venster, kunt u NIET tegelijkertijd twee Serial Monitors openen voor twee Arduino op dezelfde pc.
- Er is een alternatief voor dit zelfgedefinieerde protocol: Modbus TCP. Het Modbus protocol is gestandaardiseerd en biedt veel voordelen ten opzichte van het zelfgedefinieerde protocol. Zie meer in de Arduino - Modbus tutorial.
※ Notiz:
Video Tutorial
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.
Hoe twee Arduino via Internet te verbinden
Er zijn twee soorten IP-adressen: privé IP-adres en publiek IP-adres. Het IP-adres dat u thuis gebruikt is meestal een privé IP-adres.
U kunt een privé IP-adres gemakkelijk herkennen aan een van de drie patronen: 10.x.x.x, 172.16.x.x, 192.168.x.x
Het maakt NIET uit om een privé IP-adres te gebruiken in de volgende gevallen:
- Als twee Arduino’s in hetzelfde LAN-netwerk zitten, ongeacht of ze rechtstreeks of via een centrale server communiceren, en ongeacht of het LAN-netwerk verbonden is met het internet
- Als twee Arduino’s in verschillende LAN-netwerken zitten en communiceren via een centrale server
In het geval dat twee Arduino’s in verschillende LAN-netwerken zitten en rechtstreeks communiceren:
- De Arduino TCP-client kan een privé IP-adres gebruiken
- De Arduino TCP-server MOET één van de volgende gebruiken:
- Een publiek IP-adres
- Een privé IP-adres met "Port Forwarding" op de Router/AP
Het proces van "Port Forwarding" verschilt per router/AP en valt buiten de scope van deze tutorial.