come usare la libreria wire, per i collegamenti i2c
Nei collegamenti di tipo I2C tra Arduino e varie periferiche, per un corretto funzionamento occorre usare librerie specifiche, solitamente la più usata a questo scopo è la “wire.h”, anche se in base al tipo di slave usato, potrebbe essere necessario aggiungere altre librerie.
Per chi volesse capire meglio come funziona il protocollo I2C, vi lascio il link qui sotto in cui potete leggere una breve spiegazione.
Arduino: Protocollo I2C
La libreria si aggiunge allo sketch tramite il comando #include <Wire.h>
Comando | Funzione |
---|---|
Wire.begin() Esempio: Wire.begin() Wire.begin(indirizzo) | Inizializza la libreria, va usato una cosa volta indirizzo (facoltativo): indirizzo dello slave a 7 bit. |
Wire.end() | Disattiva la libreria, inibendo il comando Wire.begin(), per riattivare la libreria occorre ripetere il comando Wire.begin() |
Wire.requestFrom(indirizzo, quantità, stop) | Questo comando è usata dal dispositivo controller per richiedere byte ad uno slave, indirizzo: indirizzo dello slave a 7 bit quantità: in numero di byte da richiedere stop: può essere true o false, se true invierà un messaggio di stop dopo la richiesta. Se false invierà continuamente un riavvio dopo la richiesta, mantenendo attiva la connessione. |
Wire.beginTransmission(indirizzo) | Questa funzione avvia la trasmissione al dispositivo periferico i2c con indirizzo specifico. indirizzo: indirizzo dello slave |
Wire.endTransmission() | Interrompe la trasmissione attivata con begin.Transmission() |
Wire.write(valore) Wire.write(stringa) Wire.write(data) Wire.write(lunghezza) | Questa funzione scrive i dati da un dispositivo slave come risposta ad un master. valore: un valore da inviare ad un singolo byte stringa: una stringa da inviare come una serie di byte data: una matrice di dati da inviare come byte lunghezza: il numero di byte da trasmettere |
Wire.available() | Restituisce il numero di byte disponibili per il recupero con read(). |
Wire.read() | Legge un byte che è stato trasmesso da uno slave ad un master dopo il comando requestFrom() |
Wire.setClock(frequenza) | Modifica la frequenza Clock per la comunicazione con i2c. Le periferiche non hanno frequenza di lavoro, solitamente lavorano a 100KHz I valori accettati sono: 100000 (modalità standard) 400000 (modalità veloce) 10000 (modalità bassa velocità) 1000000 (modalità veloce plus) 3400000 (modalità alta velocità) |
Wire.onReceive(gestore) | Registra la funzione da chiamare quando uno slave, riceve una trasmissione da un master gestore: la funzione da chiamare quando lo slave riceve i dati. |
Wire.onRequest( gestore) | Registra una funzione da chiamare quando un master chiede dati ad uno slave gestore: la funzione da chiamare. |
Wire.setWire.Timeout( timeout, reset_on_timeout) | Imposta il timeout per le trasmissioni via cavo in modalità master. timeout: timeout in microsecondi, se 0 è disabilitato reset_on_timeout: se vero il dispositivo verrà ripristinato automaticamente al timeout |
Wire.clearWireTimeoutFlag() | cancella i flag timeout |
Wire.getWireTimeoutFlag() | Controlla eventuali timeout dopo la cancellazione dell’ultimo flag |