Bluetooth LED banner
Obiettivo: creare un banner di visualizzazione di stringhe inviate tramite protocollo bluetooth da una webapp.
- Breadboard
- Arduino UNO
- Matrice LED 8x8
- Modulo Bluetooth HC-05
Il software parte dalla realizzazione dell'interfaccia web grazie alla quale sarà possibile comandare il banner utilizzando HTML, CSS e JavaScript.
Si passa, in Python (con framework Flask), alla creazione di un web server che permetta di:
- Accettare
HTTP-GET
per spedire la pagina index - Accettare
HTTP-POST
per ricevere la stringa da visualizzare - Collegare il microcontrollore Arduino tramite protocollo bluetooth
Progetto un font per il display coerente al progetto della mappatura: trasformando il disegno (realizzato con il programma PixeltoMatrix) di ogni lettera in un array di byte da inserire nel programma Arduino. Ogni byte rappresenta una riga del display.
Esempio con la lettera A:
const byte c_a[8] = {0x3C, 0x7E, 0xC3, 0xC3, 0xFF, 0xFF, 0x81, 0x81};
Byte (hex) | Riga visualizzata (bin) | |||||||
0x3C | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
0x7E | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
0xC3 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
0xC3 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 |
0xFF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0xFF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0x81 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
0x81 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Il fulcro è la codifica Arduino di un programma che possa ricevere le informazioni attraverso canale seriale Bluetooth e possa gestire la LED board.
Il codice si struttura nelle seguenti parti:
- Importazione delle librerie utilizzate (
LedControl
eSoftwareSerial
) - Definizione delle costanti relative ai collegamenti hardware (ricevitore, trasmettitore, etc)
- Definizione dei caratteri visualizzabili tramite array di byte costanti, le lettere iniziano con
c_
, i numeri cond_
e gli altri caratteri non hanno un prefisso - Configurazione dei valori di setting modificabili (luminosità, tempo di visualizzazione di ogni carattere) con un valore di default a scelta
- Inizializzazione dell’oggetto per la gestione dell’interfaccia bluetooth e l’oggetto per controllare la LED board
- Definizione delle funzioni per il controllo del display:
printByte
per “inserire” le lettere nel display,clearDisplay
per spegnere tutti i LED,setDelay
per impostare la durata di visualizzazione di ogni lettera,setBrightness
per impostare la luminosità dei led - Definizione della funzione
printStringOnLED
che stampa ogni carattere della stringa inserita dall’utente - Definizione della funzione setup per la configurazione iniziale del dispositivo: impostiamo per il bluetooth e per il display il baud a 9600; come da protocollo invio tramite bluetooth le informazioni generali del mio dispositivo; spengo i led del mio display e imposto la luminosità al massimo
- Definizione della funzione
loop
che controlla se ci sono messaggi in arrivo tramite bluetooth e, in tal caso, stampa il messaggio su seriale (debugging) e lo invia alla funzioneprintStringOnLED
Bisogna scollegare il modulo bluetooth durante il caricamento del codice sull’arduino perché altrimenti si intercorre in errori.
Implemento il circuito in foto.
Configuro nel terminale Linux il collegamento bluetooth con il seguente comando:
sudo rfcomm bind 69 98:D3:21:FC:84:80
Così so che il file virtuale di collegamento al mio modulo bluetooth per il mio sistema operativo si chiama rfcomm69
.
Implemento nel server una classe Banner. È importante impostare l’attributo __port
a /dev/rfcomm69
, così da connettere Python alle API del sistema operativo che spediranno stringhe in seriale.
Eseguo il server e let’s go!