
Nello scorso articolo abbiamo parlato del display hat Mini distribuito da Pimoroni. Oggi impareremo a scrivere codice Python per programmarlo.
Ieri abbiamo descritto il display IPS LCD da 2″, distribuito da Pimoroni. Con la sua risoluzione di 320×240 pixel, lo schermo garantisce un rapporto 3:2 ideale per la rappresentazione di schermate retrò caratteristiche dei primi giochi da console. L’alta luminosità e il discreto valorei di throughput nell’utilizzo del frame buffer rende questo schermo, in accoppiata dìcon un piccolo Raspberry, ideale per la (ri-)programmazione di vecchi videogames, o la creazione di display multifunzionali per l’IoT.
Ma come si “scrive” su un display? Per prima cosa occorre conoscere il “driver” utilizzato per accendere e spegnere i pixel. Un driver, ricordiamo, è un software che trasforma comandi logici in funzioni hardware. Nel caso del display, accendere e spegnere pixel, cambiarne il colore, disegnare forme e mappare caratteri.
Di seguito mostriamo un codice di esempio (in Python) per mostrare le potenzi<lità del driver ST7789, utilizzato per accedere all’hardware del displai attraverso interfaccia seriale SPI.
Il codice di esempio
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
#!/usr/bin/env python3 import time from PIL import Image, ImageDraw from st7789 import ST7789 # Buttons BUTTON_A = 5 BUTTON_B = 6 BUTTON_X = 16 BUTTON_Y = 24 # Onboard RGB LED LED_R = 17 LED_G = 27 LED_B = 22 # General SPI_PORT = 0 SPI_CS = 1 SPI_DC = 9 BACKLIGHT = 13 # Screen dimensions WIDTH = 320 HEIGHT = 240 buffer = Image.new("RGB", (WIDTH, HEIGHT)) draw = ImageDraw.Draw(buffer) draw.rectangle((0, 0, 50, 50), (255, 0, 0)) draw.rectangle((320 - 50, 0, 320, 50), (0, 255, 0)) draw.rectangle((0, 240 - 50, 50, 240), (0, 0, 255)) draw.rectangle((320 - 50, 240 - 50, 320, 240), (255, 255, 0)) display = ST7789( port=SPI_PORT, cs=SPI_CS, dc=SPI_DC, backlight=BACKLIGHT, width=WIDTH, height=HEIGHT, rotation=180, spi_speed_hz=60 * 1000 * 1000, ) while True: display.display(buffer) time.sleep(1.0 / 60) |
Per prima cosa importiamo i moduli necessari per “pilotare” il display. Per chi non li avesse sottomano, ricordiamo che sono disponibili i link nell’articolo precedente.
Le variabili successive fanno riferimento ai pin del GPIO, ed occorrono per mappare rispettivamente i bottoni, i LED ed il sistema di interfaccia SPI.
Definiamo quindi la viewport, ovvero la risoluzione orizzontale e verticale in pixel: ricordiamo infatti che il driver ST7789 può funzionare a diverse risoluzioni.
Creiamo un oggetto immagine, che chiameremo buffer, a colori e con la risoluzione definita in precedenza. Quindi creiamo l’oggetto draw che consente di disegnare il buffer sullo schermo.
A questo punto, possiamo utilizzare il metodo .rectangle sull’oggetto draw per disegnare sulla memoria video rettangoli di varie misure e colori.
Creiamo infine un oggetto diaplay, chiamando direttamente il nostro driver ST7789 e fornendogli i valori necessari per accedere al nostro Raspberry.
A quesgto punto possiamo lanciare il nostro ciclo infinito che si occuperà di eseguire un refresh dello schermo spostando la memoria video 60 volte al secondo.
Quindi, per utilizzare il display occorre nell’ordine:
- Creare immagine da disegnare e metodo per aggiornare il disegno
- Creare un oggetto display, che riceverà il buffer dell’immagine ddisegnata in precedenza
- Disegnare (forme, colori, linee, punti, stringhe sono tutti accessibili attraverso metodi opportuni descritti nella libreria e negli esempi)
- Chiamare il metodo diaplay ad una frequenza opportuna per eseguire il refresh dello schermo.
Buon divertimento!
Iscriviti ai nostri gruppi Telegram
Link utili