Determinare indirizzo I2C di una scheda su Arduino

i2c scanner arduino

Questo sketch esegue la scansione del bus I2C per trovare l’indirizzo dei dispositivi. Se viene trovato un dispositivo, viene segnalato al monitor seriale Arduino.

Moreware si è già occupata, in precedenza, di comunicazione seriale su Arduino, in particolare descrivendo UART, I2C e SPI.

Lo sketch che presenteremo oggi cerca l’indirizzo I2C di una periferica collegata ad Arduino, e rappresenta il primo passo per cercare di capire come funziona praticamente la comunicazione attraverso il protocollo I2C.

Lo sketch mostrerà gli indirizzi (a 7 bit) dei dispositivi trovati durante la scansione, come valori esadecimali. Tali indirizzi verranno in seguito utilizzati per la funzione “Wire.begin” che inizializza la comuncazione sul canale della periferica relativa. Alcuni datasheet utilizzano l’indirizzo a 8 bit, e alcuni sketch di esempio utilizzano indirizzi decimali: l’importante è capire il funzionamento della procedura.

Il programma

Apriamo un nuovo sketch su Arduino IDE, e copiamo il codice sorgente riportato di seguito. Carichiamolo su Arduino e apriamo il monitor seriale. Verrà segnalato ogni dispositivo trovato sul bus I2C.

È possibile spostare i cavi e collegare i dispositivi I2C mentre i2c_scanner è in esecuzione.

L’output del monitor seriale sarà simile a quello nell’immagine di presentazione.

Il codice è abbastanza semplice da seguire: viene inclusa la libreria Wire per l’utilizzo di I2C, poi si inizializza l’oggetto nel setup, assieme al monitor seriale.

Il loop si basa su di un ciclo for che “chiama” in modo sequenziale tutti i numeri (indirizzi) compresi tra 1 e 127 (7 bit): viene richiesta una beginTrasmission() sul relativo indirizzo, e se risponde un apparato, la funzione endTrasmission riporta un codice di errore uguale a zero. Se abbiamo trovato un device I2C valido, stampiamo il valore del suo indirizzo e aggiorniamo il contatore. Infine stampiamo un messaggio rieplogativo, ed attendiamo 5 secondi prima di lanciare una nuova scansione.

Riconoscere l’indirizzo I2C di una scheda collegata ad Arduino non è mai stato così semplice!

 

Post Scriptum

Ci è stato fatto notare che lo script esegue la scansione degli indirizzi a partire dall’1 ed escludendo il 127. L’indirizzo 0 è infatti un indirizzo speciale chiamato “general call address.” L’idea di base è che ogni device “slave” sul bus possa rispondere a tale indirizzo. In realtà non tutti i devices implementano correttamente tale protocollo, si è pertanto sceltyo di lasciarlo fuori dalla scansione.

Gli indirizzi 0x7C 0x7D 0x7E 0x7F sono invece riservati per scopi futuri.

Ovviamente è disponibile la lsita con gli utilizzatori più importanti degli indirizzi I2C.

Join our groups onTelegram…

… and don’t forget our social channels!

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.