MICHELEPISANI.IT
 

Guida all'uso del Display LCD Nokia 5110

Display Nokia 5110 e Sensore DHT11: BitMap, Temperatura e Umidità

arduino display lcd nokia 5110 bitmap u8glib dht11 temperatura umidita
Aprile 15
07:372017

Interessato a capire il funzionamento dei vecchi display per cellulari ho acquistato per pochi euro un Display LCD Nokia 5110 con cui effettuare alcune prove di visualizzazione grafica, utilizzo di apposite librerie, ecc... approfittandone anche per testare contestualmente il noto sensore DHT11 per il rilevamento di Temeratura e Umidità nell'ambiente circostante.

Il progetto realizzato non è niente di particolarmente complicato, in pratica sul display LCD Nokia 5110 appare il logo di www.michelepisani.it decodificato dal formato bitmap al fine di essere gestito dalla libreria U8Glib. Successivamente sull'LCD viene mostrato il valore di temperatura ed umidità presente nell'ambiente rilevato dal sensore DHT11. Il potenziometro gestisce l'aumento e la diminuzione della retroilluminazione del display LCD.

La parte più ostica è stata quella di ottenere un'immagine bitmap adatta alla conversione e farla digerire dalla libraria.
Di seguito alcuni consigli che possono farvi risparmiare tempo nella realizzazione di un progetto simile:

- La scheda tecnica del display LCD, in rete ce ne sono diverse, non sempre è effettivamente calzante con il dispositivo ovvero la sequenza dei pin non corrisponde sempre a quella reale pertanto il rischio è quello di collegare apparentemente i vari pin in modo corretto e ritrovarsi con un display acceso ma che non visualizza alcun carattere o che regola solo la retroilluminazione. Nel mio caso i pin si trovano in questo ordine (gestire pertanto i vari collegamenti dello sketch, che trovate poco sotto, in base alla sequenza di tali pin del proprio LCD):

RST | CE | DC | DIN | CLK | VCC | Light | GND

- La libreria U8Glib la potete scaricare al seguente link: https://github.com/olikraus/u8glib.
La relativa documentazione la trovate qui: https://github.com/olikraus/u8glib/wiki/userreference.

- Per la creazione di un'immagine BitMap adatta alla decodifica e visualizzazione sul Display LCD seguite i seguente passaggi (io ho usato Photoshop ma va bene qualsiasi altro programma di editing di immagini):

Dal menù: Image > Mode > Grayscale;
Sempre dal menù: Image > Mode > Bitmap;
Scegliere 'OK nella finestra che si aprirà, dopodiché nella successiva finestra modificare la risoluzione a 96ppi ed il metodo a '50% Threshold' in modo da avere le eventuali curve agli angoli meno squadrate;
Aquesto punto "Salva come..." e scegliere BMP che darà come sola opzione di scelta 1 bit e salvare l'immagine.

- Per la decodifica dell'immagine BitMap ci sono diversi tool online, quello che suggerisco e che ho utilizzato per il mio progetto è il seguente: http://marlinfw.org/tools/u8glib/converter.html (U8Glib bitmap converter).
Di seguito un'immagine esplicativa all'uso dello strumento:

Arduino - U8Glib bitmap converter
Fig. 1 - Arduino - U8Glib bitmap converter

 

- Per chi avesse bisogno della libreria per il sensore DHT11 può fare riferimento al seguente link:
https://github.com/adafruit/DHT-sensor-library.

Di seguito lo schema elettrico del progetto:

arduino display lcd nokia 5110 bitmap u8glib dht11 temperatura umidità
Fig. 2 - Schema per Arduino - Display LCD Nokia 5110 con sensore DHT11 per il rilevamento di temperatura ed umidità

Ed ecco lo sketch:

#include "U8glib.h"
#include "dht.h"

#define dht_apin A1
dht DHT;

U8GLIB_PCD8544 u8g(4, 5, 7, 6, 8);  // CLK=4, DIN=5, CE=7, DC=6, RST=8

const uint8_t michelepisani_bitmap[] U8G_PROGMEM = {
  0x00, 0x3c, 0x00, 0x0f, 0x80, 0x00, 0x07, 0x00, 0x00, 
  0x01, 0xff, 0x80, 0x7f, 0xe0, 0x00, 0xff, 0xf0, 0x00, 
  0x07, 0xff, 0xe0, 0xff, 0xf0, 0x03, 0xff, 0xfe, 0x00, 
  0x0f, 0xff, 0xf3, 0xff, 0xf8, 0x0f, 0xff, 0xff, 0x00, 
  0x1f, 0xff, 0xf3, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0x80, 
  0x3f, 0x83, 0xff, 0xf0, 0x7e, 0x3f, 0xc0, 0x1f, 0xe0, 
  0x3f, 0x00, 0xff, 0xc0, 0x3e, 0x7f, 0x01, 0xc7, 0xe0, 
  0x7e, 0x00, 0x7f, 0x80, 0x1f, 0x7c, 0x01, 0xf3, 0xf0, 
  0x7c, 0x00, 0x3f, 0x80, 0x1f, 0x78, 0x01, 0xfd, 0xf8, 
  0xf8, 0x00, 0x3f, 0x00, 0x0f, 0xf0, 0x01, 0xfe, 0xfc, 
  0xf8, 0x00, 0x1f, 0x00, 0x0f, 0xe0, 0x01, 0xff, 0x7c, 
  0xf8, 0x00, 0x1f, 0x00, 0x0f, 0xe0, 0x01, 0xff, 0x3e, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xc0, 0x01, 0xff, 0xbe, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x80, 0x01, 0xff, 0x9f, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x80, 0x01, 0xff, 0xdf, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x80, 0x01, 0xff, 0xdf, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x80, 0x01, 0xff, 0xdf, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x80, 0x01, 0xff, 0xdf, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x1f, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x9f, 0xfd, 0xff, 0xdf, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x9f, 0xfd, 0xff, 0xdf, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x8f, 0xfd, 0xff, 0xdf, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x8f, 0xfd, 0xff, 0x9e, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xe7, 0xfd, 0xff, 0xbe, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xe7, 0xfd, 0xff, 0x3c, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xf3, 0xfd, 0xfe, 0x7c, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xf1, 0xfd, 0xfc, 0xf8, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xf8, 0x7d, 0xf9, 0xf8, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xfe, 0x3d, 0xe3, 0xf0, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xbf, 0x00, 0x0f, 0xe0, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0xbf, 0xe0, 0x7f, 0xc0, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x8f, 0xff, 0xff, 0x80, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x87, 0xff, 0xfe, 0x00, 
  0xf8, 0x00, 0x1e, 0x00, 0x0f, 0x81, 0xff, 0xf8, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x3f, 0xc0, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 
  0x00, 0x80, 0x80, 0x20, 0x0f, 0x80, 0x10, 0x00, 0x08, 
  0x6c, 0x18, 0xe3, 0x26, 0x0f, 0x81, 0x83, 0x18, 0xc0, 
  0xfe, 0xbc, 0xf4, 0xa9, 0x0f, 0x83, 0xd7, 0x79, 0xe8, 
  0x92, 0xa0, 0x97, 0xaf, 0x0f, 0x82, 0x54, 0x29, 0x28, 
  0x92, 0xa0, 0x94, 0x28, 0x0f, 0x82, 0x53, 0x29, 0x28, 
  0x92, 0xbc, 0x97, 0xaf, 0x0f, 0x83, 0xd7, 0x3d, 0x28, 
  0x00, 0x00, 0x00, 0x00, 0x0f, 0x82, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x0f, 0x82, 0x00, 0x00, 0x00, 
};

const uint8_t degree_bitmap[] U8G_PROGMEM = {
  0b01110,
  0b01010,
  0b01110,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};

bool show_logo = true;
int loop_delay = 5000;

void setup(void) {

}

void loop(void) {
  DHT.read11(dht_apin);  // Acquisisce i dati dal sensore DHT11

  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );

  show_logo = false;
  delay(loop_delay);  // Mostro il logo per 5 secondi dopodiché aggiorno ogni 2 secondi i dati acquisiti dal sensore DHT11
  loop_delay = 2000;
}

void draw(void) {
  if (show_logo) {
    u8g.drawBitmapP( 6, 0, 9, 47, michelepisani_bitmap);  // Inserisco l'immagine bitmap del logo di www.michelepisani.it | MAX SCREEN NOKIA 5110 = 84x48
  }
  
  if(!show_logo) {
    u8g.setFont(u8g_font_profont22);  // seleziono il font e la relativa dimensione
    u8g.drawStr(0, 20, "T: ");  // Inserisco la stringa in posizione X, Y
    u8g.drawStr(0, 40, "H: ");
    u8g.setPrintPos(32, 20);  // Mi posiziono in X, Y
    u8g.print(DHT.temperature, 0);  // Mostro la temperatura rilevata dal sensore DHT11
    u8g.drawBitmapP( 55, 6, 1, 8, degree_bitmap);
    u8g.drawStr(63, 20, "C ");
    u8g.setPrintPos(32, 40);
    u8g.print(DHT.humidity, 0);  // Mostro l'umidità rilevata dal sensore DHT11
    u8g.drawStr(60, 40, "% ");
  }
}

Nel video una breve dimostrazione del funzionamento del progetto:

Per consigli, suggerimenti o chiarimenti sentitevi liberi di lasciare un commento!

Tags
Condividi

Autore

Michele Pisani

Michele Pisani

Ho uno spiccato orientamento al problem-solving, se è troppo facile non mi diverto :)
Credo nella volontà e nel cambiamento perchè hanno fatto della mia passione il mio pane quotidiano.
Se devo descrivermi con una sola parola direi... "Concretezza", la mia stretta di mano è una garanzia.

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

Scrivi un Commento

Scrivi un Commento

Il tuo indirizzo email non sarà pubblicato.
I campi contrassegnati da un * sono obbligatori

Articoli e Argomenti correlati

Categorie popolari

Iscriviti alla mia newsletter

La tua e-mail con me sarà al sicuro.
Non fornirò mai le tue informazioni a nessuno!

Ultimi commenti

Michele Pisani

Ciao peppe,
che tipo di errore ti dà? Hai verificato se il resto delle caratteristiche è …

peppe

Ciao, perchè non posso unire takeshy kurosawa con takeshy kurosawa shop? non sono nomi simili?

Michele Pisani

Grazie Ottavia, fa sempre piacere ricevere un feedback. Buon proseguimento.

Ottavia Neruda

La tua guida mi è stata utilissima. L'ho trovata semplice, ben fatta ed intuitiva. Grazie.