DISPLAY LCD I2C (PCF8574T) ARDUINO

Documenti analoghi
Corso Arduino Maggio Matteo Michele Piazzolla Lezione 2 - Sensori

PROTOCOLLO 1-WIRE. Schema a blocchi del sistema 1-Wire e struttura del master e dello slave

Corso di programmazione Arduino DI MALVEZZI DAVIDE

Come utilizzare il modulo ESP8266 per comodare Arduino da Smartphone

Relazione progetto Arduino

Il Theremin con il microcontrollore

ESEMPIO UTILIZZO MODULI RF 433 MHz

EEPROM SERIALI IN I2C BUS.

17^ parte : Utilizzare il modulo Bluetooth JY-MCU. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

COME UTILIZZARE IL SENSORE DI TEMPERATURA TMP36

ACCENDERE E SPEGNERE UN DIODO LED

Corso Arduino Maggio Riccardo Binetti Lezione 2 - Il calore dell analogico

22/09/2010. Rossato Alessio

Salvare i dati rilevati dai sensori di Arduino

Corso Arduino Maggio Riccardo Binetti Lezione 1 - Blinking LEDs with style

Facciamo lampeggiare un led

In questo tutorial decodificheremo i segnali provenienti da un telecomando qualsiasi e utilizzeremo gli stessi segnali per comandare Arduino a

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

Programming with arduino. Lesson 10/05/2017

Arduino/Raspberry Board and GSM Library

INSEGUITORE SOLARE CON ARDUINO. Dispositivo che insegue il movimento solare realizzato con: 1. Arduino 2. 2 foto resistenze 3.

ATTIVITÀ 1. Controllo con telecomando

17^ parte : Bluetooth Shield SLD63030P. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

COMUNICAZIONE SERIALE a cura dell' Ing. Buttolo Marco

D sistema d allarme con sensori magnetici

Lezione 9: Come associare un modulo RTC ad Arduino

SENSORI OTTICI - FOTORESISTENZE

Il protocollo RS Introduzione. 1.2 Lo Standard RS-232

ARDUINO. Colleghiamolo al PC/MAC - FUNZIONA?

Quindi dopo aver collegato tutto avremo qualcosa di simile:

Far lampeggiare un led o forse un semaforo?

LE ALTRE BOARD ARDUINO

Bus RS-232. Ing. Gianfranco Miele April 28, 2011

Tipologie dei dati nell SDK di Arduino come in un vero LP ad alto livello :

Vogliamo far lampeggiare i led collegati come in figura ai bit della porta D del PIC 18F8722 presente sulla demo board in dotazione al laboratorio.

CTU Presenta. Contest Automation con Arduino. IK0XBX - Francesco

7^ parte : Acquisizione della temperatura con LM35 e visualizzazione su display LCD. Author: Ing. Sebastiano Giannitto (ITIS M.

CONTASECONDI CON DISPLAY A 7 SEGMENTI ARDUINO LIKE

Arduino Tutorial #7 - Nunchuk materiale utilizzato Arduino, cavi elettrici, breadboard, nunchuk, 3 led.

14^ parte : Sensore a ultrasuoni HC SR04 e Arduino. Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

N.B: Clicca qui per scaricare il file.zip con tutti gli sketch utilizzati per realizzare la faccia robotica.

TM1638 BOARD con ARDUINO

E labirinto cronaca di un fallimento

Access Control Ivancich Stefano 31 Luglio 2014 TEKNEW - Studio Medici - Marcon(VE)

Uno scenario IoT Maker Faire Rome, ott Internet of Things Duilio Peroni Alessandro Saracino

Porte Input/Output (I/O Connectors)

KeyPad LCD Shield ( blue )

G L O S S A R I O. Fondamenti di Informatica I - Università degli Studi di Trento Dott. Roberti Pierluigi

INTERAZIONE ELETTRONICA

Nicola Amoroso. Corso introduttivo sui microcontrollori A. S Il Bus I 2 C.

CORSO ARDUINO. Corso ASEV Giulio Fieramosca Stefano Panichi. Stefano Panichi e Giulio Fieramosca

La formalizzazione dell informazione: Dati e Diagrammi di Flusso

Protocollo di comunicazione I 2 C

ARDUINO. Ing. Francesco Giurlanda

Interfaccia seriale per LM709SW

ELETTRONICA CON ARDUINO

Per vedere tutti i tutorial:

Corso Base Arduino ed Elettronica

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Gestione Termometro e Termostato.

Corso di BASCOM (Capitolo 1 5 ) Corso Teorico/Pratico di programmazione in BASCOM Autore: DAMINO Salvatore. D I S P L A Y L C D (3).

Protocolli di Comunicazione

Corso Professionale di Arduino Avanzato

Questo sistema si è poi diffuso in tutto il mondo, soprattutto in ambito didattico e hobbistico. Arduino mette a disposizione:

Componenti e connessioni. Capitolo 3

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

Display OLED 128 x 64

TUTORIAL PER UN CORRETTO USO DEL MODULO REAL TIME CLOCK DS 3231

Caratteristiche di un PC

Per vedere tutti i tutorial:

Introduzione all'architettura dei Calcolatori. Maurizio Palesi

Cosa è? Come lo si usa? Come iniziare? Author: Ing. Sebastiano Giannitto (ITIS M.BARTOLO PACHINO)

Genere DATA Generalità Note Distribuzione

Transcript:

DISPLAY LCD I2C (PCF8574T) ARDUINO

In questo tutorial mostreremo come comandare un display lcd con Arduino tramite il protocollo di comunicazione I 2 C molto utile per coloro che vogliono risparmiare 6 Digital Pin su Arduino. Il tutto si basa sull integrato PCF8574T. andremo ad utilizzare i pin SDA e SCL presenti sulla board Arduino. Ecco una tabella con i rispettivi pin SDA e SCL delle board Arduino più utilizzate. Dopo aver effettuato tutti i collegamenti ad Arduino possiamo passare alla programmazione Innanzitutto dovete scaricare la libreria da QUI e caricarla in Documenti\Arduino\libraries\

#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address void setup() { lcd.begin(16,2); lcd.backlight(); void loop() { lcd.setcursor(2,0); lcd.print("ciao Ragazzi"); lcd.setcursor(6,1); lcd.print("(gc)"); https://www.youtube.com/watch?v=nxbfrgxggwm

APPROFONDIMENTI Esistono alcuni metodi che permettono di comunicare con altri dispositivi utilizzando come canale di trasmissione dati i protocolli seriali (I 2 C, SPI o RS232). Questo rende possibile demandare ad una scheda slave funzioni di elaborazione gravose, che non vogliamo far eseguire alla scheda master. Il bus I 2 C, basandosi su due fili, non permette la comunicazione contemporanea tra Master e Slave. Lo scambio dati deve essere gestito dal Master tramite gli indirizzi (univoci) degli slave Il flusso può essere sintetizzato in questo modo: Il Master invia sul bus un bit di start Il Master invia sul bus l indirizzo dello slave con cui vuole comunicare Il Master decide se scrivere o leggere dal dispositivo Lo Slave legge o scrive in base alla richiesta del Master

La libreria Wire dispone di tutte le funzioni necessarie alla realizzazione Master-Slave tra due schede Arduino. Vantaggi 1. Il protocollo I 2 C consente di mettere in comunicazione sulla stessa coppia di cavi ben 128 dispositivi. Questo è possibile grazie allo schema master-slave (capo-suddito) visto prima. Dal punto di vista hardware, il protocollo I 2 C richiede due linee seriali di comunicazione, che non sono TX e RX ma SDA (Serial DAta) É la linea su cui viaggiano le informazioni (bit). SCL (Serial CLock) É la linea su cui viaggia il segnale di clock, solitamente un onda quadra periodica che sincronizza la comunicazione (pensate ad un metronomo); la presenza di questo segnale elimina i ritardi che altrimenti potrebbero compromettere la corretta trasmissione dei dati. 2. Un altro enorme vantaggio del protocollo I 2 C è che tiene la seriale libera e questo è ottimo per gli Arduino UNO, che dispongono di un unica seriale comune con la porta USB. 3. Il protocollo I 2 C è più veloce rispetto alla classica comunicazione seriale.

Attenzione! Se dovete utilizzare il protocollo I2C per la comunicazione con dei sensori, ovviamente dovete conoscere l indirizzo associato a questi ultimi. A seguito trovate il link alla pagina di un programma che, una volta caricato su Arduino, scannerizza tutti i dispositivi collegati e restituisce i loro indirizzi (in codifica esadecimale). - ARDUINO - I 2 C Scanner Aprendo il monitor seriale, viene segnalato ogni dispositivo trovato sul bus I 2 C. È possibile modificare i cavi e i dispositivi I 2 C plug-in mentre i2c_scanner è in esecuzione. L'output del monitor seriale sarà simile a questo:

Innanzitutto dobbiamo includerenla libreria <Wire.h>, mediante la direttiva #include. L istruzione necessaria per inizializzare una rete I 2 C è Wire.begin(), ma va usata in modo differente a seconda del dispositivo in uso: Se l inizializzazione parte dal MASTER, allora la funzione non richiede alcun parametro. Se invece parte da uno SLAVE, allora tra le parentesi tonde bisogna inserire l indirizzo che si vuole assegnare al dispositivo. Nel setup dell Arduino MASTER quindi scriviamo Wire.begin(). Nel setup dell Arduino SLAVE invece scriviamo Wire.begin(3): in questo modo gli assegniamo arbitrariamente l indirizzo 3. I due dispositivi sono pronti a comunicare nella stessa rete! In una rete I2C la trasmissione dei dati avviene solo quando è il master a richiederla mediante l istruzione Wire.requestFrom(indirizzo,numero_byte) I parametri richiesti sono: L indirizzo del dispositivo a cui va inoltrata la richiesta Il numero di byte da richiedere: il master infatti deve tenere traccia della quantità di dati che viaggiano sul filo (Serial DAta).

Ogni slave, dal canto suo, ha il compito di rispondere immediatamente a qualsiasi richiesta del master; per questo nel setup del relativo sketch bisogna scrivere Wire.onRequest(funzione) L istruzione significa: Appena ricevi una richiesta da parte dello slave esegui la funzione che è indicata tra parentesi tonde. Le azioni che lo slave deve eseguire su richiesta del master saranno specificate in una nuova funzione, scritta separatamente dal loop e dal setup. Creiamo quindi una funzione di nome manda che invia al master una sequenza di 4 caratteri (esattamente i 4 byte che esso richiede). void manda() { Wire.write( ciao ); La funzione Wire.write() funziona allo stesso modo della Serial.write(). Adesso dobbiamo completare il codice del master in modo che possa leggere ciò che lo slave sta trasmettendo e poi stamparlo a video.

Il ragionamento è questo: Finché lo slave invia dei caratteri, memorizzali singolarmente in una variabile <a> di tipo char e stampane il contenuto: sarà poi il monitor seriale a comporli in modo che formino la parola. Dopodiché vai a capo e aspetta un secondo. while(wire.available()) { char a = Wire.read(); Serial.print(a); Serial.println(); delay(1000); Anche in questo caso la funzione Wire.available() funziona allo stesso modo della Serial.available().

Per il MASTER il codice è il seguente: #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); void loop() { Wire.requestFrom(3,4); Serial.print( Lo slave ha scritto: ); while(wire.available()) { char a = Wire.read(); Serial.print(a); Serial.println(); delay(1000);

ANALISI DELLE ISTRUZIONI Wire.begin() Inizializza una comunicazione I2C e identificami come master della rete. Serial.begin(9600) Inizializza una comunicazione seriale a 9600 baud. Wire.requestFrom(3,4) Richiedi 4 byte di dati all indirizzo 3. while(wire.available()) Finchè lo slave invia dei dati. char a = Wire.read() Leggi i caratteri e memorizzali uno alla volta nella variabile a. Serial.print(a) Stampa il contenuto della variabile a Serial.println() Vai a capo. delay(1000) Aspetta un secondo: in questo modo il master invierà richieste di dati ad intervalli di un secondo.

Per lo SLAVE il codice è il seguente: #include <Wire.h> void setup() { Wire.begin(3); Wire.onRequest(manda); void loop() { delay(100); void manda() { Wire.write( ciao ); ANALISI DELLE ISTRUZIONI Wire.begin(3) Richiedi 4 byte di dati all indirizzo 3. Wire.onRequest(manda) Non appena arriva una richiesta dal master esegui la funzione manda. Wire.write( ciao ) Invia al master la stringa ciao.

Attenzione! Nel loop abbiamo inserito solo un ritardo di 100ms semplicemente perchè adesso vogliamo concentrarci sulla comunicazione I2C, quindi abbiamo bisogno che aspetti senza eseguire alcuna istruzione aggiuntiva. Ovviamente all atto pratico il loop viene eseguito ciclicamente come accade normalmente, mentre il controllo passa alla funzione manda solo in caso di richiesta da parte del master.

MASTER READER L esempio che abbiamo appena fatto riguarda solo il caso in cui il master (detto reader) richiede delle informazioni dagli slave, e questa è una pratica che solitamente si applica per la lettura dei sensori. MASTER WRITER Nel caso in cui volessimo che fosse il master (detto writer) ad inviare delle informazioni a determinati slave, l istruzione da usare sarebbe Wire.beginTransmission(indirizzo) Tale funzione non richiede la quantità di dati da inviare, ma solo l indirizzo dello slave con cui il master vuole comunicare. Ricordate che la funzione Wire.beginTransmission() deve essere sempre seguita da Wire.endTransmission(indirizzo) che segnala la fine della trasmissione, altrimenti tutti gli slave in comunicazione bloccherebbero permanentemente l esecuzione del proprio loop. Lo schema tipico, quindi è: Wire.beginTransmission(indirizzo); Wire.write(...); Wire.endTransmission(indirizzo); Per avere un quadro completo della libreria e approfondirne le funzioni con maggiore rigore, potete recarvi alla pagina della release ufficiale: - ARDUINO - Wire Library