HOWTO · Arduino
Selezione dei pin per I2c su Arduino Uno
Questo articolo elaborerà i pin necessari per il bus di comunicazione I2C.
In questa pagina
Su Arduino Uno, collega la linea SDA del dispositivo I2C al pin A4 e la linea SCL al pin A5. Collega tra loro le masse del dispositivo e della scheda, alimenta il dispositivo secondo i suoi requisiti e inizializza il bus in uno sketch Arduino con la libreria Wire. Le etichette e la disposizione dei pin possono variare: prima di effettuare i collegamenti, controlla le marcature sulla tua specifica scheda Uno.
Pin I2C su Arduino Uno
La mappatura I2C abituale dell’Uno è SDA su A4 e SCL su A5. Alcune tabelle dei pin indicano questi segnali anche come PC4 (SDA) e PC5 (SCL); sulla scheda, i punti di collegamento pratici sono i pin analogici A4 e A5. Alcune schede Uno riportano anche etichette SDA e SCL separate. Queste etichette corrispondono agli stessi segnali del bus: non indicano un secondo bus I2C.
A cosa servono SDA e SCL
I2C usa due linee di segnale. SDA trasporta i dati seriali tra il controller e i dispositivi collegati, mentre SCL trasporta il segnale di clock che coordina i trasferimenti. Tutti i dispositivi sul bus si collegano alle stesse linee SDA e SCL. Segui le etichette per abbinare correttamente ogni segnale: se scambi le due linee, i dispositivi non comunicheranno come previsto.
Come collegare un dispositivo I2C ad Arduino Uno
Con la scheda spenta, collega il pin A4/SDA dell’Uno al pin SDA del dispositivo e A5/SCL al suo pin SCL. Collega GND sull’Uno a GND sul dispositivo, in modo che condividano il riferimento elettrico. Collega l’ingresso di alimentazione del dispositivo solo a una tensione supportata dal modulo. Non dare per scontato che ogni dispositivo I2C accetti 5 V: controlla le marcature o la documentazione e, se la tensione logica è incompatibile con l’Uno, usa un convertitore di livello adatto.
In genere, le linee I2C richiedono resistori di pull-up. Molti moduli li includono già: controlla prima la documentazione o il circuito del modulo. Se il bus non dispone di pull-up adeguati, aggiungili tra SDA e l’alimentazione logica del bus e tra SCL e la stessa alimentazione. Un valore di circa 4.7 kΩ è un punto di partenza comune, non un requisito universale: il valore adatto dipende dalla velocità del bus, dal cablaggio e dai dispositivi. Prima di aggiungere più pull-up con resistenza bassa, verifica il circuito risultante.
Inizializzare I2C con la libreria Wire
L’IDE Arduino include la libreria Wire per I2C. Includila nello sketch con #include <Wire.h>, poi chiama Wire.begin(); all’interno di setup() per inizializzare l’Uno come controller del bus. Questo passaggio inizializza il bus, ma da solo non legge un sensore né conferma che un dispositivo sia collegato. Il codice specifico per il dispositivo deve usare l’indirizzo I2C e la sequenza di registri o comandi indicati nella relativa documentazione.
Per esempio, la riga pertinente in uno sketch Arduino è Wire.begin();. Questa riga specifica per l’hardware non è presentata come esempio eseguito dall’host: il pacchetto fornito non contiene risultati di esecuzione ottenuti con una toolchain Arduino o con una scheda Uno collegata. Un programma che usa Wire.h richiede anche il core Arduino e la configurazione della scheda.
Controllare le etichette della scheda e risolvere i problemi di collegamento
Se un dispositivo non risponde, controlla questi punti nell’ordine indicato:
- Verifica che SDA sia collegato a SDA (A4 sull’Uno) e SCL a SCL (A5); correggi eventuali fili incrociati.
- Verifica che le masse dell’Uno e del dispositivo siano collegate e che il dispositivo riceva la tensione di alimentazione specificata.
- Controlla che i pull-up siano presenti e collegati a una tensione logica compatibile con entrambi i dispositivi. Non considerare 4.7 kΩ un valore fisso valido per ogni bus.
- Controlla nella documentazione del dispositivo l’indirizzo e la sequenza di comunicazione.
Wire.begin()avvia il bus, ma non seleziona l’indirizzo di un dispositivo. - Leggi le etichette dei pin sulla scheda. Se sono presenti pin SDA/SCL, usa quelle etichette per gli stessi segnali I2C; non dedurre una disposizione diversa da quella di un’altra revisione dell’Uno.