Nokia 5110 LCD 84x48 px
In questa pagina spiego come collegare al Raspberry questo display che si trova a pochi euro (io l'ho preso a 4 euro da un famoso sito cinese).
Hardware
Vi faccio notare che mi è arrivato già saldato come vedete nelle foto.
Questo schermo si pilota tramite l'interfaccia SPI.
Nell'immagine (creata con Fritzing) successiva viene mostrato come deve essere collegato al Raspberry.
Software (Raspbian)
Prima di tutto dobbiamo abilitare il modulo SPI che di default viene inserito nella blacklist
sudo vi /etc/modprobe.d/raspi-blacklist.conf
commentiamo la linea contenente "spi-bcm2708"
#blacklist spi-bcm2708
Al prossimo riavvio il modulo verrà caricato, per abilitarlo subito senza riavviare:
sudo modprobe spi-bcm2708
Installiamo il necessario:
sudo apt-get install python-imaging python-imaging-tk python-pip python-dev sudo pip install spidev sudo pip install wiringpi
L'ultima cosa è la libreria nokiaSPI.py che ci facilita molto, per adesso purtroppo non è presente nei repository e dobbiamo scaricarla da qua [[1]], basta copiare tutto il codice relativo alla libreria e salvarlo in un file chiamato "nokiaSPI.py".
Esempi
Semplice testo
Sorgente Python:
import nokiaSPI
lcd = nokiaSPI.NokiaSPI()
#Puliamo lo schermo
lcd.cls()
#Impostiamo la luminosita' dei led
lcd.led(500)
#Scriviamo del testo
lcd.text("Hello RaspiBo")
Risultato:
Immagine e testo
import nokiaSPI
from PIL import Image,ImageDraw
lcd = nokiaSPI.NokiaSPI()
#Puliamo lo schermo
lcd.cls()
#Impostiamo la luminosita' dei led
lcd.led(500)
#carichiamo il logo
im = Image.open("raspibo_logo.png")
#ridimensioniamo l'immagine per la misura del display
im.thumbnail((84,48))
#la convertiamo in bianco e nero
im = im.convert("1")
#la stampiamo sul display
lcd.show_image(im)
#sposiamo il cursore (riga, colonna)
lcd.gotorc(0,5)
lcd.text("RasPiBO")
lcd.gotorc(1,9)
lcd.text("Wiki")
lcd.gotorc(2,4)
lcd.text("non-corso")
lcd.gotorc(3,5)
lcd.text("libero")
lcd.gotorc(4,8)
lcd.text("e")
lcd.gotorc(5,5)
lcd.text("pubblico")
Risultato:
Font diversi, temperatura
Per lo script della temperatura leggete qua
import nokiaSPI, temp
from PIL import Image,ImageDraw,ImageFont
lcd = nokiaSPI.NokiaSPI()
#Puliamo lo schermo
lcd.cls()
#Impostiamo la luminosita' dei led
lcd.led(500)
#Prendiamo la temperatura
temperatura = str(temp.getTemp())
#Creazione di un'immagine in bianco-nero
im = Image.new('1', (84,48))
#Spazio per disegnare
draw = ImageDraw.Draw(im)
#Importiamo dei font
font = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSans.ttf", 11)
font2 = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSerif.ttf", 12)
font3 = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf", 14)
font4 = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf", 16)
#Scriviamo sullo spazio da disegno, il primo parametro e' la posizione (x,y) in pixel
draw.text((0,0), "La temperatura:",font=font, fill=1)
draw.text((0,10), temperatura,font=font2, fill=1)
draw.text((0,20), temperatura,font=font3, fill=1)
draw.text((0,30), temperatura,font=font4, fill=1)
#Stampiamo sullo schermo l'immagine creata
lcd.show_image(im)
Risultato:
Disegno
import subprocess, nokiaSPI
from PIL import Image,ImageDraw, ImageFont
from datetime import timedelta
def getUptime():
with open('/proc/uptime', 'r') as f:
uptime_seconds = float(f.readline().split()[0])
uptime_string = str(timedelta(seconds = uptime_seconds))
return ':'.join(str(uptime_string).split(':')[:2])
def getIp():
arg='ip route list'
p=subprocess.Popen(arg,shell=True,stdout=subprocess.PIPE)
data = p.communicate()
sdata = data[0].split()
ipaddr = sdata[ sdata.index('src')+1 ]
return ipaddr
lcd = nokiaSPI.NokiaSPI()
lcd.led(300)
im = Image.new('1', (84,48))
draw = ImageDraw.Draw(im)
#####Inizio disegno smile#####
#Contorno e occhi
draw.ellipse((10,30,30,47), outline=1)
draw.ellipse((15,35,17,37), outline=1)
draw.ellipse((23,35,25,37), outline=1)
#Bocca, punto per punto
draw.point((17,41),fill='white')
draw.point((18,42),fill='white')
draw.point((19,42),fill='white')
draw.point((20,42),fill='white')
draw.point((21,42),fill='white')
draw.point((22,42),fill='white')
draw.point((23,41),fill='white')
#####fine disegno smile#####
font = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSans.ttf", 10)
font2 = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf", 10)
#Scriviamo del testo
draw.text((15,0), "raspiInfo",font=font2, fill=1)
draw.text((0,10), "Uptime: "+getUptime(),font=font, fill=1)
draw.text((0,20), "Ip: "+getIp(),font=font, fill=1)
draw.text((40,36), "by tavy", font=font2, fill=1)
#Puliamo lo schermo e stampiamo l'immagine
lcd.cls()
lcd.show_image(im)
Risultato:






