Nokia 5110 LCD 84x48 px

Da raspibo.
Versione del 25 set 2014 alle 22:55 di Dancast78 (discussione | contributi)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Jump to navigation Jump to search

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

Display nokia 5110 fronte Display nokia 5110 retro

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.

Collegamento Nokia LCD e 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:

Hello RaspiBo

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:

RasPiBO Wiki


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:

Temperatura

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:

Uptime, ip e disegno