Beheer meerdere Arduino’s met een I2C-bus

4.6
(11)

Het kan praktisch zijn, vooral in domotica-projecten, om tussen verschillende apparaten te communiceren. Een van de meest gebruikte technieken is het I2C (of TWI) protocol. Het I2C-protocol is een methode die het mogelijk maakt verschillende “Master”-kaarten en verschillende “Slave”-kaarten met elkaar te verbinden en tot 128 apparaten met elkaar te laten communiceren. Het maakt asynchrone verbindingen mogelijk tussen verschillende componenten om informatie uit te wisselen via een “gemeenschappelijke bus”. We hadden de communicatie gezien via de Seriële poort (UART genoemd) die wordt gebruikt om de code naar de Arduino te sturen door een computer of om twee apparaten te verbinden in het bijzonder in Bluetooth.

Uitrusting

  • Computer
  • Arduino UNO x2 of meer
  • Jumper kabel M / M x3 maal het aantal kaarten

Aansluitschema van de I2C bus tussen Arduino boards

Met het I2C protocol is het ook mogelijk om te communiceren tussen verschillende systemen (sensoren, LCD scherm, Raspberry Pi, etc.). Een interessant voorbeeld is de communicatie tussen verschillende Arduino boards. Daarvoor moeten we tenminste twee programma’s schrijven, een voor de “Mistress” kaart (Master) en de andere voor de “Slaves” kaarten.

Een I2C communicatie wordt gedefinieerd door een twee-draads bus (soms TWI genoemd, Two Wire Interface) en een adres. De pinnen die door I2C-communicatie worden gebruikt, liggen gewoonlijk voor elk apparaat vast. Op de ene wordt de data verzonden (SDA Serial Data Line) en op de andere de synchronisatieklok (SLC Serial Clock Line).

I2C / TWI pins:

  • Uno, Ethernet A4 (SDA), A5 (SCL)
  • Mega2560 20 (SDA), 21 (SCL)
  • Leonardo 2 (SDA), 3 (SCL)
  • Due 20 (SDA), 21 (SCL), SDA1, SCL1

In dit voorbeeld gebruiken we een Arduino Uno board, dus de pinnen A4 en A5.

Om de twee kaarten met elkaar te laten communiceren moeten ze op de juiste manier worden aangesloten (A4 met A4 en A5 met A5) en vergeet niet de massa’s (GND) aan te sluiten zoals aangegeven in het volgende schema.

Voorzichtigheid: Indien de pennen A4 en A5 worden verbonden met de pennen van een kaart zonder voeding, zal de code bevriezen op het ogenblik van de transmissie.

In het algemeen zendt de ene kaart informatie (Writer) en ontvangt de andere kaart (Reader).

I2C bus configuratie code

Met de Wire.h bibliotheek kunt u eenvoudig de seriële communicatie op de I2C bus definiëren. De functies zijn vergelijkbaar met die van de Serial-bibliotheek.

  • Wire.begin () initialiseert het apparaatadres. Function argument may be empty for master devices
  • Wire.write () allows you to send bytes.
  • Wire.requestFrom () handles the request receive function
  • Wire.beginTransmission () starts transmitting data and defines the receiver.
  • Wire.endTransmission ends data transmission
  • Wire.onRequest () handles the request receive function
  • Wire.onRecieve () manages the data reception function

Code of the “Master” card

“Slave” card code

Open the slave card serial monitor before the master card monitor.

In the serial monitor of the “Master” card:

In the serial monitor of the “Slave 1” card:

We can see that the two cards are exchanging information. Het is heel eenvoudig om dit voorbeeld uit te breiden naar meerdere Arduino boards (Leonardo, Mini, etc.) door de bedrading en het adres van de componenten in de “Slave” code aan te passen.

Code om de apparaten te identificeren die zijn aangesloten op de I2C bus

Een goede test om te weten of je apparaten goed met elkaar communiceren is het gebruik van onderstaande code (I2CScanner) ) die alle adressen retourneert van de apparaten die zijn aangesloten op de Master kaart.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *