L’articolo che ti propongo esplora l’uso di un display lcd 1602 che puoi controllare in I2C grazie all’integrato PCF8574T.
Già in passato ho pubblicato un articolo scritto da Matteo, un appassionato arduino, in cui un display lcd 1602 collegato ad un pcf8574p potevi controllarlo con soli 2 pin arduino e l’alimentazione a +5v.
Differenze tra l’articolo di Matteo ed il presente
La differenza tra gli articoli consiste nel fatto che l’integrato utilizzato da Matteo è montato su una basetta millefori autocostruita e quindi tutti i collegamenti sono chiari, del resto Matteo ha condiviso lo schema dei colelgamenti ( vedi articolo ) mentre con i prodotti acquistati, come il display lcd 1602 I2C che l’amico Luca ( www.lucadentella.it ) mi ha dato, è che i collegamenti tra il PCF8574T ed il display in questo caso potrebbero non esserti noti.
Spesso i produttori rilasciano della documentazione dettagliata, in altri casi no e in questi casi è molto difficile recuperare queste informazioni.
La sigla del chip usato per la comunicazione seriale tra il display lcd 1602 I2C ed il display utilizzato da Matteo differiscono per il packaging essendo il PCF8574P fatto in contenitore classico per il montaggio su basette millefori mentre il PCF8574T è nel contenitore a montaggio superficiale smd.
I collegamenti del Display lcd 1602 I2C
Grazie al PCF8574 puoi collegare un display che solitamente prevederebbe un minimo di 6 pin (RS, E, D4, D5, D6, D7) più un pin per la gestione della retroilluminazione con soli 2 pin ( SCL ed SDA ) oltre all’alimentazione +5v e Gnd:
Puoi quindi collegare il +5v del display al +5v di arduino; il pin Gnd del display al Gnd di arduino e i pin SCL ed SDA rispettivamente ai pin A5 e A4:
Ti restano liberi tutti i pin digitali e 4 pin analogici che puoi utilizzare per il tuo progetto.
Lo sketch di test del display con PCF8574T
Sul sito del rivenditore puoi scaricare la libreria LiquidCrystal_I2C adatta a controllare questo display.
Ricorda inoltre che il PCF8574 usa 3 pin ( A0,A1,A2 del chip ) per definire l’indirizzo I2C del componente secondo questa tabella:
o questa per il modello di tipo XXXxxxxA:
Questa informazione è importante nel momento in cui scriverai lo sketch per il tuo progetto. Il modello di display lcd 1602 I2C che sto utilizzando ha i pin A0,A1 ed A2 connessi al +5v che puoi tradurre come H-H-H corrispondente all’indirizzo 0x27 seguendo la prima tabella.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.print("Test Display I2C"); lcd.setCursor(0,1); lcd.print("Versione 1.0"); } void loop() { }
lo sketch non è complesso ci sono alcuni punti che vorrei sottolineare:
linea 04: definisci loggetto lcd come istanza della classe LiquidCrystal_I2C passando come valori di inizializzazione 0x27 = indirizzo I2C,16 = colonne del display lcd 1602 I2C, 2 = linee del display;
linea 09: inizializza l’istanza lcd;
linea 12: usa il metodo backlight() dell’istanza lcd per accendere la restroilluminazione del display;
linea 13: scrivi sulla prima linea del display “Test Display I2C” utilizzando il metodo print();
linea 14: sposta il cursore sulla line successiva ( 0,1 ) al carattere 0;
linea 15: scrivi “Versione 1.0” sulla seconda linea.
avrai notato che tutti i comandi sono identici a quelli utilizzati con i display lcd connessi direttamente ad arduino mediante i 6 pin di controllo, ad eccezione del pin per la retroilluminazione.
Il video del Display lcd 1602 I2C con il PCF8574T
Buon test !!!
261 commenti
1 ping
Vai al modulo dei commenti
Sto usando per la prima volta questa utile integrato e la libreria che gestisce vi I2C lo schermo. Mi chiedevo se nache con questa libreria era possibile settare la posizione del cursore con un comando simile a “set.Cursor(c,r)”.
Grazie
Autore
Ciao Giulio,
si puoi farlo come descritto in quest’altro articolo:
https://www.mauroalfieri.it/elettronica/display-lcd-1602-i2c-pcf8574t.html
Mauro
Ciao… Ma se volessi utilizzare due schermate di display dove in uno visualizzo dei dati e in un altro altri dati???
Autore
Ciao Battista,
ti basta utilizzare la paginazione, nella prima metti i dati che vuoi vedere nella prima pagina e nella seconda i dati successivi.
Ciao ho comrpato tempo fa qui
http://www.ebay.com/itm/Board-Module-Port-IIC-I2C-TWI-SP-I-Serial-Interface-Arduino-1602-LCD-T7-/130942021096
un circuitino gia fatto che appunto usa questo integrato per trasformare un LCD classico in I2C
Ma non mi va 🙁
Domanda posso usarlo anche per LCD 20×4 ?
Se lo metto sul Arduino Mega 2560 posso connettere seerpe I2C A4 e A5 ?
Grazie
Autore
Ciao Savio,
probabilmente continuerà a non funzionare anche cambiando LCD.
Gli LCD non usano tutti il medesimo controller, verifica che il tuo sia tra quelli supportati dal componente che hai acquistato.
Ciao Mauro , innanzitutto i miei complimenti per la tua disponibilità ad ” istruire ” noi dilettanti con sete di sapere…
Volevo sapere se con questo display è possibile cambiare i collegamenti dei pin da usare su arduino.Vorrei usarlo con una Mini Pro.
Ti ringrazio in anticipo e ti saluto.
Alex.
Autore
Ciao Alex,
questo display è di tipo I2C per cui va collegato ai pin I2C dell’adsuino che intendi utilizzare.
Ciao Mauro , scusami ma non capisco.
Sul tuo esempio hai collegato SCL al pin A5 e SDA al pin A4.
Se io non li avessi disponibili , posso usare altri pin ?
Ciao e grazie per la risposta.
Alex
Autore
Ciao Alessandro,
no, se il display è di tipo I2C su arduino sono solo quei due pin.
Ti consiglio di approfondire come funziona il protocollo I2C per capire come collegare più dispositivi ai medesimi pin.
Complimenti e grazie infinite, finalmente sono riuscito a vedere lettere sul display!
Complimenti per la grande conoscenza che ci trasmetti!
Grande Mauro!!!!!!
Luca
Autore
Grazie Luca,
i complimenti sono sempre ben accetti e mi danno la giusta motivazione a continuare.
Ciao Mauro, sto approcciandomi al mondo Arduino, lo schema è semplice, il mio è il Mega 2560 e dal sito ho scaricato la sua libreria, in fase di compilazione mi da un errore.
HelloWorld:7: error: ‘LiquidCrystal_I2C’ does not name a type
HelloWorld.pde: In function ‘void setup()’:
HelloWorld:11: error: ‘lcd’ was not declared in this scope
qualche consiglio?
Autore
Hai installato la libreria che hai scaricato?
Dopo averla installata hai chiuso e riaperto l’IDE?
Mauro
ho lo stesso problema, puoi fornire maggiori informazioni a rigurado?
grazie in anticipo
Autore
Ciao Giuseppe, quale stesso problema?
Ciao Mauro, complimenti per il tutorial, molto ben fatto !
c’è una cosa che non ho capito bene (premetto che devo ancora fare le prove), dovrei collegare un display modello ACM1602B con uno di quei modulini premontati col chip PCF8574T, ma come faccio a trovare l’indirizzo giusto? non capisco come devo usare le tabelle che hai postato.
quoto:
“Il modello di display lcd 1602 I2C che sto utilizzando ha i pin A0,A1 ed A2 connessi al +5v che puoi tradurre come H-H-H corrispondente all’indirizzo 0×27 seguendo la prima tabella.”
ho il datasheet del display, ma non riesco a capire dove vedo i pin A0, A1 A2 a cosa sono collegati 🙁
(io leggo DB0, DB1 e DB2 che corrispondono ai pin 7,8 e 9 e sono DataBit 0,1 e 2)
e 0x27 da HHH come lo ricavi? scusa la mia ignoranza….
Grazie mille 🙂
Autore
Ciao Gabri, è giusto che tu chieda se non ti è chiaro qualche cosa che ho scritto. In elettronica i segnali digitali sono anche detti ALTO e BASSO che in inglese sono tradotti da HIGH e LOW semplificati in H ed L.
Per cui tutti i pin di setting a +5v vuol dire H H H ecco come decidi l’indirizzo.
Ciao, sono alle prime armi e seguendo il tuo esempio il compilatore mi restituisce questo errore:
TestLCD_IIC.ino:8:32: error: invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]
In file included from TestLCD_IIC.ino:2:0:
C:\Users\Mi\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:53:4: error: initializing argument 3 of ‘LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)’ [-fpermissive]
LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
^
C:\Users\Mi\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h: In function ‘void setup()’:
C:\Users\Mi\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:154:9: error: ‘int LiquidCrystal_I2C::init()’ is private
int init();
^
TestLCD_IIC.ino:13:12: error: within this context
Sembra che il problema sia legato alla riga 4.
Mi puoi aiutare?
Grazie
Autore
Ciao Michele,
sei sicuro di aver scaricato la libreria che cito nell’articolo perché l’errore che ti propone è dovuto all’incompatibilità di definizione della riga 4 dello sketch con la riga 53 della libreria.
La libreria che ho utilizzato io:
1. alla riga 53 non inizializza la LiquidCrystal_I2C
2. qualche riga dopo la inizializza ma con questa definizione: LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows);
che è compatibile con lo sketch al 100%.
Ciao sono paolo,
premetto di capirci tanto poco quanto nulla!
ad ogni modo ho un display LCM1602 del tipo PCF8574t,
premetto di aver connesso tutto secondo lo schema
GND-GND, VCC-5v, SDA-A4, SLC-A5,
ho scaricato la libreria indicata in qst articolo e provato lo sketch helloworld.
si blocca su
sketch_oct06h:7: error: ‘LiquidCrystal_I2C’ does not name a type
sketch_oct06h.ino: In function ‘void setup()’:
sketch_oct06h:11: error: ‘lcd’ was not declared in this scope
hai qualche consiglio?
Grazie mille!
Autore
Ciao Paolo,
devi scaricare e installare la libreria LiquidCrystal_I2C su arduino in quanto non è inserita nell’IDE di default.
mi spiegheresti come fare? ho provato a caricare il file LiquidCrystal_I2C.h come sketch ma mi da errore di compilazione
Autore
Ciao Paolo, nel mio blog e nel playground arduino trovi dettagliatamente spiegato passo passo come installare una libreria sul tuo sistema.
Con tanto di schermate passo-passo, segui una delle procedure descritte.
GRAZIE MILLE MAURO!!!!!! ora funziona tutto!!!! avevo sbagliato library
Autore
Ottimo Paolo.
Ciao Mauro.
Ho preso questo kit:
http://www.ebay.it/itm/KIT-COMPLETO-SENSORI-RESISTENZE-LED-ALIMENTATORE-DISPLAY-LCD-RFID-PER-ARDUINO-/271531494649?pt=Componenti_elettronici_attivi&hash=item3f3889ccf9
E mi da LCD 1602 IIC V1 però utilizzando le tue configurazioni e codice l’unica cosa che riesce a fare è spegnere il display….
Cosa dovrei fare??
Grazie per tutto!
Autore
Ciao Piero, purtroppo i kit su eBay sono sempre complicati da usare a causa dela scarsa documentazione fornita e spesso si rivelano un pessimo investimento se non sei più che ferrato in elettronica.
Prova a verificare su internet se esiste della documentazione per il tuo display partendo dal chip di controllo di cui è dotato e cerca il corretto collegamento e la libreria da usare.
Ciao Piero anche io ho comprato il tuo stesso display ed ho esattamente lo stesso errore …. Spero di trovare una soluzione e farti sapere…
Ps. Se hai risolto potresti dire come??
Autore
Ciao Alessandro,
lascio a Piero la risposta.
Ho risolto!!!
Mi è bastato cancellare le librerie importate precedentemente e ricaricare quella in questo articolo!!!
Spero di essere stato utile!
Mauro grazie per i tuoi TUTORIAL!
ciao Mauro :), vorrei farti una domanda ho acquistato questo: http://www.tinydeal.com/it/arduino-colour-assorted-px2gqqv-p-95087.html
poi ho collegato tutto, ho cambiato la stringa così: LiquidCrystal_I2C lcd(0x27,20,4);
e ho avviato tutto ma il display mi fa un lampeggio e poi si spegne e non da più segni di vita cosa ho sbagliato ??
Autore
Ciao Marino,
potrebbe essere difettoso il display LCD da te acquistato.
Dando un occhio al link che hai postato ho visto che indicano loro lo 0x27 come indirizzo del display.
Io evito di acquistare da canali non ufficiali e rivenditori non autorizzati per non incorrere in prodotti difettosi o non documentati a sufficienza che, di solito, si rivelano inutilizzabili.
Salve Mauro,
senta io avrei un dubbio sul collegamento di SCL e SDA, ma non riguardano questo progetto sul display. Ho scritto in questo post perchè ho visto che qui lei lo usava. Quindi in qualsiasi altra shield il collegamento di SCL e SDA si devono collegare ai pin A5 e A4 di arduino ? Grazie mille…
Autore
Ciao Marco,
se leggi il datasheet arduino presente sul sito ufficiale vedrai che SDA ed SCL ( I2C ) sono connessi ad A4 ed A5 o ai due pin in alto dopo i pin digitali e solo a queste coppie può collegare interfacce I2C
Salve Mauro,
Prima di tutto, mi vorrei complimentare con lei per tutte le “perle di saggezza” che riesce a trasmettere a noi dilettanti, poi, le domandavo se riusciva a comunicarmi una guida sul come mostrare su un display, con I2C, i dati raccolti dal sensore DHT11.
Grazie mille in anticipo…
Autore
Ciao Nicolò,
trovi nel blog sia articoli dedicati ai display I2C sia al sensore DHT11.
Per ciascun articolo ho descritto in modo dettagliato lo sketch per consentirti di apprendere le nozioni necessarie ad utilizzare entrambi, modificarli ed adattarli al tuo progetto.
Buonasera Mauro, installando la libreria da lei indicata e copiando l’intero programma mi risulta questo errore durante la compilazione:
In file included from HelloWorld.pde:5:
C:\Documents and Settings\Marco\My Documents\Arduino\libraries\LiquidCrystal_I2C/LiquidCrystal_I2C.h:80: error: conflicting return type specified for ‘virtual void LiquidCrystal_I2C::write(uint8_t)’
C:\Program Files\Arduino\hardware\arduino\cores\arduino/Print.h:48: error: overriding ‘virtual size_t Print::write(uint8_t)’
Le ho provate tutte fino ad ora, spero che almeno lei mi possa aiutare. La ringrazio molto sin d’ora
Autore
Ciao Marco,
con quale versione dell’IDE stai provando lo sketch?
1.0.6
Autore
Ciao Marco,
se provi uno degli esempi della libreria ti da il medesimo errore?
Ad occhio sembra tu abbia più versioni della libreria installate e questo causa conflitto, prova a rimuoverle tutte ed installare solo la libreria consigliata in questo esempio e riprovare.
Avevi proprio ragione! Eliminando le altre librerie è andato tutto liscio come l’olio!!!
Sei un grande! Grazie mille!
Autore
Bene Marco, sono contento !!!
Ciao Mauro
Ho di recente acquistato il Display lcd 1602 I2C PCF8574T, quando carico il tuo programma di esempio funziona, ma se provo a ricaricarlo una seconda volta, magari cambiando la scritta che deve comparire sul display, il display diventa tutto bianco, poi ho notato che se stacco l’alimentazione per 30 secondi la scritta ricompare, può l’i2c diffettoso?
Autore
Ciao Gianluca,
è di certo un comportamento anomalo, sopratutto la comparsa di testo senza l’alimentazione.
Dovresti indagare con un tester per verificare cosa lascia alimentato il display anche dopo l’interruzione di corrente.
Salve Mauro,
ho da poco acquistato una scheda Arduino Mega 2560 ed ho provato ad inserire un display LCD PCF8574T ma, nonostante aver caricato la corretta libreria, quando carico lo sketch di prova, il display si spegne per circa 1 secondo quindi si riaccende ma non compare nessuna scritta. Ho provati altri programmi di prova ma niente… fa sempre lo stesso… il diplay illuminato e nessuna scritta… ho provato anche ad inserire un programma che restituisce nel monitor seriale dell’ambiente di sviluppo, l’indirizzo utilizzato del display e mi compare 0X27, quindi il display risponde correttamente, da cosa potrebbe dipendere?
PS. inizialmente, per errore, avevo collegato i fili SDA ed SCL del display ai piedini A4 e A5 (come indicato per la scheda ARDUINO normale) e non a quelli specifici della scheda 2560.
ringrazio per la cortese risposta
Narciso
Autore
Ciao Narciso,
la prima risposta che ho elaborato leggendo il tuo commento è stata: forse hai connesso SDA ed SCL ai pin A4 ed A5 ma la Mega usa pin differenti per l’I2C, ma mi hai preceduto.
Non saprei dirti sei sicuro dell’indirizzo? quello che ti fai restituire dal monitor seriale potrebbe essere solo il valore della variabile che imposti e quindi non è corretto per il tuo display.
Salve Sig. Narciso Felicioni, mi chiamo Giovanni ed ho un display 20X4 con montata una schedina I2C. Purtroppo non ho documentazione allegata e non capisco perchè il display resta acceso senza alcuna scritta nonostante lo sketch gli sta passando cosa scrivere. Ho il dubbio che sia sbagliato l’indirizzo, a questo proposito Le chiedo se sarebbe così gentile da passarmi il suo sketch rileva-indirizzo.
Grazie anticipatamente.
Giovanni.
Autore
Ciao Giovanni,
lascio a Narciso la risposta alla sua richiesta.
Ciao Mauro,
il display acquistato e questo:
http://it…….press.com/item/IIC-I2C-1602-LCD-module-blue-screen-library-files-For-ARDUINO/1442086912.html?isOrig=true&isOrigTitle=true
il programmino caricato sulla 2560 mi da il seguente responso….
Scanning…
I2C device found at address 0x27 !
done
quali altri indirizzi posso provare?
Autore
Ciao Narciso,
come spesso capita acquistando da siti che non rilasciano documentazione devi procedere verificando i pin di indirizzamento del PCF8574T come sono connessi, di solito sono 3 pin connessi a +5v o Gnd che determinano l’indirizzo del componente secondo la tabella che trovi definita in questo articolo.
Ricordavo di aver spiegato questa specifica, controllerò ed eventualmente la aggiungo.
Salve mauro…
eccomi di nuovo…
Ho risolto il problema…. la regolazione del contrasto del display era al massimo….. regolandolo correttamente sono apparse le scritte……. grazie della cortese attenzione…
voglio approfondire la conoscenza di questa simpatica board… sicuramente ti disturberò nuovamente….
ciao e grazie…. sei cmq forte….
Narciso
Autore
Ciao Narciso,
sono contento che si trattasse solo di un problema di contrasto, a volte le cose più semplici sono risolutive.
Ciao, ho uno schermo LCD identico al tuo, ma mi da dei problemi con la compilazione:
Arduino:1.6.0 (Windows 7), Scheda:”Arduino Uno”
Opzioni di compilazione cambiate, ricompilo tutto
In file included from sketch_feb18b.ino:1:0:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:61:20: error: conflicting return type specified for ‘virtual size_t TwoWire::write(uint8_t)’
virtual size_t write(uint8_t);
^
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:26,
from sketch_feb18b.ino:1:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:40:18: error: overriding ‘virtual void Print::write(uint8_t)’
virtual void write(uint8_t) = 0;
^
In file included from sketch_feb18b.ino:1:0:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:62:20: error: conflicting return type specified for ‘virtual size_t TwoWire::write(const uint8_t*, size_t)’
virtual size_t write(const uint8_t *, size_t);
^
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:26,
from sketch_feb18b.ino:1:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:42:18: error: overriding ‘virtual void Print::write(const uint8_t*, size_t)’
virtual void write(const uint8_t *buffer, size_t size);
^
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:223:0,
from sketch_feb18b.ino:4:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:119:20: error: conflicting return type specified for ‘virtual size_t HardwareSerial::write(uint8_t)’
virtual size_t write(uint8_t);
^
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire/Wire.h:26,
from sketch_feb18b.ino:1:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:40:18: error: overriding ‘virtual void Print::write(uint8_t)’
virtual void write(uint8_t) = 0;
^
Sapresti come aiutarmi?
Autore
Ciao Luca,
apparentemente hai un conflitto con delle librerie, prova a verificare di avere una sola libreria per tipo e includere solo le librerie che ti occorrono.
Ciao Mauro,
complimenti per il tuo sito e per le informazioni che metti a disposizione.
Io ho un problema con un display lcd 16 x 2 con I2C saldato sotto il display (lo ho preso su ebay in un kit per iniziare con arduino) , ho preso il tuo codice ma quando lo carico su Arduino Uno la retroilluminazione del display aumenta per una frazione di secondo e poi si abbassa e non mi visualizza niente.
Sapresti dirmi il problema?
Grazie e saluti Mattia
Autore
Ciao Mattia,
controlla il chip utilizzato dal controller I2C o chiedi al venditore se non riesci a risalirci leggendolo.
Io evito di acquistare da rivenditori che non mi lasciano le specifiche di ciò che compro prima dell’acquisto perché spesso non si riesce a risalire al prodotto o alle specifiche.
Thank you for the demo code and the library link.
I watched your Youtube video and came here.
Now to start development!
Autore
Hi Robert.
Good develop !!!
Ciao, prima di tutto devo ringraziarti per le tue spiegazioni. Adesso una domanda: come faccio a regolare il contrasto di questo tipo di LCD perchè alcune volte contro-luce non riesco a leggere ciò che appare sullo schermo. Grazie in anticipo.
Autore
Ciao Marino,
se non ricordo male il contrasto si regola con quel trimmer nelle vicinanze dei pin SDA ed SCL, che vedi in una delle foto.
Tuttavia se il tuo modello non è esattamente identico verifica sul datasheet del produttore prima di manomettere il controller I2C.
La compilazione dello sketch per il test del display a me fallisce e compare questa finestra:
https://www.dropbox.com/s/l0i6u841rgrgza8/error.jpg?dl=0
Nel report di compilazione compaiono queste due righe in rosso:
collect2.exe: error: ld returned 5 exit status
Error compiling.
La libreria LiquidCrystal_I2C l’ho installata con Sketch->Include Library->Add .ZIP Library
Ho visto che libreria gia’ contiene un oggetto LiquidCrystal_I2C.o
Dovrebbe essere rigenerato oppure il problema e’ un altro?
Utizzo la Arduino IDE in ambiente windows.
Grazie dell’attenzione!
Autore
Ciao Marcello,
l’errore riguarda Windows e l’IDE installato.
Prova a reinstallare l’IDE o aggiornarlo all’ultima versione.
Ciao Mauro,
grazie per la risposta.
Ho aggiornato l’IDE da 1.6.4 a 1.6.5.
Il problema nella compilazione non c’e’ piu’, ma le scritte sull’LCD non compaiono.
Si spegne e si riaccende, ma per il resto nulla.
Inoltre, se commento le ultime due righe nel setup:
//lcd.setCursor(0,1);
//lcd.print(“Versione 1.0”);
ho lo stesso errore di prima in compilazione.
Autore
Ciao Marcello,
se non vedi le scritte sul display dopo averlo correttamente programmato, senza errori, potrebbe essere solo colpa del contrasto, dovresti avere un potenziometro con cui regolare il contrasto.
Ciao Mauro,
ho provato a usare il tuo sketch (copia e incolla), ma sullo schermo mi stampa solo le lettere iniziali delle due frasi. Quale potrebbe essere il problema? Grazie.
Autore
Ciao Filippo,
se leggi nella descrizione dello sketch puoi imparare come funziona e comprendere se si tratta di una incompatibilità del tuo display con la libreria o altro errore.
Ciao Mauro, ottimo intro!!!
Ma non sai dirci di più sulle librerie?
Tipo una reference, per capire che parametri inserire.
Grazie!!
Autore
Ciao Alexxandro,
hai provato nel git dell’autore, se non ricordo male, ci sono tutte le info di cui necessiti e ben documentate.
ciao ho installato la libreria da te consigliata provando” hello, dt studio ” ma mi compare solo la h sul displai
Autore
Ciao Maurizio,
sei sicuro che il driver dell’LCD sia il medesimo da me utilizzato?
I collegamenti sono corretti?
premetto che sono un nuovo appassionato ,per i collegamenti penso che no ci siano errori dato che sembra funzioni bene il display si illumina come posso controllare i driver la scheda e della (Ywrobot lcmi 602 iic)
chip PCF8574T
Autore
Ciao Maurizio,
solitamente il produttore rilascia gli schemi e la lista delle caratteristiche del prodotto indicandoti il tipo di controller ed i collegamenti da eseguire.
Se non lo fa puoi chiederglieli.
Buongiorno Mauro,
innanzitutto complimenti per il tuo sito.
Ti volevo fare una domanda, è possibile usare in contemporanea i pins SCLed SDA sia come ingressi analogici che I2C commutando qualche registro interno?
In fondo la misura che devo fare è una corrente e la posso fare anche una volta al secondo magari durante le fasi di refresh dell’LCD.
Ti faccio questa domanda perchè in un progetto che sto sviluppando mi servono 5 analogiche con la visualizzazione su LCD I2C.
Non posso usare la configurazione LCD 4bit perchè sono al limite anche con i pins digitali.
Antonio
Autore
Ciao Antonio,
dai miei esperimenti non è utilizzabile la combinazione dei due o li dichiari per uso con I2C o per uso analogico.
Buongiorno Mauro , innanzitutto complimenti per il tuo sito e il tuo modo di spiegare
Vi volevo fare una domanda , quando verifico lo sketch da lei dato mi si verifica un errore che recita che ci manca la libreria wire alla versione 1.0 , dopo tante ricerche su google non lo trovo da nessuna parte , come posso risolvere ?
grazie
Alessio
Autore
Ciao Alessio, ( con il segno < prima di Wire.h e > subito dopo ) in alternativa installa nuovamnete l’IDE
la libreria Wire.h è inclusa nell’IDE arduino per cui è strano che tu riceva questo errore.
Prova a scriverla così: #include
ho prova ma non funziona il display si accende ma non visualizza nessuna scritta non so cosa sbaglio
Autore
Ciao Davide,
hai controllato che il display sia il medesimo modello mostrato in questo articolo?
A volte sembrano simili ma non lo sono, la lettera finale è un indicatore delle differenze.
Ho un display LCD 20×4 il modello è 2004A e monta la scheda seriale sainsmart LCD2004 il quale monta l’integrato PCF8574T. L?altro display è un normalissimo display LCM1602C al quale ho applicato la scheda diconversione seriale che monta anche lei l’integrato PCF8574T. Quando vado a caricare il tuo programma il display visualizza la lettera T sulla prima riga in prima posizione e la lettera V sulla seconda riga in prima posizione e il resto del testo non viene visualizzato. Ovviamente alla riga LiquidCrystal_I2C lcd(0x27,16,2); imposto 16 2 per il modello LCM1602C mentre 20 4 per il modello 2004A. Ho letto in giro che bisogna mettere delle resistenze di pull-up su A4 e A5. Come devo fare?
Autore
Ciao Davide,
solitamente i convertitori i2c che ho provato possiedono già questo tipo di protezione con reistenze di pull-up, puoi cercare cmq nel web la soluzione di connessione inserendo “pull-up resistor i2c arduino”
Mi correggo con il display LCD2004 caricando lo sketch “Hello World” contenuto nel file zip della libreria non viene visualizzato nulla, mentre con il display LCM1602C collegato come ho spiegato precedentemente, caricando sempre “Hello World” mi visualizza solo la lettera H sulla prima riga in prima posizione. Ho provato a caricare lo sketch “SerialDisplay” sempre contenuto nel file zip della libreria, inviando delle parole, lettere o numeri vengono visualizzati correttamente amche se alla fine viene visualizzato un carattere che sembra una E senza | (penso che sia il carattere corrispondente ad INVIO). Come è possibile che quest’ultimo funziona e “Hello World” no.
Autore
Ciao Davide,
prova a comprendere le differenze tra i due sketch, probabilmente il primo ed il secondo esempio inizializzano in modo differente il display o inseriscono tempi di delay() differenti.
Ci sono riuscito ho trovato la libreria giusta ed entrambi i display funzionano correttamente. Una sola cosa è possibile cancellare una sola riga del display? con lcd.clear(); si cancella tutto l’LCD.
Grazie
Autore
Ciao Davide,
bene per la libreria.
lcd.clear() che conosco io non può farlo, se la tua libreria implementa un metodo che possa farlo immagino sia descritto nel manuale della libreria stessa, di fatto essendo ogni libreria scritta da utenti indipendenti potrebbe benissimo possedere tale funzionalità
ciao Mauro,
vorrei cancellare le librerie installate in precedenza per evitare problemi di conflitto…Non riesco a cancellarle . come posso fare?
GRAZIE
Autore
Ciao Mirko,
io di solito chiudo l’IDE, vado nella dir delle librerie e cancello quella che crea conflitto.
Riapro l’IDE e solitamente quella libreria è sparita.
scusami Mauro sono riuscito a cancellare le librerie , però mi si illumina tutta la prima riga dell’ lcd …Secondo lei ha un difetto il display?
Autore
Ciao Mirko,
sembra un difetto di connessione dell’LCD o una libreria non adeguata al chip che possiedi.
Ciao Mauro.. Complimenti per il tuo sito. Il mio problema è che il display mostra solo la prima lettera per ogni rigo.
Nel caso in esempio il display mostra:
T
V
Per scrivere una parola devo usare “lcd.print” per ogni lettera, ma è molto scomodo. Il display e l’integrato sono gli stessi dell’esempio.
Ti ringrazio in anticipo per la disponibilità.
Autore
Ciao Giuseppe,
non sei il primo, se leggi nei commenti, che lamenta questo comportamento.
Gli altri lo hanno risolto, se ho capito bene, con una libreria differente da quella che ho utilizzato io, probabilmente dovuta ad un differente firmware presente nel display che state utilizzando.
Ti consiglio di chiedere al produttore/venditore di fornirti una libreria adatta al controlle I2C che monta il tuo display.
Ciao Mauro,
Complimenti per le ottime guide!
Tentavo per l’appunto, il collegamento del mio 1602 con PCF8574T, ma anche utilizzando le le librerie da te fornite riesco soltanto ad accendere il display.
In particolare appena finito l’upload dello sketch il display si spegne e riaccende ma non mostra nulla.
Premetto che il mio Arduino UNO è un clone con Chip MEGA328P e che con altri sketch si è dimostrato 100% compatibile Arduino Uno.
Il display stesso ed il controllore sono identici a quelli nelle tue foto, ma il risultato è deludente.
Sapresti aiutarmi? il display LCD è la base del mio progetto
Autore
Ciao Andrea,
sei certo dell’indirizzamento corretto del display? Trovi tra i miei articoli uno sketch che mostra come interrogare le periferiche I2C e farti restituire il suo indirizzo.
In alternativa puoi chiedere al venditore o produttore del display.
Ciao Mauro, ho interrogato il bus i2c con lo sketch trovato nel tuo articolo, e a quanto pare è sempre 27
I2C Scanner
Scanning…
I2C device found at address 0x27 !
done
il display è marca qapass, provo a cerare i datasheet ma non sò precisamente quali valori andare a leggere
Autore
Ciao Andrea,
purtroppo non conosco il display che stai utilizzando.
Se l’indirizzo è 0x27 impostalo nello sketch di scrittura.
Potrebbe differire il modo in cui la libreria controlla il display e potresti aver bisogno di un a libreria scritta per il tuo display.
Ottima guida,
Sono finalmente riuscito a far visualizzare sul mio display dei caratteri!
Ma ho un problema..
Mi visualizza solo il primo carattere , sia nella prima riga che nella seconda.
Se per esempio mettessi come prima riga “Prova Riga 1”
e nella seconda inserissi “Riga 2”
Il display mi visualizza solo “P” ed “R”…
Autore
Ciao Tommaso,
non sei il primo che segnala un problema simile, leggi nei commenti.
A tutti ho suggerito di cercare le specifiche del vostro display e verificare il driver, l’indirizzo e la libreria consigliata dal produttore del display.
Deve esserci in commercio una partita di display che usano una libreria differente da quella che ho utilizzato io.
Stesso problema. Provato anche con altre librerie, ma nulla!
Se trovate soluzione, per piacere, postate!!!!
Grazie
Autore
Ciao Ruby,
lascio la tua richiesta on-line in modo che altri possano aiutarti.
Scusi, una domanda forse banale.
Come mai il protocollo I2C utilizza due pin analogici per la comunicazione?
Grazie,
Roberto
Autore
Ciao Roberto,
la risposta è nelle caratteristiche dell’arduino/genuino che trovi sul sito ufficiale, alcuni pin hanno doppia funzione.
Salve Alfieri ,
se posso vorrei farLe una domanda ,
La seguo ormai da anni e spero di risolvere il mio problema ,
Ho il suo stesso lcd (che ho comprato dopo aver letto e seguito alla lettera il sui articolo) e tutto funzionava alla perfezione , Ma !!!! ho cambiato computer , prima lavoravo con un iMAC UN PO DATATO 2005 circa , si è rotto e l Ho sostituito con un iMac nuovo 2016 , installo le stesse librerie , stesso comando , stesso arduino con lcd mi carica lo sketch dopo avermelo controllato , tutto bene fino a qui, guardo il display e mi appare solo la prima lettera di ogni riga , allora penso che il display sia guasto e provo con l esempio seriale , scrivo un po di lettere a casaccio sulla prima riga e tutto funziona , carico lo sketch di esempio della libreria co Hello Word e mi scrive solo la prima lettera di ogni riga , non so proprio cosa fare ……..
spero tanto in suo consiglio !
Grazie,
Lombardi
Autore
Ciao Gabriele,
il comportamento che scrivi è simile a quello già segnalato da numerosi utenti, ma nel tuo caso mi hai aggiunto dei particolari interessanti che in precedenza tutti avevano omesso limitandosi a scrivere l’effetto e non i test che hai fatto tu.
Posso ipotizzare che dipenda dalla versione dell’IDE, mi indichi che versione utilizzavi sul MAC del 2005 e che versione utilizzi oggi?
Grazie 1000 per la velocità con cui mi hai risposto ,
presto detto la versione del vecchio mac non la conosco più perché non è più possibile accenderlo la versione invece del muovo è la 1.6.7 , non la ho aggiornata alla nuova perché purtroppo la Apple con la nuova versione di el capitan non permette.piu di vedere le porte seiriali ma con una modifica al BIOS del mac e con la versione prima di quella recente sono riuscito a far funzionare tutto o per lo meno la maggioranza delle cose.
di nuovo grazie 1000 }}
Autore
Ciao Gabriele,
in un commento di questa mattina, Alessandro, ha suggerito una libreria che ha testato con l’IDE 1.6.7 e funziona con questo display e driver di controllo.
perfetto !!! con la libreria di Alessandro sono riuscito a farlo funzionare , grazie 1000 ,e se posso ricambiare il favore dovete solo chiederlo
Autore
Grazie Gabriele,
ogni contributo è prezioso come hai avuto modo di sperimentare da solo.
Se ti imbatti in qualche altro problema irrisolto nel blog, e vuoi contribuire, fallo pure.
Se hai risolto delle problematiche in cui ti sei imbattuto e vuoi scriverle fallo.
ciao mauro,
complimenti e grazie, per le molte cose che ci insegni!
vorrei chiederti aiuto peri l funzionamento del display 16×2 (HD44780) che sto cercando di pilotare tramite un adattatore i2c, per risparmiare pin.
il display, se collegato in maniera tradizionale (utilizando tutti i pin, senza l’adattatore), funziona perfettamente.
se lo collego con l’adattatore, invece, ho dei problemi in scrittura. in pratica, mi scrive solo il primo carattere di ogni linea. se mi posiziono manualmente ad un determinato carattere, ad es. gli dico di scrivere “ciao” a partire dalla 4a casella, mi scrive solo la “c”.
se utilizzo il tuo sketch, (che dovrebbe far scrivere “Test Display I2C” e “Versione 1.0”), mi trovo solo “T” alla prima linea e “V” alla seconda.
l’adattatore è collegato direi correttamente (5v e gnd ai rispettivi di arduino uno, e scl e sda ai rispettivi di arduino, quelli dopo i pin digitali).
hai qualche suggerimento da darmi?
grazie e ciao,
ale
Autore
Ciao Alessandro,
non sei il primo che scrive con questo problema se leggi nei commenti.
Avevo ipotizzato che il problema fosse la libreria ma sembra che anche cambiandola la cosa non varia.
Sto cercando di comprendere, con l’aiuto di tutti, cosa possa essere.
Se hai maggiori dettagli sul comportamento scrivimeli.
ok, al momento non saprei cosa aggiungere, ma se hai delle prove che potrei eseguire, sarei felice di testarle, poi ti riporto i risultati.
grazie ancora,
ciao,
ale
Autore
Ciao Alessandro,
grazie per la disponibilità.
Per adesso mi basta qualche info sul tipo di computer ( SO, modello, ecc ) che usi e la versione dell’IDE e di Java.
non ho specificato una cosa: alla riga 4 ho usato il tuo stesso indirizzo (LiquidCrystal_I2C lcd(0x27,16,2), perchè devo ammettere che no ho capito come si calcola! forse il problema risiede in quella riga di codice?
Autore
Ciao Alessandro,
trovi nel blog alcuni articoli in cui è spiegato, più che calcolato va ricavato da una interrogazione ed esiste uno sketch per farlo.
Escludo che si tratti del motivo per cui il display ti funziona parzialmente in quanto se l’indirizzo è sbagliato non dovresti veder alcun carattere.
eccomi di nuovo qua, ho fatto mille prove, ed ora funziona perfettamente!
era solo un problema di libreria, ne ho provate diverse ed alla fine quella che funziona l’ho scaricata da qui:
https://github.com/marcoschwartz/LiquidCrystal_I2C
ecco le info richieste, non si sa mai che altri abbiamo lo steso problema, potrebbero servire a risolvere:
arduino uno originale
windows 7 pro 64 bit
ide 1.6.7
Autore
Grazie mille Alessandro,
il tuo commento sarà di sicuro di aiuto a tantissimi che segnalano lo stesso inconveniente.
In molti mi avevano scritto di aver provato altre librerie senza successo, probabilmente non hanno saputo cercare la libreria corretta come hai fatto tu.
Anche io ho lo stesso problema. E nemmeno quella libreria risolve. Scrive solo la prima lettera della riga. Con l’applicativo che prende i caratteri dalla seriale funziona normalmente. Forse un problema di timing?
Autore
Ciao Aldo,
il tuo sembra un problema di timing, prova a modificare la libreria incrementandolo.
Grazie Alessandro !
Avevo anche io lo stesso problema e cioè il display printava solo la prima lettera.
Ho provato 200 librerie e finalmente ho provato con la tua e ho risolto !
Grazie ancora !! 🙂
Autore
Grazie anche a te Demi per aver dato un feedback ad Alessandro.
Alessandro e Mauro vi porgo i miei onori, mi stavo macinando gli ultimi ormoni rimasti…grazie grazie grazie
buongiorno, vi seguo da un po e mi domandavo in quanto uso un display I2C 20×4 come mai non vada nonostante lo sketch sia senza errori ho fatto come da tutorial premetto
Autore
Ciao Sergio,
in primo luogo avrai modificato i parametri relativi alle linee e colonne, essendo questo sketch scritto per un display 20×4.
In secondo luogo dovresti specificare meglio quale comportamento questo display ti manifesta, scrivere “come mai non vada” non mi permette di darti aiuto.
Ti consiglio, inoltre, di leggere anche i commenti a questo articolo alla ricerca di soluzioni già scritte da altri utenti.
Ciao, io ho questo problema, non riesco a risolvero, grazie
Temp__Analog:4: error: invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
^
In file included from C:\Users\Amministratore\Desktop\Temp__Analog\Temp__Analog.ino:2:0:
C:\Users\Amministratore\Documents\Arduino\libraries\NewliquidCrystal/LiquidCrystal_I2C.h:53:4: error: initializing argument 3 of ‘LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)’ [-fpermissive]
LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
^
C:\Users\Amministratore\Documents\Arduino\libraries\NewliquidCrystal/LiquidCrystal_I2C.h: In function ‘void setup()’:
C:\Users\Amministratore\Documents\Arduino\libraries\NewliquidCrystal/LiquidCrystal_I2C.h:154:9: error: ‘int LiquidCrystal_I2C::init()’ is private
int init();
^
Temp__Analog:8: error: within this context
lcd.init(); // initialize the lcd
^
exit status 1
invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]
Autore
Ciao Ismaele,
stai usando il mio sketch con una libreria scaricata da internet?
Dall’errore sembra di si e l’errore mi fa ipotizzare che la libreria non sia compatibile con l’esempio.
Ciao Mauro,
anch’io ho avuto un sacco di problemi con il display 2×16 che mi mostrava solo il primo carattere inviato con la funzione print in entrambe le righe. Ti stò scrivendo per dirti che con la libreria di Alessandro ho risolto. Il mio IDE è 1.6.6.
Magari è difficile capire come eliminare le librerie che non funzionano per far usare allo sketch quella buona, tu potresti spiegarlo sicuramente meglio di me.
Un grande grazie per quello che fai, vengo spesso a togliermi dei dubbi sul tuo sito. Ci sono molti siti che parlano di Arduino ma tu sei molto chiaro.
Greg
Autore
Ciao Greg,
la casistica che evidenzi è effettivamente problematica, tutti ti spiegano come aggiungere le librerie e nessuno come rimuoverle, magari strutturo un tutorial nelle prossime settimane.
Sappi che sto lavorando ad una libraria LiquidCristal_i2c derivata da Marco S. e già condivisa sul mio git, ho scritto un articolo la scorsa settimana dedicato alla libreria. Ogni feedback è apprezzato.
ciao scusami io sto facendo un progetto con un display come quello illustrato da te pero al momento di provare e caricare lo sketch arduino è come se si spegnesse , togliendo invece il cavo dal pin dei 5v del display si ri accende come puo essere , dove sbaglio? premetto che l’integrale montato nel convertitore dei 4 pin del display e un pcf8574T , ho sbagliato a comprare il convertitore in oltre il display non si accende proprio
Autore
Ciao Damiano,
non comprendo cosa accade, prova a spiegarmi un problema alla volta.
mi spiego meglio 🙂
sto facendo un progetto per gli esami di stato ove pero mi serve questo schermo LCD ; il problema è che lo sketch lo verifica senza problemi al momento della carica arduino è come se smettesse di funzionare non si accende piu (alimentato dal computer ) , per esempio anche ora ho provato a fare quest esercizio con il mio LCD 16×2 ma il risultato è sempre lo stesso nel momento in cui sfiorno anche minimamente il pin dei 5v di arduino con il filo proveniente dal convertitore dello schermo LCD arduino cessa di funzionare ; è forse dovuto al fatto che non ce la faccia ad alimentarlo ?
Autore
Ciao Damiano,
dovresti indagare sui collegamenti e sull’assorbimento del display, se riesci è meglio da specifica del produttore che con un tester.
Il comportamento è effettivamente strano, sembra un malfunzionamento del display.
se mi lasci la tua e-mail ti scrivo, cosi puoi darmi sempre se per te va bene, un aiutino sulla scelta di uno schermo LCD 16X2 come quello nell esercizio magari , visto che il regolamento dice che non si possono fare riferimenti su produttori e cose di questo genere
Autore
Ciao Damiano,
le email sono riservate a progetti su commissione.
Se desideri commissionarmi un progetto puoi seguire le istruzioni presenti nella pagina “sostienimi” e trovi anche l’indirizzo email a cui inviare la richiesta di preventivo.
Buon giorno, ho comprato questo schermo I2C http://www……it/……./4356-bc2004aibnheh.html , ho scaricato la libreria , arriva l alimentazione ma non riesco a comunicare con il display mi sa dare un aiuto? il questo display è gia integrato il collegamento I2C ma vedo in ogni immagine che ci vuole l’integrato sul retro. grazie ancora
Autore
Ciao Sergio,
innanzitutto ti chiedo di rispettare le regole del blog, poche e semplici che trovi in fondo ad ogni articolo e di non inserire link a siti generalisti,e-commerce o aste nei commenti.
Se il display che possiedi è differente da quello mostrato la libreria potrebbe essere differente ed è meglio che tu chieda al produttore/fornitore le specifiche ed una libreria adatta al controllo con Arduino, la avrà già pronta.
ho letto con interesse anche tutti i commenti… Non ho capito bene una cosa io un lcd 16×02 con basetta e PCF8574AT … le librerie vanno bene? sono gli sketch da cambiare?
grazie
Filippo
Autore
Ciao Filippo,
la libreria consigliata da Alessandro nei commenti sembra la migliore fino ad oggi.
grazie Mauro… appena le provo, se ti fa piacere, scrivo il risultato. ciao
Buona sera mi chiamo Nicola. (nuovo in tutti sensi)
Ho seguito tutte le istruzioni, caricata la libreria ma sul display mi compare la prima lettera di ogni riga..
per meglio capirci..
la T di test display I2C e
la V di Versione 1.0
Ringrazio anticipatamente..
Autore
Ciao Nicola,
nei commenti trovi la risposta.
salve io ho tentato di fare come e scritto ma non da nessun risultato ho installato la libreria direttamente da arduino infatti non mi da alcun tipo di errore ma ho notato che il modulo sul mio è pcf8574at gentilmente potresti dirmi come risolvere
Autore
Ciao Alvaro,
hai caricato la libreria di Marco S. ?
Quella funziona ma non penso possa essere caricata dal gestore librerie, dovrai scaricarla dal Git e caricarla come file .zip
Se anche quella di Marco non funziona puoi provare la mia, ho scritto un post 2/3 settimane fa su cosa cambia rispetto a quella di Marco.
Ciao mauro, volevo ringraziare per l’ottima spiegazione e per la disponibilità.. Funziona tutto ma siccome non conosco la sintassi alla perfezione volevo chiederti se fosse possibile modificare l’intensità della retroilluminazione tramite comando dall’ IDE.
Autore
Ciao Luca,
che io sappia la libreria non lo prevede, ma puoi approfondire nel codice per comprendere se puoi modificartela per farglielo eseguire, sempre che l’espander lo supporti.
salve, ho cominciato da poco ad interessarmi ad arduino, ho un problema con lcd, ho collegato tutto come da spiegazione,tutto sembra funzionare correttamente apparte che mi fa vedere solo la prima lettera della parola,
mi compare solo la lettera T neela prima linea e nella seconda solo la lettera v, dopo diversi tentativi, sono arrivato a capire che se intendo scrivere una parola devo compilare il codice diversamente
per esempio,
lcd.print(“Test Display I2C”); mi riporta sull lcd solo la prima lettera ovvero T
compilando il codice diversamente tipo
lcd.print(“T”);lcd.print(“e”);lcd.print(“s”);lcd.print(“t”);` mi comparira sul lcd la scritta Test
non riesco a capire perche non mi scrive le parole intere, dove sbaglio?
grazie tanto per l aiuto che ci dai!!!!
Autore
Ciao Corrado,
leggi nei commenti troverai il problema risolto da altri utenti cambiando la libreria.
Ciao Mauro,
innanzitutto grazie per il tuo tutorial! Vengo da totalmente altri studi ma sono riuscito a fare accendere il mio LCD! Olé!!
Lascio qui, se permetti, un promemoria per tutti quelli che trovano errori lungo la loro strada.. E’ frutto di tutti i miei errori e peregrinazioni 😀
Correggimi pure se sbaglio!
Ho un LCD 1602 I2C, due righe orizzontali da 16 caratteri per intenderci. Come board Arduino UNO.
Ogni pannello ha un suo indirizzo I2C che viene usato per ricevere e inviare i messaggi.
Ad esempio nel mio pannello, nonostante fosse dichiarato l’indirizzo 0x27 ho l’indirizzo 0x3F.
E’ bastato cambiare nell’IDE il valore e ho risolto il problema.
Provate a fare un I2C Scanner che evidenzi il vostro reale indirizzo del pannellino.
Nota: scaricate le librerie, come già detto da Mauro, da questo sito: https://github.com/marcoschwartz/LiquidCrystal_I2C
Funzionano.
Grazie ancora!
Autore
Ciao Enrico,
innanzitutto io trovo giusto sostenere il lavoro del team arduino.cc e non approvo prodotti clonati o, peggio, copiati.
In secondo luogo, lascio on-line il tuo commento come premio per aver voluto condividere la tua esperienza, ti faccio solo notare che nel blog ci sono altri articoli in cui ho scritto come risolvere quello che hai descritto e che la libreria di Marco S. è citat come soluzione al problema ed è divenuta ufficiale nell’IDE arduino da qualche settimana.
Chiedo scusa Mauro se posso aver offeso qualcuno dicendo che ho una board cinese. Mi dispiace. Non sono d’accordo con le politiche di vendita che ho visto. Rispetto le opinioni di tutti, ed il lavoro di tutti, per carità. Però se posso permettermi… Arduino Uno R3 Starter kit ufficiale a 100 euro…
Bho. Ripeto, mi dispiace, non sapevo ci fossero queste “caste hindù”. Se ritieni puoi anche cancellare questi commenti. Saluti.
Autore
Ciao Enrico,
non cancello i commenti di nessuno a meno che non siano offensivi, in senso più stretto di quanto hai scritto.
Le politiche sui prezzi entrano in un discorso più ampio della sola vendita e distribuzione, ogni kit prodotto serve a sostenere il lavoro di ricerca e sviluppo del gruppo, lavoro eseguita da molti programmatori nel mondo che ti lasciano il sw gratuitamente: IDE, librerie, esempi, ecc.. oltre alla ricerca di nuove schede e nuovi prodotti.
Se non ci fossero non avremmo avuto arduino e tutto quello che gravita intorno. Diciamo, semplicemente, che acquistando prodotti originali io sostengo la comunità e la ricerca di nuovi prodotti e nuovi sviluppi.
Purtroppo alcuni produttori vendono copie a 2€ ma non versano un centesimo alla comunità, prendono solo il sapere.
Se non sei daccordo a sostenere il gruppo arduino.cc acquistando un prodotto puoi contribuire dalla pagina download integrando con una donazione per il software, visto che lo usi per i tuoi progetti. La comunità ti ringrazierà e continuerà a lavorare per te.
buongiorno grazie mille per il tutorial pero ho un problema: nel display vedo solo i caratteri della prima colonna, nelle altre; pur dovendo esserci, non vedo niente… cosa potrebbe esserci di sbagliato?
Autore
Ciao Alberto,
nei commenti ed in altri articoli trovi la soluzione al problema.
Gentile Mauro,
intanto complimenti per il lavoro che svolgi, il tuo sito è un irrinunciabile punto di riferimento.
Avrei bisogno di un chiarimento.
Ho un applicazione che viene eseguita su un arduino uno che visualizza degli output su un display lcd con un LCM1602, connesso quindi ai pin SDA e SCL. L’applicazione funziona e i dati vengono correttamente visualizzati. Ho deciso di aggiungere un arduino nano che svolge altre funzioni e che è collegato al primo sempre su SDA e SCL. I due comunicano correttamente con la libreria wired. Il problema mi si presenta nel momento un cui tolgo alimentazione al secondo arduino. Senza alimentare il secondo arduino anche il primo smette di funzionare, non solo il display si blocca senza ma proprio non viene piu elaborato nulla. Il problema si presenta anche se inizio alimentando solo il primo arduino. Se scollego i pin del secondo arduino dal primo tutto riprende correttamente a funzionare. Quale potrebbe essere il motivo di qesto comportamento? E’ riolvibile? Grazie in anticipo per l’attenzione.
Autore
Ciao Tommaso,
se colleghi due genuino ( o arduino ) tra loro mediante i2c, con alimentazioni indipendenti, non devi connettere il +5v ma solo SDA,SCL e Gnd
Trovi tutto descritto in alcuni miei articoli sulla comunicazione i2c.
Verifica anche che l’arduino a cui è connesso il display sia master e controlli il display da solo.
Ciao Mauro, grazie per la risposta.
Forse non mi sono riuscito a spiegarmi bene. I due arduino sono alimentati indipendentemente e tra loro condividono correttamente solo GND, SDA e SCL. Fintanto che entambi sono alimentati il sistema funziona correttamente, il master richiede i dati allo slave, li elabora e li visualizza sul display correttamente. Mi sono posto il problema di un eventuale rottura dello slave o di una sua perdita di alimentazione. Ho quindi provato a toglire alimentazione al solo slave e qui mi si presenta il problema sul master che smette immediatamente di funzionare pur essendo egli ancora alimentato. Rimane incantato, il display rimane incantato sull’ultimo messaggio visualizzato prima della disconnessione dello slave. Se resetto il master con lo slave ancora senza alimentazione il master non lavora. Ridando alimentazione allo slave e resettando il master tutto riprende a funzionare correttamente. Sembra quindi che se in una connessione con I2C tra piu arduni uno qualunque degli slave perda alimentazione e sia ancora collegato tutto il sistema si blocchi.
Ho anche provato, giusto per cercare di capirci qualcosa, a mantenere i collegamenti fisici su GND, SDA e SCL e caircare su entrambi gli arduini lo sketch blink (quindi senza farli comunicare tra loro). Se entrambi sono alimentati i led di entrambi lampeggiano se tolgo alimentazione ad uno dei due l’altro spette di lampeggiare.
Autore
Ciao Tommaso,
non ho mai verificato una situazione simile.
Se non avessi scritto del test con il Blink ti avrei suggerito di verificare lo sketch in quanto la mia ipotesi era che lo sketch si bloccasse in attesa di qualche collegamento. Ma con il Blink tutto cambia, non essendoci istanziata alcuna comunicazione I2C.
Hai verificato nel forum arduino.cc se qualche altro appassionato ha già riscontrato problemi simili?
Do per scontato che tu stia usando Genuino/Arduino originali e l’IDE 1.6.8, giusto?
Ciao sono paolo. Mauro,complimenti per il blog.volevo un imformazione, dove posso scaricare la libreria I2C per schermo lcd 20×4?
grazie
Autore
Ciao Paolo,
trovi la versione di Marco direttamente nell’IDE arduino dalla 1.6.7 in poi e trovi la mia su GitHub ( https://github.com/Mauroalfieri/LiquidCrystal_I2C ) che è derivata da quella di Marco S. ed adatta a display connessi invertendo i pin dati e controllo sull’expander.
Verifica prima quella di Marco S. e se non funziona provi con la mia.
Ciao Mauro
non posso che unirmi al coro di complimenti che giustamente ti giungono e ringraziarti per l’opportunità che ci offri per esplorare questo mondo meraviglioso.
Vengo al quesito ho collegato e provato lo sketch su un display nuovo ma compaiono solo le prime due lettere per ogni riga, potrebbe essere il display difettoso ho devo verificare qualche altra cosa?
grazie ciao
Salvo
Autore
Ciao Salvatore,
nella linga lista di risposte e commenti trovi la soluzione, devi usare una libreria aggiornata che risolve il problema.
Ciao Mauro,
avrei una domanda.
Premetto che il Display funziona regolarmente dal primo minuto.
La domanda è la seguente, come posso controllare la retroilluminazione del display da un pulsante specifico o alla pressione di alcuni pulsanti che voglio inserire in un progetto??
Sulla scheda I2C ho il ponte che attiva la funzione di retroilluminazione se non la dichiaro nel programma con lcd.blacklight().
Non vorrei però aggiungere un interruttore che mi chiude il ponte sulla scheda I2C.
Grazie
Ciao
Autore
Ciao Fabio,
non mi è chiaro se il tuo display sia in grado di controllare la retroilluminazione da I2C medinate il PCF8574T oppure e devi controllarla dal ponticello e basta.
Ciao Mauro,
sul progetto ho scritto questa riga: lcd.backlight(); //Attivazione retroilluminazione Display
Se il ponticello lo tolgo e lascio lcd.blacklight() attivo il display rimane spento.
Se invece non invio il parametro il Display rimane spento sia con ponticello che senza.
Quindi ipotizzo che si possa controllare in qualche modo.
Grazie
Fabio
Autore
Ciao Fabio,
devi consultare il manuale o schema del produttore del display per verificare se ha connesso la retroilluminazione a qualche pin del PCF8574T e quale, poi devi modificare la libraria in modo che sfrutti quel pin per attivare la retroilluminazione.
ciao mauro…ho provato lo sketch ma non va…mi dà questo errore:
Arduino:1.6.9 (Windows 7), Scheda:”Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”
prova_lcd:4: error: invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
^
In file included from C:\Users\Linus\Desktop\prova_lcd\prova_lcd.ino:2:0:
C:\Users\Linus\Documents\Arduino\libraries\LiquidCrystalI2C/LiquidCrystal_I2C.h:53:4: error: initializing argument 3 of ‘LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)’ [-fpermissive]
LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
^
C:\Users\Linus\Documents\Arduino\libraries\LiquidCrystalI2C/LiquidCrystal_I2C.h: In function ‘void setup()’:
C:\Users\Linus\Documents\Arduino\libraries\LiquidCrystalI2C/LiquidCrystal_I2C.h:154:9: error: ‘int LiquidCrystal_I2C::init()’ is private
int init();
^
prova_lcd:8: error: within this context
lcd.init(); // initialize the lcd
^
exit status 1
invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]
Questo report potrebbe essere più ricco di informazioni con l’opzione
“Mostra un output dettagliato durante la compilazione”
abilitata in File -> Impostazioni
non capisco…ho scaricato la libreria, ho collegato la mega2560 sda e scl gnd e 5volt
Autore
Ciao Lino,
sembra che la libreria non sia corretta; l’hai scaricata attraverso il gestore librerie dell’IDE?
l’ho scaricata dal link che hai postato tu sopra
Autore
Ciao Lino,
ti consiglio di utilizzare la gestione librerie dell’IDE quando la libreria esiste ed è gestita.
Le librerie su altri siti, incluso il mio, possono non essere aggiornate.
caro mauro qui si impazzisce….
librerie tutto ok sono aggiornate…
ho provato i due lcd sunfounder 2X16 e 4X16 colore azzurro
con gli sketch scaricati dalla sunfounder…(kit per arduino)
collegamenti tradizionali con tutti i pin dei due lcd(non uso interfaccia PCF8574T)
nessun conflitto con mega2560
si illumina in entrambi i casi ma scritte nessuna….
a sto punto penso che ho avuto due lcd difettati….
che sfiga però?
Autore
Ciao Lino,
due è un po troppo come numero per parlare di sfiga.
E’ possibile che le librerie rilasciate dalla ditta costruttrice non siano aggiornate e valide per la versione dell’IDE che stai utilizzando, io stesso mi sono dovuto modificare una libreria I2C ( PCF8574T ) per un mio progetto in quanto l’LCD era collegato in modo differente da come previsto nelle librerie presenti nell’IDE.
Verifica che il produttore ti dia lo schema dei collegamenti tra PCF8574T ed LCD, poi confrontali con quelli definiti nella libreria, potresti doverli sostituire adattando la libreria.
scusami mauro…..ho fatto un pò di confusione…
avevo un’altra libreria per lcd installata che mi va in conflitto con la tua…
ho provato ora…lo skecth lo carica ma devo togliere una libreria….come faccio?
ti allego l’errore
Più di una libreria trovata per “LiquidCrystal_I2C.h”
Usata: C:\Users\Linus\Documents\Arduino\libraries\LiquidCrystal_I2C1602V1
Non usata: C:\Users\Linus\Documents\Arduino\libraries\LiquidCrystalI2C
Non usata: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal_I2C1602V1
quando carico lo sketch mi lampeggia lcd ma non leggo niente
scusami ancora……non ti faccio perdere tempo…..
ho disinstallato tutto e reinstallato arduino…
ora ho solo la tua libreria….
carico lo sketch lcd lampeggia una volta ma non leggo niente…
caro mauro ho letto il tuo consiglio sulle librerie lcd 16×2 e 16×4…..ho mandato delle mail alle ditte fornitrici ma credo che perderò un bel pò di tempoperchè penso che i fornitori ti risolvono problemi di hardware ma è difficile che ti risolvano problemi a livello software….(è una mia opinione, posso sbagliarmi)!!!!
visto che sto iniziando ora a capire qualcosa di wiring e di cambiare una libreria credo che sia un pò presto…
puoi consigliarmi tu un display lcd 16×4 funzionante con IDE 1.6.9 con arduino mega2560 e relativa libreria I2C ( PCF8574T ).
puoi allegarmi un link dopo poterlo acquistare……solo se già testato!!
ti ringrazio e scusami se sono pedante.
Autore
Ciao Lino,
negli articoli in cui recensisco un componente di solito trovi anche il link al fornitore del prodotto.
Solitamente io acquisto da robotics-3d.com puoi chiedere loro uno dei display I2C testati da Mauro.
grazie mauro
Salve,
sono alle prime armi ed è la prima volta che affronto questa schedina con PCF8574T per un lcd LCD1602A.
Grazie 1000!
Con il tuo articolo è stato facile ed è andato tutto liscio, funzionando al primo colpo (dopo aver armeggiato col contrasto come qualcun altro aveva segnalato).
Ora però ho un po’ di domande 🙂
1. In un post precedente dicevi che le resistenze di pullup sono già presenti nella scheda. In effetti non sono riuscito a trovare info del produttore della scheda x esserne sicuro. C’è un modo per verificarlo?
2. Se sul bus I2C sono presenti 2 o più dispositivi ognuno con le sue resistenze di p-u se ho capito bene succede che la resistenza totale diminuisce (perchè sono in parallelo); quindi potenzialmente cambia il segnale sul bus. In al caso biogna allora inserire altre resistenze di pu esterne sul bus?
3. Usando scheda+display non si dovrebbe tenere conto dell’assorbimento di corrente rispetto a quella che arduino eroga al massimo in modo da non danneggiare arduino?
4. Il led di illuminazione posteriore del display è abilitato dalla presenza di un jumper laterale. Non avendo la scheda tecnica, secondo la tua esperienza sulla schede similari è presente già una resistenza di limitazione o se ne deve inserire una (o magari un trimmer)?
Grazie ancora per la pazienza e per le eventuali risposte.
Autore
Ciao Van,
cerco di risponderti per punti:
1. nella mia versione erano ben visibili, se il tuo modello è differente puoi consultare lo schema rilasciato dal produttore;
2. sarebbe corretto non mettere più di un dispositivo con resistenze di pull-up su SDA ed SCL per evitare il problema, io sceglierei un componente differente;
3. considera che sul bus I2C non ci sono assorbimenti elevati, di solito l’assorbimento in corrente è legato alla sola alimentazione che puoi fornire anche esternamente ad arduino o genuino;
4. la scheda tecnica è fondamentale per comprendere cosa fare, io do più importanza alla documentazione che al prezzo quando scelgo un componente, senza mi è impossibile dirti cosa fare perchè ogni costruttore implementa quello che desidera, i miei display ad esempio hanno la retroilluminazione controllabile da I2C.
Mi rendo conto che il principio di tutto e’ effettivamente la mancanza di info dal produttore… Tuttavia pensavo che qualcosina si potesse in qualche modo sapere con un’ispezione visiva o qualche semplice misurazione. Per esempio ho ‘scoperto’ che sul LCD uno dei pin di alimentazione della retroilluminazione ha una pista che porta a un resistore che ha tutta l’aria di essere quello che cercavo di limitazione.
Comunque sia per ora grazie, terro’ a mente i tuoi preziosi consigli per i futuri acquisti 🙂
E alla prossima!
Autore
Ciao Van,
se riesci a seguire la pista che fornisce la retroilluminazione va benissimo.
Buongiorno e grazie mille per l’articolo.
Ho solo un dubbio. Di default i pin del chip sono tutti aperti. Diciamo che voglio usare due monitor nello stesso progetto. Posso quindi cambiare l’indirizzo del secondo monitor, ad esempio cortocicuitando i contatti del pin A0 e passare dalla memoria 0x27 a 0x26? (i pin non sono visibili nella foto ma i tre pin sono sotto il potenziometro).
In tal caso sarebbe sufficente una goccia di stagno sui contatti del pin?
Grazie in anticipo!
Autore
Ciao Lorenzo,
nel mio modello non è possibile configurare l’indirizzo, se nel tuo è possibile la soluzione è assegnare a due display due indirizzi differenti.
ciao mauro….sempre io che ti stresso……a proposito hai passato delle belle vacanze? spero per te di si!!!
domanda: è possibile collegare in parallelo due lcd 20X4 dalle stesse uscite SDA e SCL della mega in modo tale da vedere sul primo l’ora, la data ed altre info e sul secondo scrivere altre informazioni……
ho provato a metterli insieme con la bred bord ma ovviamente in serie e leggo le stesse cose sia su uno che sull’altro…..
che ne pensi? cerco la luna nel pozzo?
capisco bene che le informazioni che escono da arduino per andare sul’LCD escono solo da due porte la SDA e la SLC….però….oggi tutto è possibile!!!!
ciao mauro
Autore
Ciao Lino,
si è possibile se i due LCD hanno due indirizzi differenti e se crei due istanze, sulla prima comunichi con il primo display e sulla seconda con il secondo.
Se riesco a reperire due o tre display I2C con indirizzo differente cerco di scrivere un tutorial per questa singolare necessità 🙂
Ho capito bene????
da due lcd 20 x 4 uguali come ce li ho io….ne posso fare in pratica uno 20 x 8 cambiando le istanze…
mauro… ma cosa sono le istanze in un display LCD?
Autore
Ciao Lino,
è un po complesso spiegarti cosa sia una istanza, per comprenderlo bene puoi leggere i miei articoli sul controllo di più servo con arduino.
Compreso il concetto puoi applicarlo facilmente ai tuoi LCD
Scusami mauro ma è giusto che tu nn perda tempo……
ho dato uno sguardo nei forum arduino e ho risolto….riporto la soluzione per chi dovesse possedere due o più display lcd con interfaccia PCF8574T e libreria I2C….notate subito che il dispositivo PCF8574T ha sotto il potenziometro del contrasto tre piazzole A0 A1 A2 ognuna formata da due quadratini
per il primo lcd, cortocircuitare la piazzola A0 con una goccia di stagno (unire i due quadratini);
nello sketch riportare
LiquidCrystal_I2C lcd1(0x26,20,4); per il primo lcd… (A0 unito)
LiquidCrystal_I2C lcd2(0x27,20,4); per il secondo lcd….(A0, A1, A2 normali)
continuare a scrivere lo sketch riferendosi sempre a due lcd separati:
[[ codice rimosso in automatico ]]
ho voluto scrivere tutto come l’ho fatto io e come l’ho provato io…..
mauro porta tutte le modifiche che vuoi e casomai riscrivilo tu per chi ne avesse bisogno….
grazie ancora mauro….tanto ti ricontatto per qualche altro problema….
ciao
Autore
Ciao Lino,
purtroppo non è possibile incollare codice nei commenti, come hai letto in fondo ad ogni articolo nelle 2 semplici regole del blog.
Se ti va di condividere il tuo sapere puoi inviarmi una descrizione di quello che hai fatto, lo sketch, le foto e tutto il materiale digitale che desideri pubblicare via email.
Io, compatibilmente con gli articoli che ho già in programma cercherò di pubblicarlo. Ovviamente a tuo nome.
scusami mauro ma non volevo assolutamente trasgredire le regole del blog….
non volevo farti perdere tempo per la richiesta che ti avevo fatto in precedenza (doppio lcd in parallelo)…
avendo risolto tramite i forum di arduino volevo semplicemente avvisarti…..
scusami se ho sbagliato la forma….non era nelle mie intenzioni
Autore
Ciao Lino,
so che lo hai fatto con lo spirito di condividere ciò che hai realizzato.
Se ti va di scrivere un articolo in merito mi farebbe piacere poterlo pubblicare.
appena concludo quello che sto realizzando te lo mando….ho ancora bisogno di un pò perchè sto provando alcune parti dello skecth singolarmente e tra un pò cercherò di metterle assieme…..infatti a proposito di ciò ho una domanda:
quando visualizzo l’ora con i relativi secondi nel display grazie al modulo rtc, a causa di alcune righe nello sketch del tipo “delay(2000), ne ho più di una, osservo che i secondi non vengono visualizzati in tempo reale ma slittano solo nella visualizzazione però……mi devo accontentare o si può risolvere il problema?
Autore
Ciao Lino,
al posto dei delay usa il millis(), trovi degli articoli in cui descrivo come usarlo, è un po’ più complesso ma non ha gli effetti del delay sullo sketch.
grazie mauro…..sei sempre pronto e disponibile ad aiutarci!!!
gentilissimo sig. mauro tempo fa’ l’avevo contattato per un progetto che avrebbe aiutato i cuochi nelle cucine .
si trattava di un misuratore di sale nei bollitori della pasta.la mia idea era :
costruire tramite arduino,, due rele’,e due elettrovalvole. Un sistema che in base alla quantita’ di sale rilevato nell’acqua bollente arduino mi segnali se e’ poco o troppo aprendo rispettivamente la valvola di immissione di una salamoia oppure di acqua dolce.non dovrebbe servire un sensore in quanto l’acqua conduce meglio in presenza del sale e se al tutto si collegasse un potenziometro per regolare la giusta salinita’. naturalmente il valore giusto sarebbe preventivamente frutto di assaggi e dopo dovrebbe rimanere sempre invariato durante le cotture e aggiunte d’acqua dolce.
capisco che forse non mi sono spiegato bene ma non saprei farlo meglio io ho gia’ provato usando tre led,ma vorrei migliorarlo .LA RINGRAZIO VIVAMENTE.organizzeremouna cena per lei e la sua signora.
Autore
Ciao Giovanni,
mi fa piacere sapere che stai continuando con il progetto.
Il mio dubbio maggiore riguarda il tipo di sensore utilizzabile in quanto durante la misurazione della salinità hai un fenomeno di elettrolisi che, come sai, è un fenomeno di ossido-riduzione ossia un elemento si ossida e l’altro si riduce scaricando nell’acqua il prodotto della riduzione.
Sono tutte cose che io non vorrei mangiare 🙂
Il progetto posso seguirlo su commissione ma dovrai trovare tu un sistema di misurazione ( sensore ) che sia per uso alimentare e non soggetto a fenomeni chimici dannosi per la salute umana.
Buona sera sig. Mauro,
è da molto tempo che provo a collegare un display 16 x 2 I2c con chip con sigla pcf8574t con arduino uno, ma nonostante le numerose librerie trovare in rete e i vari screk non riesco a farlo funzionare. Mi potrebbe aiutare?
grazie mille
Marcello
Autore
Ciao Marcello,
possiedi lo schema dei collegamenti del PCF8574T al display? Questa info è fondamentale per comprendere come indirizzare i segnali di controllo.
Se non li possiedi dovrai ricavarteli dal componente o chiederli al fornitore del display.
Ciao Mauro…
sono arrivato a questo tuo progetto perché vorrei integrare un display al progetto (https://www.mauroalfieri.it/elettronica/centralina-irrigazione-arduino.html)…
però mi trovo difronte ad ostacolo sia il PCF8574T che rtc DS1307 utilizzano le uscite analogiche A4 e A5….
hai un idea su come posso risolvere ?
ti ringrazio anticipatamente…
Autore
Ciao Massimo,
l’importante è che usino indirizzi differenti.
Il protocollo I2C gestisce per indirizzi molte periferiche a patto che gli indirizzi siano univoci.
Ciao Mauro…
Credo di no aver capito…
quindi li posso collegare entrambi su A4 e A5 ?
e gli indirizzi ? non ho capito di quali indirizzi parli….
sicuramente ti ho fatto una domanda banale, ma perdonami….
se mi potessi fare un piccolo esempio ti sarei grato…
grazie
Massimiliano
ciao mauro complimenti per il lavoro che hai svolto ma ho un problema con il display si accende ma non fa praticmante nulla sto usando arduino mega 2560
Autore
Ciao Danilo,
il controller i2c è il PCF8574T ? Hai controllato l’indirizzo I2C ?
Ciao, io sto usando un PCF8574AT.
Ho copiato il tuo programma e me lo da corretto alla verifica ma non succede nulla dopo la compilazione.
Lo schermo resta spento e non succede nulla. Sto usando l’arduino uno che ha le porte SDA e SCL predefinite vicino al tasto di reset. Cosa devo fare ?
Autore
Ciao Alessio,
sei certo dell’indirizzo impostato nello sketch e configurato sul PCF8574AT?
inoltre controlla i collegamenti al display che siano compatibili con i pin controllati dalla libreria.
Ciao,
sto cercando di usare un display LCD con chip tipo PCF8574AT utilizzando la libreria I2C linkata sul tuo sito, ma ricevo due errori in compilazione (Arduino Mega):
—————————-
LCD_16x2_Test.ino:4:32: error: invalid conversion from ‘int’ to ‘t_backlighPol’ [-fpermissive]
In file included from LCD_16x2_Test.ino:2:0:
/home/rodolfo/sketchbook/libraries/LiquidCrystalI2C/LiquidCrystal_I2C.h:53:4: note: initializing argument 3 of ‘LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)’
LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
^
/home/rodolfo/sketchbook/libraries/LiquidCrystalI2C/LiquidCrystal_I2C.h: In function ‘void setup()’:
/home/rodolfo/sketchbook/libraries/LiquidCrystalI2C/LiquidCrystal_I2C.h:154:9: error: ‘int LiquidCrystal_I2C::init()’ is private
int init();
^
LCD_16x2_Test.ino:8:12: error: within this context
———————————
Mi sai aiutare?
Grazie
Rodolfo
Autore
Ciao Rodolfo, usa la libreria ufficiale che scarichi da Gestione Librerie dell’IDE.
non ho capito bene la tabella ho un problema il mio display si accende solo la prima fila e non scrive niente ho aggiunto le librerie pero non sono sicuro se ho inizializzato bene
Autore
Ciao Kevin,
la tabella ti indica i possibili indirizzi che potrebbe avere il tuo display.
Se vedi la sola prima line potrebbe essere un problema di indirizzo o collegamento errato
Arduino:1.8.1 (Windows 8.1), Scheda:”Arduino/Genuino Uno”
C:\Users\davide\Documents\Arduino\libraries\LiquidCrystalnew\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Uno.
Questo report potrebbe essere più ricco di informazioni abilitando l’opzione
“Mostra un output dettagliato durante la compilazione”
in “File -> Impostazioni”
ho continuamente questo messaggio in fase di compilazione
Autore
Ciao Davide,
dopo l’include vedi la libreria? altrimenti l’errore è quello, devi specificare che libreria desideri includere.
Te lo chiedo perché nei commenti viene rimosso il testo dopo l’include.
Il secondo dubbio mi viene sulla libreria, quella che vedo nel tuo errore non la conosco e non la utilizzo, io ti consiglio di usare la lilbreria LiquidCrystalI2C scaricabile direttamente dall’IDE Arduino.
Ciao, io vedo solo la prima lettera per ogni riga. Inoltre non funziona con 0x27 ma devo inserire 0x3F. Sbaglio qualcosa?
Autore
Ciao Pino,
leggi nei commenti a questo articolo o ad altri articoli dedicati ai display I2C troverai la soluzione postata da altri.
Ciao Mauro.
Volevo chiederti se c’è la possibilità di gestire la backligh modulandola, cioè variando la luminosità con la libreria liquidcristalI2C, oppure se esiste un metodo per farlo con un display I2C.
Grazie.
Autore
Ciao Maurizio,
io ho provato e funziona con i Grove IIC Lcd e la loro libreria, non sono certo valga per qualsiasi display e libreria che usi.
Grazie Mauro, dove trovo la libreria che mi hai indicato?
Io uso un JHD204A con interfaccia I2C, è un 4X20.
Grazie davvero..
Ciao Mauro,
ho eseguito tutto quello indicato da questa guida,il mio IDE arduino carica il programma ma sul display non compare nulla,anche se regolo il contrasto.
mi saprebbe dire una soluzione?
grazie in anticipo
Autore
Ciao Ignazio,
il tuo display usa il PCF8574T ? I collegamenti tra driver e display sono i medesimi del mio display? L’indirizzo I2C o IIC è giusto ?
sul mio display LCD ho montato questa interfaccia: [[ link rimosso in automatico ]]
P:S. per arduindo nano i collegamenti sono gli stessi?
Autore
Ciao Ignazio,
ti chiedo il rispetto delle regole che trovi in fondo ad ogni articolo, sono poche e semplici per permettere a tutti di rispettarle.
Consulta i datasheet del tuo display per comprendere se il driver è quello del mio articolo e come è connesso lo stesso al display, considera che i display 16×2 non sono tutti uguali in pin.
Se usi l’arduino NANO verifica che SDA ed SCL siano corrispondenti ai pin A4 ed A5 come per la uno, lo schema dell’arduino nano originale è disponibile sul sito arduino.cc come quello di tutte le schede originali.
Ciao Mauro innanzitutto complimenti e grazie per le tue guide, ti volevo chiedere se è possibile collegare più di un LCD sul mio arduino, visto che i pin utilizzabili sono solo a4 e a5.
Grazie in anticipo
Autore
Ciao Flavio,
dovrai prendere degli LCD con indirizzi IIC differenti tra loro o programmabili. In questa ultima ipotesi potrai configurare differenti address per ciascun LCD collegato. Per maggiori info sull’argomento ti invito alla lettura delle specifiche I2C o IIC in modo da comprendere come funziona il protocollo.
salve. ho un problema con un mio sketch , mi chiedevo se potesse dargli un occhiata. praticamente quando arriva a prelievitazione invece di passare a lievitazione va, dopo 20secondi ,ad attesa. dove sbaglio? grazie mille e scusi se ho sbagliato post, non sapevo dove postarlo
[[ codice rimosso in automatico ]]
Autore
Ciao Nicola,
come hai letto in fondo ad ogni articolo ci sono 3 semplici regole, una di queste indica che è vietato incollare codice nei commenti.
Il motivo è che non mi è possibile correggere sketch scritti da altri sia per questioni di tempo sia tecniche.
Ciò che posso fare è rispondere a dubbi o quesiti specifici sugli articoli che leggi e su parti di codice, dei miei articoli, che non ti sono chiari.
Per quello che desideri tu esiste il forum arduino ufficiale, in cui persone più esperte di me, controllano e correggono sketch.
In merito a quello che scrivi sembra solo un problema di step, hai impostato qualche valore che impedisce al ciclo di essere eseguito in modo corretto, verifica quella parte ed usa il monitor seriale per capire che valori imposti e in quali cicli finisci.
Buongiorno,premetto che sto usando Arduino mega 2560 e non funziona, ma mi chiedo come è possibile che Arduino invii dati al display tramite i piedini A4 e A5 se questi sono ingressi analogici?
Grazie
Saluti
Autore
Ciao Paolo,
se leggi la scheda tecnica Arduino comprenderai che quei due pin non sono solo A4 ed A5 ma anche i pin su cui puoi usare il protocollo I2C.
Sulla mega tali pin non sono A4 ed A5 ma altri, ti invito a leggere la scheda tecnica delle due schede sul sito ufficiale arduino per comprendere le differenze e capire quali pin utilizzare.
Grazie, sono riuscito a far funzionare il display sia su UNO che su MEGA, perfetto.
Autore
Ottimo Paolo.
Ciao , grazie per risposta. Potrebbe essere un problema anche di lcd che riscrive sempre? Cosi mi hanno risposto nel forum arduino. Consigliano di scrivere l lcd ogni tot tempo. Essendo neofita come potrei fare? Riesci a buttare giu qualcosa che poi io possa proseguire e implementare? Leggo un tempo lo confronto se superiore tipo a 30 sec , scrivo lcd. Ma come? Grazie
Autore
Ciao Nicola,
non comprendo come un LCD possa influenzare il salto di un passaggio nella procedura ma se ti hanno detto così nel forum sarà vero.
Puoi agire con un delay o un comando millis, per entrambi trovi molti articoli nel blog da cui partire.
Ciao, se volessi collegare il display ad una breadboard dove metto GND e VCC? Ci vogliono resistenze? Grazie mille!
Autore
Ciao Stella,
il display deve essere alimentato a 5v senza resistenza o altro.
Potresti prevedere sulle linee SDA ed SCL una resistenza di pull-up da 4,7K o 10K se vuoi inserire altre schede i2c.
Per la breadboard puoi usare i pin che preferisci, la convenzione ci porta a utilizzare le due linee esterne che sono connesse in modo perpendicolare rispetto ai pin interni, trovi in tanti miei airticoli uno schema per il collegamento dei pin Vcc e Gnd
Ciao Mauro complimenti per il tuo lavoro. Ti seguo da tanto tempo e grazie a te ho sempre avuto aiuto prezioso. Ho una domanda da farti. É possibile ridurre la retroilluminazione di un display con modulo i2c? Grazie in anticipo
Autore
Ciao Diego,
dipende dal modello di display, più precisamente dipende dal controller I2C utilizzato e da come il display è connesso al controller.
Per darti meglio un’idea se il pin della retroilluminazione è connesso ad un pin digitale del controller IIC potrai solo accendere o spegnere la resto illuminazione.
Verifica con il produttore come è collegato il display prima di acquistarlo e quale sia il driver.
Un altro controllo interessante è verificare se la libreria che ti rilascia il produttore supporta il controllo di riduzione della luminosità.
Arduino Uno, IDE 1.0.6, lcd 16×2 con integratore per I2C già saldato. Giusti i collegamenti, giusto lo sketch (anche se non sono molto sicura dello 0x27), retroilluminazione regolata correttamente. Lo sketch viene verificato e caricato senza errori, ma non viene visualizzata alcuna scritta sull’lcd. Rimane come da acceso: prima linea di quadratini bianchi, seconda linea non colorata. E anche provando altri sketch il risultato è lo stesso.
Autore
Ciao Loredana,
verifica che l’indirizzo i2c sia 0x27, sembra che tu non stia inviando dati al display.
Puoi chiedere al produttore, consultare la scheda tecnica del negozio o la documentazione del prodotto.
Ciao Mauro,
grazie per il tuo lavoro.
Con l’esempio proposto riesco a caricare uno sketch sul mio 1 ma…scrive solo il primo carattere di ogni lcd.print !
lcd.print(“Ciao”) da come risultato solo una “C”.
Se uso setcursor riesco a definire dove scrivere..ma non vorrei fare tutto a mano…
Autore
Ciao Gianluca,
usa la libreria di marco s. ( vedi nei commenti )
Buonasera
ho utilizzato la sua guida è devo ammettere che è molto utile.
ho solo un problema, sul monitor vengono scritte solo le lettere della prima colonna
Autore
Ciao Angelo,
leggi nei commenti c’è la soluzione indicata per altri che hanno riscontrato il medesimo problema.
Se non fosse tra quelli di questo articolo puoi cercare altri articoli dedicati al display I2C e cercare nei commenti.
Ho comprato da poco uno schermo lcd dotato di ingressi “rapidi” SCL e SCD, ho provato quindi a fare una prova dello schermo tramite arduino copiando lo schema da te sopra proposto.
Mi sono scaricato la libreria, ho verificato il programma e l’ho caricato.
Lo schermo si accende, ma non appare alcuna scritta eppure l’lcd funziona perché provandolo usando tutti i collegamenti sopra (D5,D6.ecc) funziona perfettamente.
Mi sai dire quale potrebbe essere l’eventuale problema !?
GRAZIE
Autore
Ciao Diego,
potrebbero esserci diversi motivi:
1. controlla l’indirizzo I2C del display;
2. verifica con il produttore il driver usato;
3. controlla con il produttore lo schema dei collegamenti tra driver I2C e display stesso;
4. chiedi al produttore un esempio funzionante di sketch e libreria così da fugare errori di incompatibilità;
5. verifica che la libreria che usi sia adatta al tuo driver/collegamenti/address
Poi scrivimi come va.
ciao mauro io o lo stesso problema uso i2c 20,4 ma non funziona o la scheda integrata scl da tutto aperto quindi 0x27 address il code e giusto come faccio?
aiutami grazie infinite
Autore
Ciao Luigi,
non mi è chiaro il problema. Tu sai che il tuo indirizzo è 0x27 ? lo hai acquisito con uno scanner I2C o ti sei riferito a qualche datasheet ?
Arduino:1.6.9 Hourly Build 2016/04/20 08:33 (Windows 7), Scheda:”Arduino/Genuino Uno”
ATTENZIONE: Cartella spuria .github nella libreria ‘Adafruit PCD8544 Nokia 5110 LCD library’
ATTENZIONE: Cartella spuria .github nella libreria ‘Adafruit ST7735 Library’
ATTENZIONE: Cartella spuria .github nella libreria ‘Adafruit LiquidCrystal’
Tastdisplay_9:28: error: no matching function for call to ‘Keypad_I2C::Keypad_I2C(char*, byte [4], byte [4], const byte&, const byte&, int&)’
Keypad_I2C kpd=Keypad_I2C(makeKeymap(keys),rowPins,colPins,ROWS,COLS,i2caddress);
^
C:\Users\Saverio\Desktop\Antifurto\Tastdisplay_9\Tastdisplay_9.ino:28:82: note: candidates are:
In file included from C:\Users\Saverio\Desktop\Antifurto\Tastdisplay_9\Tastdisplay_9.ino:9:0:
C:\Users\Saverio\Downloads\arduino-nightly\libraries\Keypad_I2C/Keypad_I2C.h:29:9: note: Keypad_I2C::Keypad_I2C(int, int)
Keypad_I2C(int i2c_addr, int int_pin);
^
C:\Users\Saverio\Downloads\arduino-nightly\libraries\Keypad_I2C/Keypad_I2C.h:29:9: note: candidate expects 2 arguments, 6 provided
C:\Users\Saverio\Downloads\arduino-nightly\libraries\Keypad_I2C/Keypad_I2C.h:26:7: note: constexpr Keypad_I2C::Keypad_I2C(const Keypad_I2C&)
class Keypad_I2C
^
C:\Users\Saverio\Downloads\arduino-nightly\libraries\Keypad_I2C/Keypad_I2C.h:26:7: note: candidate expects 1 argument, 6 provided
C:\Users\Saverio\Downloads\arduino-nightly\libraries\Keypad_I2C/Keypad_I2C.h:26:7: note: constexpr Keypad_I2C::Keypad_I2C(Keypad_I2C&&)
C:\Users\Saverio\Downloads\arduino-nightly\libraries\Keypad_I2C/Keypad_I2C.h:26:7: note: candidate expects 1 argument, 6 provided
exit status 1
no matching function for call to ‘Keypad_I2C::Keypad_I2C(char*, byte [4], byte [4], const byte&, const byte&, int&)’
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\arduino_keypads-master: C:\Users\Saverio\Downloads\arduino-nightly\libraries\arduino_keypads-master
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\Bastelgarage_FTP_Arduino_Keypad_PCF8574_V1: C:\Users\Saverio\Downloads\arduino-nightly\libraries\Bastelgarage_FTP_Arduino_Keypad_PCF8574_V1
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\GraphicLCD_Nokia_5110-master: C:\Users\Saverio\Downloads\arduino-nightly\libraries\GraphicLCD_Nokia_5110-master
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\Nokia_5510: C:\Users\Saverio\Downloads\arduino-nightly\libraries\Nokia_5510
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\SAMD21_Mini_Breakout-master: C:\Users\Saverio\Downloads\arduino-nightly\libraries\SAMD21_Mini_Breakout-master
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\arduino_keypads-master: C:\Users\Saverio\Downloads\arduino-nightly\libraries\arduino_keypads-master
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\Bastelgarage_FTP_Arduino_Keypad_PCF8574_V1: C:\Users\Saverio\Downloads\arduino-nightly\libraries\Bastelgarage_FTP_Arduino_Keypad_PCF8574_V1
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\GraphicLCD_Nokia_5110-master: C:\Users\Saverio\Downloads\arduino-nightly\libraries\GraphicLCD_Nokia_5110-master
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\Nokia_5510: C:\Users\Saverio\Downloads\arduino-nightly\libraries\Nokia_5510
Trovata libreria non valida in C:\Users\Saverio\Downloads\arduino-nightly\libraries\SAMD21_Mini_Breakout-master: C:\Users\Saverio\Downloads\arduino-nightly\libraries\SAMD21_Mini_Breakout-master
Questo report potrebbe essere più ricco di informazioni con l’opzione
“Mostra un output dettagliato durante la compilazione”
abilitata in File -> Impostazioni
Autore
Ciao Saverio,
non comprendo cosa tu voglia conoscere, gli errori riguardano la libreria Keypad_I2C che io non uso in questo sketch.
Ciao Mauro,
sto impazzendo!!
Ho acquistato l’LCD Smraza LCD 2004 Display Module (20 characters x 4 lines) e purtroppo nonostante i numerosi tentativi non riesco a farlo funzionare.
La libreria che utilizzo è la LiquidCrystal_I2C2004V1 e o con un mio Sketch o con lo Sketch HelloWorld, appaiono solo il primo carattere di ogni rigo.
Riesci a darmi una dritta su come uscirne?
Grazie
Autore
Ciao Alfonso,
ti chiedo la cortesia di rispettare le due semplici regole scritte in fondo ad ogni articolo. Per questa volta sono stati rimossi i link presenti nel tuo commento.
In merito alla problematica ti consiglio di utilizzare la libreria I2C consigliata nei commenti degli altri utenti e scritta da Marco Schwartz
Innanzitutto grazie per il pronto riscontro e poi scusa per la questione del link non avevo letto la regola era molto tardi ed ero molto depresso 🙂
Appena rientro a casa provo e ti faccio sapere
Provato e per ora funziona!!!!!! G R A Z I E!!!!! Ora il progetto di automazione dell’acquario può procedere!
Ciao,
ho trovato un vecchio LCD che non usa il protocollo I2C.
Da quello che ho trovato online sembra un qualche tipo di seriale, infatti i pin sono:
–
+
ser
+
–
o forse il + e il – sono invertiti. In ogni caso ho un solo pin per trasmettere qualcosa.
Il display è molto vecchio e il fabbricante ha ormai aggiornato i prodotti aggiungendo l’I2C.
Sul loro sito e online non trovo alcun datasheet o documentazione o sketch da poter provare.
Grazie,
Giovanni
Autore
Ciao Giovanni,
ti suggerisco di scrivere al produttore per chiedere se, in archivio, possiedono ancora il datasheet del prodotto.
Buongiorno una domanda un display collegato in I2C a quanti metri lo posso portare da Arduino e con che cavo e quali accorgimento
Ringrazio
Saluti
Ivan
Autore
Ciao Ivan,
leggendo la definizione riportata su WiKi: https://en.wikipedia.org/wiki/I%C2%B2C leggi: processors and microcontrollers in short-distance, intra-board communication.
Parliamo di distanze inferiori al metro per quanto ho testato io nei miei progetti.
Salve, a me dice che c’è un problema nella linea di inizializzazione. Come posso fare?
Autore
Ciso Luca,
su quale linea?
Hai installato la libreria corretta?
Ciao Mauro,
sto cercando di gestire un lcd 20×4 tramite I2C.
A forza di smanettare sono riuscito a trovare la libreria che gestisce il display.
Premetto sono neofita; ho notato che solitamente all’interno della cartelle della librerie esiste un file di testo “Keywords” dove sono elencati i comandi (KEYWORD2) che possono essere utilizzati per gestire il display. La domanda che ti pongo è questa:
– dove è possibile reperire le informazioni/documentazioni sulla funzione di ogni singolo comando?
Grazie
Autore
Ciao Claudio,
se ti riferisci ai metodi della libreria, ossia quelli che penso tu chiami comandi, dovresti trovarli nella documentazione della libreria stessa.
Ciao Mauro,
giustamente parliamo di metodi. Se apro il file “keywords” della libreria LiquidCrystal_I2C by Frank Brabander che ho utilizzato per gestire il display in mio possesso, sono elencati parecchi metodi (KEYWORD2) e solo alcuni sono uguali a quelli che compaiono nella libreria LiquidCrystal che si trova sul sito di Arduino.
Ad esempio trovo metodi come: init, begin, noDisplay, shiftIncrement, printstr, etc..
Quello che mi sarebbe piaciuto capire è come vanno utilizzati , ma sopratutto a cosa servono magari con l’ausilio di esempi.
Scusa se ti stresso….essendo alle prime armi con Arduino ho parecchia difficoltà a muovermi e capire.
Grazie in anticipo per il tuo supporto.
Autore
Ciao Claudio,
comprendo la tua necessità e di solito è la sana necessità di conoscenza che ci spinge a indagare così in modo approfondito.
Io cercherei se Frank Brabander ha rilasciato documentazione in merito ai metodi e come essi debbano essere utilizzati.
Ciao Mauro
Mi chiamo Salvo
Ti ringrazio per i tutorial che fai.
Avrei bisogno di contattarti in privato per poterti mandare il file che devo caricare su arduino nano oppure UNO, ma non riesco perchè mi da un errore.
Purtroppo sono all’inizio sul mondo arduino ed ho bisogno di un aiuto gentilmente.
Autore
Ciao Salvo,
in primo luogo ti invito a non mettere i tuoi contatti nei commenti, i blog sono continuamente scansiti da bot che raccolgono queste info per usarle come mail di spam.
La tua email mi arriva comunque dal campo preposto.
In merito alla tua richiesta puoi:
1. leggere e comprendere i miei articoli sugli errori comuni che capita di fare quando inizi;
2. scrivermi l’errore nell’articolo dedicato agli errori comuni per capire se posso aiutarti.
Ciao sono un neofita apprendista stregone ho un display 1602 I2C con PCF8574T Ho copiato il tuo sketck e la libreria indicata ma non va . Ho inoltre eseguito il test con i2cdetect e non mi da nessun risultato. Nel dubbio ho usato un’altro display identico ma nulla. Che mi consigli ?
Grazie
Autore
Ciao Corrado,
io purtroppo non sono uno stregone 🙂
Posso consigliarti di controllare le connessioni SDA e SCL e l’alimentazione se entrambi i display non ti restituiscono segnali.
[…] il mio articolo dedicato all’expander PCF8574 per il controllo dei display lcd in i2c sei già aggiornato […]