Collegamento diplay lcd ad Arduino via i2c con mcp23017

Questo semplice tutorial è pensato per quei progetti che richiedono l'uso di un numero di porte maggiore di quelle che il vostro Arduino Uno può offrirvi.
Infatti, grazie all'uso di un I/O expander (in questo caso il Microchip MCP23017) è possibile moltiplicare le porte a nostra disposizione.
Uno di questi ci permette di aumentare il numero delle porte fino a 16, che possono essere impostate sia come ingressi che come uscite.



Un dispositivo che senza dubbio richiede molti pin è il display LCD, ed è per questo che ho messo un esempio di collegamento proprio per questo dispositivo.
Infatti dalle 7 porte normalmente necessarie al collegamento, ridurremo questo numero a 2 soltanto, cosa che ci tornerà sicuramente utile nella realizzazione di grossi progetti.
Vediamo un video che ne dimostra il funzionamento:




Questo è lo schema da realizzare, ho cercato di farlo il più chiaro possibile, ma se avete dei dubbi non esitate a chiedere!




Fatto questo potete procedere al caricamento dello sketch, ma prima dovete scaricare questa libreria e copiare il file estratto nella cartella "libraries" di Arduino.

  1. #include <Wire.h>
  2. #include <LiquidTWI2.h>
  3. // Connessione via i2c, indirizzo di default (0)
  4. LiquidTWI2 lcd(0);
  5. void setup() {
  6.   // imposta il tipo di integrato usato
  7.   // (togli le virgolette da quello usato)
  8. //lcd.setMCPType(LTI_TYPE_MCP23008);
  9.   lcd.setMCPType(LTI_TYPE_MCP23017);
  10.   // imposta il tipo di lcd (colonne, righe)
  11.   lcd.begin(16, 2);
  12.   // scrivi un messaggio sull'lcd.
  13.   lcd.print("danielealberti");
  14.   lcd.setCursor(13, 1);
  15.   lcd.print(".it");
  16. }
  17. void loop() {
  18.   // preparati a scrivere nella colonna 0, riga 1
  19.   // (nota: la riga 1 è la seconda, il conteggio inizia da 0)
  20.   lcd.setCursor(0, 1);
  21.   // scrivi il numero dei secondi (nella posizione impostata prima)
  22.   lcd.print(millis()/1000);
  23. }

Questo è tutto, come al solito per qualunque problema lasciate un commento qua sotto, Ciao!!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!

24 commenti:

  1. Salve! Ora sto provando di seguire questa indicazione per fare funzionare la mia lcd 16x2, lo seguito verramento tutto ma non funziona proprio...lo verificato di collegare direttamente sul mio arduino il Lcd ma funziona. secondo lei quale sarà il fatto che la mia non funzione proprio...?

    RispondiElimina
  2. Lei mi potrebbe aiutare perché sto facendo un lavoro su rilevatore della sistema ambientale e mi serva di seguire tutti i valore come il sensore della temperatura, sensore di luminosità e il valore della sensore di prossimità sulla mia Lcd 16x2...mi serva tanti pin mentre uso arduino uno che lo sapiamo che ha pochi pin...cosa devo fare per il collegamento di questo mcp23017 con lcd 16x2 e arduino uno...? quale libreria lo posso usare...perché non ho capito come mai che non funziona la mia lcd

    RispondiElimina
    Risposte
    1. Forse c'era un problema con la libreria, l'ho spostata su Google Drive, prova a riscaricarla dal link nel post. Fammi sapere!! Ciao!

      Elimina
  3. Buongiorno Daniele.
    Ho appena terminato di assemblere il Suo progetto con Lcd ed Mcp23017, il quale funziona alla perfezione.
    Le chiedevo se tale progetto riesce a gestire, cambiando i parametri righe e colonne, i display 16x4.
    La ringrazio e complimenti per il suo sito.
    Usvardi Guido

    RispondiElimina
    Risposte
    1. Si certo, dovrebbe essere necessario solo cambiare la riga 13 facendola diventare:
      lcd.begin(16, 4);

      Elimina
    2. Grazie. Ho provato con un Lcd 20x4 modificando l'istruzione e funziona perfettamente.
      Le chiedo se fosse possibile usare i pin rimasti liberi del 23017 come I/O aggiuntivi.
      Saluti e buon Ferragosto !!!

      Elimina
    3. Ciao, che io sappia si ma non ho mai provato, anzi se ci riesci e vuoi condividere il tuo lavoro possiamo fare un post qui sul blog!

      Elimina
  4. Ha funzionato per 21 secondi poi...morto !
    Ho un 20 x 4 anche io, ed ora ho le due righe 0 e 2 completamente bianche, e le altre due la 1 e la 3 completamente nere. Che puo' essere ?!!??!

    RispondiElimina
    Risposte
    1. Prova a ricollegare il display in modo tradizionale per verificare che non si sia danneggiato

      Elimina
  5. Salve, le chiedo come si fa a trovare una libreria per far funzionare arduino con un lcd 16x2 con i2c e un rtc sempre con i2c.
    Complimenti per il sito
    Saluti
    Unberto

    RispondiElimina
    Risposte
    1. Ciao, grazie per i complimenti!
      la libreria per il display è quella che trovi in questo post,
      per il modulo RTC puoi trovarla qui:
      http://www.danielealberti.it/2014/03/visualizza-data-e-ora-su-un-display-con.html

      Elimina
  6. Ciao Daniele, grazie per la tua risposta rapida, ma non riesco a far funzionare arduino uno anche perchè e la prima volta che provo a programmare.
    Grazie per tutto quello che fai.
    Umberto

    RispondiElimina
  7. Come faccio a collegare 3 lcd con 3 circuiti integrati?

    RispondiElimina
    Risposte
    1. Ciao, devi realizzare 3 circuiti MCP/display (oppure usare 3 display i2c) e collegarli al bus i2c (pin A4 A5), infine dichiarare nello sketch gli altri 2 display con diversi indirizzi.

      Elimina
    2. Devo collegare 3 display con lo stesso sketch

      Elimina
  8. Daniele, bel progetto! ma è possibile collegare insieme un lcd e una keypad sul mcp23017? grazie

    RispondiElimina
  9. ciao..perche' non si resetta la scritta su display...visto che ho messo delay 1000...ma il conteggio continua ad andare ?

    RispondiElimina
  10. HELLO, it is not working properly, this is the error they are showing: Arduino: 1.8.1 (Windows 8), Board: "Arduino/Genuino Uno"

    LCD:1: error: stray '#' in program

    1. #include

    ^

    LCD:2: error: stray '#' in program

    2. #include

    ^

    LCD:1: error: expected unqualified-id before numeric constant

    1. #include

    ^

    LCD:6: error: expected unqualified-id before numeric constant

    6.

    ^

    LCD:7: error: expected unqualified-id before numeric constant

    7. void setup () {

    ^

    LCD:19: error: expected unqualified-id before numeric constant

    19.

    ^

    exit status 1
    stray '#' in program

    Invalid library found in C:\Program Files\Arduino\libraries\examples: C:\Program Files\Arduino\libraries\examples

    This report would have more information with
    "Show verbose output during compilation"
    option enabled in File -> Preferences.

    RispondiElimina
    Risposte
    1. Hi, have you copied the code properly? Do you have installed the library for the display as explained in the tutorial?
      Let me know if you solve.

      Elimina
  11. Ciao Daniele
    io sto tentando di far funzionare con scarsi risultati un monitor lcd
    12864 128X64 5V blue screen display ST7920
    dove ho montato un modulo I2C. Driver MCP23017

    ottengo il suo indirizzo ( 0x20 )
    ho provato con questo tuo , ma non ottengo nessun risultato ( schermo immobile ,nessun movimento )
    le uniche modifiche nel tuo sono state appunto, l indirizzo di memoria 0x20
    cambiare le colonne del lcd , ma qui non so se sto scrivendo giusto , non ho mai avuto uno schermo del genere.
    // imposta il tipo di lcd (colonne, righe)
    lcd.begin(128, 64);

    non trovo nulla in rete , puoi aiutarmi ? grazie

    RispondiElimina
  12. ciao da ulteriori ricerche sembra che MCP23017 & ST7920 , non comunichino . in più, farlo sembrerebbe sbagliato/sconsigliato per motivi tecnici riportati su alcuni forum compreso l'ufficiale di Arduino . no trovo nulla che dimostri che i due possano funzionare , confermi ? please ,cosi ci metto una pietra sopra :)

    RispondiElimina
    Risposte
    1. Ciao, purtroppo non ho esperienza con il display che stai usando, quindi non posso né smentire ne confermare quello che hai trovato.
      Daniele

      Elimina
    2. Grazie lo stesso , ci speravo che almeno tu mi sapessi indicare qualcosa..

      Elimina

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post