Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Raspberry Pi: LCD alfanumerico

Come gestire un display alfanumerico adoperando Raspberry Pi
Come gestire un display alfanumerico adoperando Raspberry Pi
Link copiato negli appunti

In questa lezione impareremo a pilotare un display LCD alfanumerico utilizzando il Raspberry Pi.
Analizzeremo tutti i passi necessari per effettuare i collegamenti elettrici, descriveremo inoltre come installare la libreria python adatta al controllo del display. Quindi scriveremo un codice "base" per la gestione dello stesso.

In commercio esistono varie tipologie di display, utilizzabili con il Raspberry Pi, che spaziano dai più semplici LCD (Liquid Cristal Display) alfanumerici fino ai più sofisticati touch screen.

Vediamo i principali tipi di display utilizzabili:

  • LCD alfanumerici: Normalmente organizzati in righe di caratteri. Disponibili in varie dimensioni tra cui le più comuni composte da 2 o 4 righe da 16 o 20 caratteri (16x2 - 16x4 o 20x2 - 20x4). Visualizzano i caratteri ASCII e permettono di avere una mappa di caratteri personalizzabili. Sono di semplice reperibilità, hanno un costo molto contenuto e si programmano facilmente.
  • LCD grafici: Simili ai precedenti ma con la fondamentale differenza che non visualizzano caratteri ma singoli pixel. Esistono in varie dimensioni, tra cui le più comuni sono 128x64 pixel, 122x32 pixel o 84x48 pixel. Permettono di visualizzare semplici immagini o effetti grafici. Anche questo tipo di display è poco costoso e diffuso nell'ambito maker.
  • OLED (Organic Light Emitting Diode): Piccoli display grafici con tecnologia OLED sia monocromatici che a colori. Simili ai precedenti come funzionalità, ma normalmente di dimensioni più contenute e più sottili.
  • TFT (Thin Film Transistor): Sono display a matrice attiva usati negli anni passati per gli schermi dei laptop. Normalmente di dimensioni maggiori (da 3 a 7 pollici), a colori, possono anche essere touch-screen. Generalmente hanno un costo maggiore dei precedenti e sono più adatti per applicazioni in cui è presente una forte componente grafica.
  • E-Ink: Display comunemente usati dagli e-book reader. Caratteristica fondamentale è il bassisimo consumo energetico e la capacità di visualizzare un contenuto statico anche in assenza di alimentazione. Tipicamente hanno un costo maggiore e sono utilizzati in applicazioni particolari (spesso fuori dall'ambito maker).
  • Matrici di Led: Matrici di led mononcromatici o RGB. Esistono in varie dimensioni e i più utilizzati in ambito maker sono moduli da 8x8 pixel componibili. Usati tipicamente per la visualizzazione di scritte e messaggi scorrevoli. Hanno un costo molto contenuto e sono di facile reperibilità e utilizzo.

I display più comuni sono pilotabili tramite il Raspberry Pi usando semplici protocolli paralleli: I2C (Inter-IC) o in alcuni casi tramite connessioni SPI (Serial Peripheral Interface).
I display più evoluti, come a esempio i TFT, hanno connessioni HDMI.

Controllo di un LCD Alfanumerico

I più diffusi LCD alfanumerici in ambito maker sono quelli basati sul driver Hitachi HD44780. Pertanto in questa lezione facciamo riferimento a questa tipologia di display.
Questi LCD sono forniti da un'ampia platea di fornitori, inclusi tutti quelli presenti sui vari siti di e-commerce di componenti elettronici.
Per questo motivo, pur essendo tutti funzionalmente uguali e basati sullo stesso driver di controllo, possono presentare minime differenze. La differenza più importante potrebbe consistere nella disposizione dei pin di controllo.
Descriviamo ora tutti e 16 pin con nome e funzionalità:

Pin #1[Vss] Massa
Pin #2[Vdd] Alimentazione
Pin #3[Vo] Controllo contrasto LCD
Pin #4[RS] Register Select
Pin #5[R/W] Modalità Read/Write
Pin #6[E] Enable
Pin #7[DB0] bit dato 0
Pin #8[DB1] bit dato 1
Pin #9[DB2] bit dato 2
Pin #10[DB3] bit dato 3
Pin #11DB4] bit dato 4
Pin #12[DB5] bit dato 5
Pin #13[DB6] bit dato 6
Pin #14[DB7] bit dato 7
Pin BL- Massa per retro illuminazione
Pin BL+ +5V per retro illuminazione

Guardando il display LCD dall'alto, con il connettore orientato verso il basso, partendo dalla destra del connettore, i pin sono disposti quest'ordine: BL+, BL-, #1, #2, #3, #4, #5, #6, #7, #8, #9, #10, #11, #12, #13, #14.
Esistono delle variazioni nella disposizione di questi pin ma seguendo il nome e la numerazione la funzionalità di ogni pin rimane invariata.
Per realizzare il circuito di controllo, oltre al LCD e al Raspebrry Pi, sono necessari un potenziometro da 10K Ohm, una resistenza da 220 Ohm e 20 fili multicolore maschio-femmina.
Il circuito e i collegamenti da effettuare sono mostrati in figura.

Figura 1. (click per ingrandire)


breadboard

Per connettere in maniera ottimale il Raspberry Pi allo LCD effettuare i seguenti collegamenti utilizzando la numerazione fisica dei pin:

Raspberry pin #2 linea + rossa sulla breadboard
Raspberry pin #6 linea - blu sulla breadboard
Raspberry pin #7 LCD pin #14 [DB7]
Raspberry pin #11 LCD pin #13 [DB6]
Raspberry pin #13 LCD pin #12 [DB5]
Raspberry pin #15 LCD pin #11 [DB4]
Raspberry pin #36 LCD pin #6 [E]
Raspberry pin #38 LCD pin #5 [R/W]
Raspberry pin #40 LCD pin #4 [RS]
LCD pin#3 [Vo] pin centrale del potenziometro
LCD pin#2 [Vdd] linea + rossa sulla breadboard
LCD pin#1 [Vss] linea - blu sulla breadboard
LCD pin# BL- linea - blu sulla breadboard
LCD pin# BL+ piedino della resistenza da 220 Omh
altro piedino reistenza linea + rossa sulla breadboard
piedino destro potenziometro linea + rossa sulla breadboard
piedino sinistro potenziometro linea - blu sulla breadboard

Il potenziometro serve per regolare il contrasto del LCD. Si suggerisce di utilizzarlo in caso in cui i caratteri non fossero completamente visibili.

Software di controllo

Per pilotare il display LCD, con il Raspberry Pi, usiamo una libreria python chiamata RPLCD. La libreria supporta diversi tipi di display e quindi va configurata in maniera corretta in base al display utilizzato nel proprio progetto.
Da una finestra terminale la libreria si installa con il seguente comando:

sudo pip3 install RPLCD

Si presuppone l'uso di python3 tuttavia la libreria è compatibile anche con python2.
Di seguito il codice commentato del programma di controllo.


import sys
from RPLCD.gpio import CharLCD
from RPi import GPIO
import time

RITARDO = 0.5

#Inizializza il display LCD
lcd = CharLCD(numbering_mode=GPIO.BOARD, cols=16, rows=2, pin_rs=40, pin_rw=38, pin_e=36, pins_data=[15, 13, 11, 7])

#imposta la retro illuminazione e nasconde il cursore
lcd.backlight = True
lcd.cursor_mode = 'hide'

#cancella il display
lcd.clear()

#posiziona il cursore sulla prima linea alla colonna 5
lcd.cursor_pos = (0, 5)

#stampa una stringa
lcd.write_string("Hello")

#posiziona il cursore sulla seconda linea alla colonna 1
lcd.cursor_pos = (1, 1)
lcd.write_string("Raspberry Pi!!")

time.sleep(1)

#effettuta lo scroll delle scritte a destra e sinstra
for _ in range(16):
      lcd.shift_display(-1)
      time.sleep(RITARDO)
while True:
	for _ in range(32):
	      lcd.shift_display(1)
	      time.sleep(RITARDO)
	for _ in range(32):
	      lcd.shift_display(-1)
	      time.sleep(RITARDO)

La classe CharLCD fornisce una semplice interfaccia al display LCD e ne permette il controllo di ogni singolo aspetto.
Come per le connessioni elettriche anche nel codice si usa la numerazione fisica per i pin del Raspberry Pi.
Nel costruttore della classe bisogna passare alcuni parametri fondamentali:

  • cols e rows: sono il numero di colonne e righe del proprio display LCD.
  • pin_rs: corrisponde al pin #4 del LCD ed è collegato al pin#40 del Raspberry.
  • pin_rw: corrisponde al pin #5 del LCD ed è collegato al pin#38 del Raspberry.
  • pin_e: corrisponde al pin #6 del LCD ed è collegato al pin#36 del Raspberry.
  • pin_data: una lista di 4 o 8 pin corrispondenti ai pin DB0-7 del LCD. In questo caso per ridurre il numero di connessioni viene utilizzata una modalità a 4 bit di dato.

Se tutti i passaggi sono stati eseguiti correttamente, si dovrebbe ottenere un risultato simile alla figura sottostante.

Figura 2. (click per ingrandire)


lcd

In questa lezione abbiamo fatto una panoramica sulle più comuni tipologie di display per Raspberry Pi in ambito maker. Successivamente abbiamo descritto in dettaglio la piedinatura del LCD, con driver Hitachi HD44780, e descritto le connessioni elettriche necessarie per il suo corretto funzionamento.
Un codice di controllo e verifica, del funzionamento del LCD, è stato fornito e analizzato subito sopra, quest'ultimo potrà essere utilizzato come base di partenza per le vostre implementazioni.

Ti consigliamo anche