Comunicazione i2C tra due schede Arduino

Comunicazione i2C tra due schede Arduino
I2C è un protocollo di comunicazione utilizzato per collegare i dispositivi a una scheda microcontrollore Arduino UNO. Il protocollo utilizza una riga di dati condivisa (SDA) e una linea di clock (SCL) per la comunicazione. La libreria di filo integrata nell'IDE Arduino consente una facile comunicazione con dispositivi I2C attraverso funzioni di alto livello e supporta più bus i2c.

Questo articolo copre:

  • Cos'è la comunicazione I2C in Arduino
  • Pin i2c in arduino
  • Cos'è la libreria di filo i2c
  • Collegamento di due Arduino Board usando I2C come master e slave
  • Schema
  • Codice principale
  • Codice degli schiavi
  • Produzione
  • Conclusione

Cos'è la comunicazione I2C in Arduino

I2c (Circuito inter-integrato) è un protocollo popolare per il collegamento di microcontrollori con periferiche come sensori e display. Arduino Uno, una scheda microcontrollore ampiamente utilizzata, può essere configurata per comunicare con altri dispositivi utilizzando il protocollo di comunicazione I2C.

Alcuni punti salienti principali della comunicazione I2C includono:

Capacità multi-master e multi-slave: I2C supporta più dispositivi master e più dispositivi slave su un singolo bus, consentendo la comunicazione tra più dispositivi contemporaneamente.

Conteggio dei pin basso: I2C utilizza solo due righe, SDA e SCL, per la comunicazione, che riduce il numero di connessioni richieste e semplifica il cablaggio.

Dispositivi indirizzabili: Ogni dispositivo I2C sul bus ha un indirizzo univoco, consentendo una facile identificazione e comunicazione con dispositivi specifici.

Ad alta velocità: I2C è in grado di alte velocità di dati fino a 3.4 Mbps, rendendolo adatto per applicazioni di trasferimento di dati ad alta velocità.

Risparmio energetico: I2C consente una comunicazione a bassa potenza tra i dispositivi consentendo di inserire i dispositivi in ​​modalità a bassa potenza quando non si comunica e si svegliano su richiesta.

Pin i2c in arduino

Nella comunicazione I2C, vengono utilizzate due righe:

  • Linea dati (SDA): Riga di dati per lo scambio di dati tra dispositivi master e slave.
  • Linea dell'orologio (SCL): Linea di clock per la sincronizzazione della comunicazione I2C tra i dispositivi.

Il maestro Arduino controlla la linea di clock I2C e avvia la comunicazione con le periferiche, mentre i dispositivi slave rispondono alle richieste del master.

Nella tabella seguente, troverai i pignoli dell'interfaccia I2C su varie schede Arduino:

Asse Pin i2c
Arduino Nano SDA-A4 | SCL-A5
Arduino Mega SDA-A4 | SCL-A5 e SDA-20 | SCL-21
Arduino Leonardo SDA-A4 | SCL-A5
Arduino Uno SDA-A4 | SCL-A5
Arduino Micro SDA-02 | SCL-03*

*I pin i2c possono variare a seconda della versione della scheda che stai usando gentilmente, consultare i rispettivi fogli dati per maggiori dettagli.

Cos'è la libreria di filo i2c

La libreria di filo I2C è preinstallata in un IDE che costruisce la comunicazione tra i dispositivi I2C. La libreria contiene funzioni per la configurazione e la comunicazione sul bus I2C, comprese le funzioni per l'inizializzazione del bus come dispositivo master o slave, invio e ricezione di dati e controllando la velocità di clock.

La biblioteca semplifica la comunicazione con i dispositivi I2C estraggendo i dettagli di basso livello del protocollo I2C e fornendo funzioni semplici e di alto livello che possono essere utilizzate negli schizzi Arduino. Ad esempio, il inizio() La funzione viene utilizzata per inizializzare il bus i2c come dispositivo master o slave

La libreria supporta anche l'uso di più bus i2C, consentendo la comunicazione con più dispositivi contemporaneamente. Se hai a che fare con più sensori o display per un progetto, questo è utile.

Collegamento di due Arduino Board usando I2C come master e slave

Per stabilire la comunicazione I2C tra due schede Arduino Uno, i pin SDA e SCL di entrambe le schede devono essere collegati insieme e condividere un terreno comune. La comunicazione può essere ottenuta utilizzando la libreria di filo integrata in Arduino che contiene funzioni per la configurazione e la comunicazione sul bus i2c.

Schema

L'immagine sotto mostra due schede Arduino Uno collegate nella configurazione di Master-Slave:

Codice principale

Carica il codice di seguito per Master Arduino Board:

#include /*libreria filo per la comunicazione i2c* /
int x = 0; /*Inizializza una variabile per la memorizzazione di un numero*/
void setup ()
/*Avvia il bus i2c come master*/
Filo.inizio();

void loop ()
/*L'indirizzo del bus i2c è impostato come 9 per il dispositivo slave*/
Filo.BeginTransmission (9);
Filo.scrivere (x); /*invia x*/
Filo.endTransmission (); /*smetti di trasmettere*/
x ++; /*Incremento x*/
if (x> 5) x = 0; /*reset x una volta che ottiene 6*/
ritardo (1000);

Codice avviato da include la libreria master i2c. Viene inizializzata una variabile che memorizzerà i valori interi a partire da 0 a 5. L'indirizzo I2C per il dispositivo slave è definito come 9. Utilizzando la funzione della libreria di filo

Sul Master Board, il inizio() La funzione inizializzerà il bus i2c come dispositivo principale

Una volta configurate le schede, possono comunicare tra loro sopra il bus i2c. I dati di richiesta di Master Arduino dalla Slave Arduino Board e Slave possono rispondere con i dati richiesti.

Codice degli schiavi

Carica il codice di seguito sulla scheda Arduino slave in cui è collegato LED:

#includere
INT LED = 13; /*PIN LED per output*/
int x = 0; /*variabile per ricevere valore dal maestro arduino*/
void setup ()
pinMode (LED, output); /*Pin LED impostata come output*/
Filo.Inizia (9); /*Il dispositivo slave i2c leggerà i dati da master all'indirizzo n. 9*/
Filo.onreceive (receevent); /*Allega una funzione per attivare quando qualcosa viene ricevuto*/

void receevent (int byte)
X = filo.Leggere(); /*Leggi un personaggio dal maestro i2c*/

void loop ()
/*Se il valore ricevuto è 0 led less per 200 ms*/
if (x == 0)
DigitalWrite (LED, High);
ritardo (200);
DigitalWrite (LED, basso);
ritardo (200);

/*Se il valore ricevuto è 3 LED lampeggiante per 400 ms*/
if (x == 3)
DigitalWrite (LED, High);
ritardo (400);
DigitalWrite (LED, basso);
ritardo (400);

Codice avviato includendo la libreria di fili e successivamente abbiamo impostato il LED integrato al pin 13 di Slave Arduino come output. Successivamente una variabile X è definito che riceverà i dati dal maestro Arduino. Usando questo valore intero, le lampeggiamo a battere le led su un particolare carattere una volta ricevuto.

In ciclo continuo(), Il carattere ricevuto viene quindi tradotto in una diversa velocità di lampeggiare a LED a seconda del personaggio ricevuto. Se la condizione viene utilizzata quando il carattere ricevuto dal dispositivo principale è 0 il LED si lampeggia con 200 ms e se il carattere ricevuto è 3 LED lampeggerà con un ritardo di 400ms.

In caso di altri personaggi LED rimarrà fuori.

Produzione

In output possiamo vedere il LED collegato con Slave Arduino Blinks ogni volta che Master invia un carattere 0 o 3.

Conclusione

La comunicazione I2C consente a più dispositivi di comunicare tra loro usando un bus comune. Le schede Arduino possono essere configurate per comunicare tra loro usando I2C collegando i pin SDA e SCL e configurando le schede come master e slave usando la libreria di filo in Arduino. L'uso della comunicazione I2C a più dispositivi all'interno di un progetto è quindi più semplice ed efficiente.