Ho comprato dei moduli I2C per display LCD basato sul chip PCF8574T.
Una volta assemblato, l’aspetto del display + modulo è molto simile alla Fig. 2. Basta poi collegare i 4 pin laterali ad arduino e il gioco è fatto (almeno la parte elettronica 🙂 ).
- VCC -> 5v
- SCL -> A5 o pin SCL (su Arduino UNO R3)
- SDA -> A4 o pin SDA (su Arduino UNO R3)
- GND -> GND
Vediamo un po di codice.
La prima cosa da fare e capire che indirizzo ha il nostro modulo, e di conseguenza il nostro display. In rete ho trovato questo codice che permette di individuare l’indirizzo dei moduli I2C collegati ad arduino (I2C scanner):
//Written by Nick Gammon // Date: 20th April 2011 #include <Wire.h> void setup() { Serial.begin (115200); // Leonardo: wait for serial port to connect while (!Serial){ } Serial.println (); Serial.println ("I2C scanner. Scanning ..."); byte count = 0; Wire.begin(); for (byte i = 1; i < 120; i++) { Wire.beginTransmission (i); if (Wire.endTransmission () == 0) { Serial.print ("Found address: "); Serial.print (i, DEC); Serial.print (" (0x"); Serial.print (i, HEX); Serial.println (")"); count++; delay (1); // maybe unneeded? } // end of good response } // end of for loop Serial.println ("Done."); Serial.print ("Found "); Serial.print (count, DEC); Serial.println (" device(s)."); } // end of setup void loop() {}
Caricate lo sketch sulla board e aprite la console seriale. Verrà stampato l’indirizzo del modulo.
Una volta individuato l’indirizzo sostituiamolo nel prossimo esempio:
#include <Wire.h> #include <LCD.h> #include <LiquidCrystal_I2C.h> // F Malpartida's NewLiquidCrystal library #define I2C_ADDR 0x20 // Define I2C Address for controller #define BACKLIGHT_PIN 7 #define En_pin 4 #define Rw_pin 5 #define Rs_pin 6 #define D4_pin 0 #define D5_pin 1 #define D6_pin 2 #define D7_pin 3 #define LED_OFF 0 #define LED_ON 1 LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); void setup() { lcd.begin (16,2); // initialize the lcd // Switch on the backlight lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE); lcd.setBacklight(LED_ON); } void loop() { // Reset the display lcd.clear(); delay(1000); lcd.home(); // Print on the LCD lcd.backlight(); lcd.setCursor(0,0); lcd.print("Hello, world!"); delay(8000); }
Commentiamo un pò il codice:
- includiamo le librerie necessarie Wire per il protocollo I2C e LiquidCrystal_I2C per la gestione del display
- impostiamo l’indirizzo esedecimale
- associamo i pin dell’integrato PCF8574T ai pin del display
- creiamo e inizializziamo una variabile lcd
- il loop fa lampeggiare la scritta “Hello, world!” sul display con un ritardo di 8s.
Quando ho comprato il modulo, l’annuncio diceva “modulo I2C per display LCD 16×2”, ma io lo sto usando con un LCD 20×4 (Fig. 3) e funziona lo stesso, basta sostituire la riga di codice
lcd.begin (16,2);
con
lcd.begin (20,4);
Se volete cambiare indirizzo al modulo dovete impostare a Low o High i pin A0 A1 A2. Come si vede dalle Fgi. 1 e 2, i pin in questione hanno tre piazzole. Sotto la prima c’è un L (Low), sotto la terza una H (HIGH). Se unite la prima con la seconda con dello stagno, ad esempio del pin A0, impostate il pin a LOW e il modulo cambia indirizzo; lo stesso se unite la seconda con la terza, impostate il pin a HIGH, e il modulo cambia indirizzo. Così facendo potete scegliere uno tra gli otto indirizzi possibili.
Do It Yourself
Se volete, seguendo lo schema in Fig. 4 potere costruivi da solo un modulo I2C per LCD. Ecco l’occorrente:
- PCF8574T
- Transistor NPN 2N2222
- 2 Resistenze da 10 k
- 1 Resistenza da 2.2 k
- 1 Resistenza da 470
- 1 Trimmer potenziometro da 10 k
- 1 Condensatore da 100 nF (va bene anche in poliestere o in MLCC)
Non so se ne vale la pena visto il costo così basso del modulino (sulla baia si trova ad 1€ dalla cina con spedizione gratuita), ma se si hanno già tutti i componenti è un simpatico esercizio.
Fonte:
- http://www.mauroalfieri.it/elettronica/pcf8574p-interfaccia-i2c-display-lcd.html
- http://www.instructables.com/id/I2C-LCD-Controller-the-easy-way/?ALLSTEPS
- http://www.giuseppecaccavale.it/arduino/display-lcd-i2c-pcf8574t-arduino/