Oggi discuteremo di come possiamo collegare più dispositivi I2C con Arduino Nano e scansionare il loro indirizzo I2C usando il codice IDE Arduino.
Introduzione alla comunicazione I2C
Arduino Nano può comunicare con altri dispositivi utilizzando il protocollo del circuito inter-integrato (I2C). I dati vengono scambiati tramite due fili utilizzando il protocollo I2C. È ampiamente utilizzato in elettronica perché consente a più dispositivi di condividere un numero limitato di connessioni senza la necessità di un canale di comunicazione separato.
Per utilizzare i2c su Arduino Nano, viene utilizzata la SDA (Pin di dati) e SCL (PIN CLOCK). Nella maggior parte delle schede Arduino Nano, questi pin sono rispettivamente A4 e A5. Dovrai anche includere la libreria del filo nel tuo schizzo e inizializzare la comunicazione I2C usando il filo.inizio () funzione.
I2C è simile nel lavorare a UART e SPI. Ad esempio, come il protocollo I2C SPI ha anche supporto per dispositivi Single Master e più slave. Allo stesso modo, I2C è in qualche modo simile a UART anche a causa dei due fili per la comunicazione. UART utilizza due fili per la comunicazione che è TX e RX, I2C utilizza anche due fili SDA e SCL per la comunicazione e il trasferimento di dati.
L'immagine sopra rappresenta il controllo di due dispositivi slave usando un singolo master. Qui una resistenza a pull -up è collegata sia a SDA che a SCL. I2C fornisce segnali con due livelli bassi e un circuito aperto. I2C su Arduino Nano è in modalità circuito aperto. Resistenza tira up che abbiamo usato tirerà i2c ad alto livello.
Arduino Nano usa due righe per la comunicazione I2C:
Come scansionare l'indirizzo I2C in Arduino Nano usando Arduino IDE
L'indirizzo I2C di un dispositivo deve essere unico perché viene utilizzato per identificare il dispositivo sul bus i2c. Quando un dispositivo invia o riceve dati sul bus i2c, lo fa usando il suo indirizzo I2C unico. Se due dispositivi sullo stesso bus i2c hanno lo stesso indirizzo, sarà impossibile distinguere tra loro, portando a errori di comunicazione e comportamenti inaffidabili.
Per garantire che ogni dispositivo su un bus i2c abbia un indirizzo univoco, ai dispositivi I2C viene generalmente assegnato un indirizzo fisso dal produttore. Questi indirizzi sono in genere valori a 7 o 10 bit, a seconda del protocollo I2C specifico utilizzato.
I dispositivi che utilizzano il protocollo I2C hanno indirizzi unici che vanno da 0 a 127. Ad esempio, se abbiamo uno schermo LCD con lo stesso indirizzo I2C, non saremo in grado di comunicare tra loro usando la stessa scheda Arduino.
Ora interfacciamo due dispositivi I2C con Arduino Nano e troveremo l'indirizzo I2C usando il codice Arduino.
Schema
Sotto l'immagine mostra lo schema di Arduino Nano con OLED e display LCD I2C collegato a A4 e A5 Pin di Arduino Nano. Il pin SDA è su A4 e il pin SCL corrisponde ad A5 di Arduino Nano.
I pin di connessione di Arduino Nano con OLED e I2C LCD sono:
Display OLED | Arduino Nano Pin |
---|---|
VCC | 3v3 |
GND | GND |
SCL | A5 |
SDA | A4 |
Display LCD i2C | Arduino Nano Pin |
---|---|
VCC | 5v |
GND | GND |
SCL | A5 |
SDA | A4 |
Codice
Apri Arduino IDE, collega la scheda Nano e carica il codice dato per scansionare l'indirizzo I2C dello schermo LCD OLED e I2C.
#include /*libreria di filo importato* /
void setup ()
Filo.inizio(); /*Inizia la comunicazione i2c*/
Seriale.Inizia (9600); /*tasso di baud per la comunicazione UART*/
Mentre (!Seriale); /*Attendere l'output seriale*/
Seriale.println ("\ NI2C Scanner");
void loop ()
byte err, ADR; /*variabile per archiviare l'indirizzo i2c*/
int numero_of_devices;
Seriale.println ("scansione.");
numero_of_devices = 0;
per (ADR = 1; ADR < 127; adr++)
Filo.BeginTransmission (ADR);
err = filo.endTransmission ();
if (err == 0)
Seriale.stampa ("dispositivo i2c all'indirizzo 0x");
if (ADR < 16)
Seriale.print ("0");
Seriale.stampa (ADR, esadecimale);
Seriale.println (" !");
numero_of_devices ++;
altrimenti se (err == 4)
Seriale.print ("Errore sconosciuto all'indirizzo 0x");
if (ADR < 16)
Seriale.print ("0");
Seriale.println (ADR, esadecimale);
if (numero_of_devices == 0)
Seriale.println ("no i2c dispositivi allegati \ n");
altro
Seriale.println ("done \ n");
ritardo (5000); /*Aspetta 5 sec dopo ogni scansione I2C*/
Codice avviato includendo la libreria Wire che aiuta Nano a stabilire la comunicazione I2C con i dispositivi. Il prossimo tasso di baud è definito per la comunicazione seriale.
Nella variabile della sezione Loop err E ADR è definito. Due variabili memorizzeranno l'indirizzo I2C dopo la scansione. È definito un ciclo per scansioni gli indirizzi I2C dei dispositivi collegati a Arduino Nano.
Dopo aver scansionato l'indirizzo I2C, verrà stampato sul monitor seriale Arduino. L'indirizzo I2C visualizzato sarà in formato esadecimale.
Hardware
L'immagine sotto mostra l'OLED 0.Il display I2C da 96 pollici e lo schermo LCD I2C sono collegati ad Arduino Nano ai pin GPIO A4 e A5. VCC e GND di entrambi i display sono collegati a Arduino Nano 3V3/5V e PIN GND.
Produzione
Il monitor seriale ha visualizzato l'indirizzo I2C dei display LCD OLED e I2C. Entrambi hanno indirizzi I2C separati, il che significa che possiamo usarli insieme sulla stessa scheda Arduino Nano.
Tuttavia, se abbiamo dispositivi con lo stesso indirizzo I2C, possiamo cambiare il loro indirizzo. Per fare questo look per la scheda tecnica di un sensore specifico.
Entrambi gli indirizzi OLED e LCD I2C sono ottenuti usando Arduino Nano.
Conclusione
Scansione di un indirizzo I2C prima di collegare più dispositivi I2C con Arduino è importante in quanto due dispositivi con lo stesso indirizzo non possono comunicare su un singolo bus i2c. Questo articolo include il codice di scansione I2C utilizzando il quale è possibile trovare uno qualsiasi degli indirizzi del dispositivo I2C che è collegato alla scheda Nano.