Il modulo ESP8266-12 e' una versione piu' evoluta del famosissimo ESP8266-01 ed essenzialmente espone piu' pin GPIO ed ha una memoria piu' capiente
Come e' noto e come si puo' vedere dalla foto il problema principale e' che non e' facilmente montabile su una breadboard in quanto il passo dei pin e' di 2 mm e non dei canonici 2,54 mm
In rete e' possibile acquistare un modulo adattatore [qui] per lo ESP8266-12
Oppure esiste un'altra alternativa: costruirsi questo piccolo modulo da soli.
In questo post descrivo come costruirsi un modulo simile a casa
Schema Elettrico
Lo schema elettrico [disponibile qui] e' piuttosto semplice, basta tenere a mente solo alcuni punti fondamentali
In base al datasheet [qui] ci sono 5 pin che devono essere impostati correttamente per il funzionamento del modulo in configurazione minima:
pin di Reset (REST) va collegato a VCC
pin Chip Enable (CH_PD) va collegato a VCC
GPIO 15 va collegato a massa
GPIO 2 va collegato a VCC
GPIO 0 va collegato a VCC per il boot normale (a massa per programmare la flash)
PCB
Il PCB [disponibile qui] e' semplice e di facile realizzazione a casa.
Breakout Board
Ho realizzato il modulo in questo modo per poterlo utilizzare in due modi:
come board di sviluppo facilmente montabile su breadboard per prototipazione
come daughter board da inserire nei miei vari progetti
In questo modo il modulo EPS8266-12 risulta piu' versatile nel suo utilizzo
La scheda e' di facile realizzazione con pochissimi componenti passivi (5 resistenze).
Intenzionalmente non ho inseirto il classico condensatore sull'alimentazione per ragioni di spazio.
Bisogna solo fare un po' di attenzione nel realizzare le saldature del modulo sulla scheda.
Io per sicurezza (anche se non necessario) ho applicato un piccolo pezzo di scotch (o nostra isolante) nella pate posteriore dello ESP8266-12 facendo attenzione a non coprire i piedini.
In questo modo sono sicuro che non ci siano contati non voluti tra il modulo EPS e le piste della daughter board
Questo modulo e' composto da 4 display a 7 segmenti pilotati dal driver TM1637 (qui il datasheet) monato sul retro del modulo
Il chip TM1637 ha anche la capacita' di leggere gli scan code di un tastierino 4x4, ma non viene trattato in questo post.
Piedinatura
Il modulo ha 4 piedini
VCC: piedino di alimentazione +5V
GND: piedino di massa
CLK: piedino di clock
DIO: piedino di scambio dati seriali tra Arduino ed il TM1637
Come si vede tolti i due piedinio di alimentazione, il modulo si programma con un semplice protocollo seriali a due fili (CLK e DIO).
Programmazione
Qui una breve descrizione (volutamente non completa) sul come programare il modulo. Tutti i dettagli sono contenuti nel datasheet
Leggendo il datasheet (chiunque vuole smanettare con Arduino e i vari componenti elettronici deve imparare a leggere un datasheet :) ) si capisce che il modulo puo' essere programmato con due modalita' differenti di indirizzamento (autoincrementale, fissa) (in questo post ne usiamo solo quella fissa).
Questa figura ci spiega come programmare il display. Piu' precisamente bisogna inviare al modulo 3 comandi ed il dato da visualizzare sul display a 7 segmenti. I tre comandi sono definiti come:
Data command settings: comando di impostazioni
Address command settings: comnado di impostazione indirizzo
Display and control command settings: comando di impostazioni display
Nel datasheet e' definito il formato di ogni singolo comando (ometto ulteriori dettagli dato il target di questo post)
In conclusione per far visualizzare una cifra sul display bisogna inviare questi comandi (valore esadecimale del byte di comando):
0x40: write data to display: diciamo al modulo che vogliamo scrivere una cifra su un display a 7 segmenti
0xC0: indirizzo (0 - 3 siccome ci sono 4 display) del display che vogliamo usare
0x88: impostazione della luminosita'
Circuito
Vediamo ora come collegare il modulo Digital Tube ad Arduino
piedino VCC: va collegato al piedino 5V di Arduino
piedino GND: va collegato al piedino GND di Arduino
piedino CLK: va collegato al pin 7 di Arduino
piedino DIO: va collegato al pin 6 di Arduino
I piedini CLK e DIO possono essere collegati a qualsiasi pin digitale di Arduino, ma questo post usa il 6 ed il 7.
Codice Scratch
Ok ora che abbiamo capito come programmare e collegare il modulo digital tube ad Arduino vediamo il codice Scratch di prova
Il codice implementa il protocollo seriale descritto nel datasheet.
Il blocco creaFont e' usato per definire una tabella di mapping tra i valori numerici da 0 - 9 ed il relativo valore numerico da passare al modulo.
In altre parole i 7 segmenti sono pilotati dal vaore di un bit all'interno di un byte. Quindi andando a mettere a 0 o a 1 specifici bit si dice al modulo di accendere o spegnere il display.
In questo modo si possono far visualizzare al display le 10 cifre ed anche altri caratteri
I segmenti dal A a G, sono rappresentati in questo modo in uun byte (A = LSB)
0gfedcba
Quindi per esempio la cifra 1 si visualizza accendendo il segment b ed il segmento c e spegnendo tutti gli altri segmenti.
Quindi scrivendo in binario otteniamo 00000110 che in deciamale e' 6.
I blocchi sequenzaStart e sequenzaStop sono usati per impostare particolari sequenze di valori sui piedini CLK e DIO in modo da rispettare ed implementare il protocollo descritto.
Il blocco scriviByte accetta un valore in ingresso ed ha il compito di inviare il byte passato in ingresso (bit per bit) al modulo
Il blocco displayCifra accetta due valore in ingresso:
l'indirizzo [0-3] del display da usare (cifra)
il valore numerico [0-9] da visualizzare (valore)
Infine nel blocco principale (main) impostiam i valori dei 3 comandi necessari per progammare il modulo.
Dopo creaiamo la tabella dei font ed impostiamo la luminosita' (da 0 - a 7).
Assegniamo i pin di CLK e DIO ai pin di Arduino (6 e 7) e li impostiamo come Output.
A questo punto possiamo chiamare il blocco displayCifra per far apparire sul display selezionato la cifra voluta
Buon divertimento e sperimentate a visualizzare altri caratteri.
In questo post vediamo come programmarlo per visualizzare una figura sulla matrice.
Codice Scratch
Il codice Scratchper programmare la matrice led si basa sul codice utilizzato per testare la matrice spiegato nel post precedente.
Vengono aggiunti alcuni blocchi utili.
Conversone da Esadecimale a Decimale
Questo blocco accetta in input un valore esadecimale (in base 16) e lo converte in decimale (base 10)
Invesrione di un byte
Questo blocco dato un valore in byte ne calcola il valore decimale invertendo a specchio tutti i suoi bit.
Per esempio se il valore in input e' 123 il risultato fornito dal blocco sara' 222.
Se scriviamo i numeri in binario risulta tutto piu' chiaro
123 -> 01111011
222 -> 11011110
Come vedete se invertitr i bit del numero 123 si ottiene il numero 222.
I due blocchi introdotti sopra sono utili per programmare la matrice con una figura arbitraria.
Accensione di una linea della matrice
Questo blocco sfrutta il blocco scriviComando per accendere i led di una specifica riga (riga) della matrice in base al valore (data) fornito
Editor per Matrice a Led
Su Internet e' disponibile un editor web per la matrice 8x8 usata in questo post.
Questo ottimo sito permette di disegnare il bitmap 8x8 che si vuole visualizzare sulla matrice.
La cosa piu' bella e' che fornisce moltissime immagini (font, numeri ed iconi) gia' disegnate, quindi ideale per una prova veloce.
Una volta terminato di editare il bitmap della matrice, il sito visualizza una porzione di codice C che rappresenta il bitmap stesso.
Inoltre rappresenta tutto il bitmap con un singolo numero a 64 bit rappresentato in formato esadecimale.
Per esempio il bitmap in figura e' rappresentato con questo codice: 10387cfe7c381000
Il nostro codice Scratch usa questo codice esadecinmale per visualizzare il bitmap sulla matrice andando a programmare l'accensione o lo spegnimento di ogni singolo led della matrice.
Programma Principale
L'unico input da fornire e' il codice prese dal sito Editor per Matrice (10387cfe7c381000) ed assegnarlo alla variabile matrice, come si vede nel secondo blocco in figura.
Dopo di cio', allo stesso modo del programma di test, si inizializzano i GPIO e si inizializza la matrice.
Ora il modo in cui il bitmap e' rappresentato nel codice esadecimale non e' direttamente utilizzabile dal mio programma, ma deve prima essere manipolato.
In dettaglio in un ciclo che viene ripetuto 8 volte si leggono due cifre alla volta (8x2) del codice esadecimale e si convertono in decimale.
Il valore nibble1+nibble2 e' il valore decimale di due cifre esadecimali del codice complessivo.
Questo valore viene passato al blocco invertiByte che come visto prima ne inverte i bit a specchio.
A questo punto il valore ottenuto e' quello corretto per essere programmato e visualizzato dalla matrice. Cio' avviene andando a scrivere tale valore all'indirizzo della riga tramite il blocco accendiRiga.
Al termine del ciclo tutte le 8 righe della matrice sono programmate e il bitmap rappresentato dal codice esadecimale a 64 bit e' visualizzato sulla matrice
Nota
Ho notato che la programmazione del modulo e' abbastanza lenta e richiede circa 22 secondi.
Questo non e' dovuto ad un malfunzionamento di Arduino o del modulo, ma ad una caratteristica del software Firmata che gira su Arduino.
Ma dopotutto questo post serve per imparare. Se poi si vuole usare il modulo in modo piu' serio realizaando delle animazioni si usa il codice Arduino e non Scratch, ma questo viene trattato in decide di post su Internet.
In questo post vediamo come programmare tale modulo con Arduino e Scratch
Piedinatura Modulo Matrice 8x8 Led
Il modulo Matrice 8x8 Led con MAX7219 ha due connettori da 5 peidini disposte ai due lati del PCB.
Entrambi i connettori hanno la stessa funzionalita'.
I piedini partendo dall'alto verso il basso sono contrassegnati come:
VCC: piedino di alimentazione +5V
GND: piedino di massa
DIN: Data Input Seriale. Serve per caricare la parola da 16 bit all'interno dello shift register del MAX7219
CS: Chipe Select. Serve per indicare al MAX7219 quando caricare un bit presente sul pin DIN nello shift register. Questo avviene quando CS e' basso (LOW)
CLK:Clock utilizzato per le operazioni di caricamento della parola da 16 bit. Quando il clock va alto (HIGH) i bit in ingresso sono trasferiti nello shift register interno
Connessione del modulo Matrice 8x8 Led con Arduino
Come si puo' vedere nelle due figure ho collegato il piedino VCC e GND del modulo rispettivamente ai piedini +5V e a GND di Arduino.
Il pin DIN del modulo l'ho collegato al GPIO 4 di Arduino
Il pin CS dell modulo l'ho collegato al GPIO 3 di Arduino
Il pin CLK del modulo l'ho collegato al GPIO 2 di Arduino
Test base del modulo
Ora che ho assemblato il modulo e l'ho collegato ad Arduino non mi resta che testarlo.
Inizio creando un primo programma Scratch che utilizzo per verificare se il modulo funziona correttamente.
Codice Scratch
Il cuore del codice si trova in due blocchi utili per scrivere la parola di programmazione a 16 bit nel MAX7219
Scrivi Byte
Questo blocco viene chiamato passandogli un valore numerico tra 0 e 255 (byte)
Il blocco si occupa di scrivere questo byte, un bit alla volta, nel MAX7219. Come si puo' vedere prima di scrivere il bit sul piedino DIN (pinData) si imposta il CLK a 0 (LOW) e poi dopo la scrittura si impostal il CLK a 1 (HIGH).
In questo modo il bit sul piedino DIN vienetrasferito nello shift register del MAX7219
In particolare questo blocco puo' essere utile a chi inizia per capire come si fa uno shift a sinistra di un byte.
E' un implementazione rozza (Scrtach e' alquanto limitato) dell'operatore di shift << (bitwise left) del lingiuaggio C.
Scrivi Comando
Questo blocco riceve in ingresso un indirizzo ed un comando su 8 bit (byte).
Il blocco si occupa di scrivere il comando fornito (byte) all'indirizzo fornito (indirizzo)
Come detto prima si trasferiscono i 16 bit di parola (8 di indirizzo e 8 di comando) con il pin CS (pinCS) a o (LOW). Solo alla fine il CS va' portato alto (HIGH) effettivamente trasfererendo i 16 bit nello shift register del MAX7219.
Solo a questo punto il MAX7219 esegue il comando fornito
Altri Blocchi
Gli altri blocchi sono di supporto per avere un main piu' pulito.
In particolare i blocchi hanno questa funzionalita':
setupGPIO: imposta i GPIO di Arduino per poter comunicare con il modulo Led in modo corretto e secondo le connessioni elettriche
setDecodeMode: imposta la modalita' di decodifica del MAX7219
setLuminosita[valore]: imposta la luminosita' della matrice (0-15)
setScanLimit: imposta lo scanlimit del modulo
accendiMatrice[valore]: accende o spegne la matrice (0-1)
testMatrice[valore]: imposta la modalita' di test (0-1)
Blocco Main
Il blocco main e' piuttosto semplice in quanto e' una serie di chiamate aglia ltri blocchi definiti
Inizia impostando i GPIO in modo corretto, poi imposta i parametri principali per il modulo MAX7219, in particolare la luminosita'.
Dopo di cio' spegne la matrice ed esce dalla modalita' di test, per resettare ogni stato precedente.
Poi attende 2 secondi e poi infine imposta la modalita' di test ed accende la matrice.
Se tutto funziona correttamente dovreste vedere tutti i led della matrice accendersi insieme
Bene a questo punto siete sicuri che il vostro che avete assemblato e completamente funzionante.
1 Resistenza da 10K ohm [marrone - nero - arancio]
2 pin header femmina - 8 pin lineari
2 pin header maschio - 5 pin a L
Il kit e' di buona fattura e soprattutto il PCB e' realizzato bene Considerando il costo e cio' che viene fornito e' un buon acquisto.
Montaggio
Ho fatto scaldare il saldatore per bene ed ho pulito la punta.
Ho montato e saldato i componentinel seguentre ordine:
Zoccolo a 24 pin
Bisogna fare attenzione al verso di montaggio. Lo zoccolo presenta una piccola scanalatura a forma di U.
Ho montate lo zoccolo sul PCB con la scanalatura a U verso l'alto come in figura
Ho cercato di fare le saldature in modo piu' pulito possibile senza depositare troppo stagno.
Il PCB ha i fori stagnati che aiutano moltissimo nella saldature
2 pin header femmina - 8 pin lineari
Non ci sono indicazioni particolari. Io li ho montati entrambi allo stesos momento cosi' quando ho girato il PCB per fare la saldatura la scheda era in piano agevolando la saldatura
2 pin header maschio - 5 pin a L
Condensatore da 0.1uF
Condensatore da 10uF
Il condensaore da 10uF e' elettrolitico e quindi ha una polarita'.
Come si vede in figura ho prestato attenzione a montare il condensatore con il piedino piu' lungo nel foro contrassehnato con + ed il piedino piu' corto nel foro con il -
Come si vede in figura ho piegato i piedini in modo da tenere il condensatore in posizione facilitando la saldatura.
Resistenza da 10K Ohm
Ed ecco il modulo con tutti i componenti saldati sul PCB
HO tagliato i piedini dei due condensatori e della resistenza tramite una piccola tronchesina.
Assemblaggio finale
A questo punto ho inserito l'integrato MAX7219 nel suo zoccolo
Anche l'integrato presenta una piccola scanalatura ad U in una delle due estremita'.
Ho montato l'integrato facendo combaciare la scanalatura ad U con quella presente nello zoccole, come indicato in figura
A questo punto ho montato la matrice 8x8 di led
Ed ecco il Modulo Matrice 64 Led con MAX7219 completamente assemblato e pronto per essere utilizzato
In un prossimo post faro' vedere come utilizzare il modulo appena assemblato
Blink e’ la prima e la piu’ semplice applicazione per Arduino che possiamo programmare con Scratch
Nel mondo del software Blink e’ meglio conosciuto come Hello World !
Blink fa accendere e spegnere ogni secondo il led presente sulla scheda Arduino
Blink serve a verificare che l’ambiente Scratch e Arduino siano correttamente funzionanti
Circuito Finale Questo e' l'aspetto che avra' il circuito finale. In questo caso non ci sono cablaggi.
Circuito Finale in funzionamento Questo e' il funzionamento del circuito finale in azione.
Bill of Material Qui la lista dei componenti e del materiale di cui hai bisogno per realizzare il progetto.
Circuito Breadboard Realizza il tuo progetto seguendo i cablaggi sulla breadboard e Arduino come raffigurato qui sotto. In questo caso non ci sono cablaggi.
Codice Scratch Implementa esattamente questo codice nell'ambiente Scratch per far funzionare il tuo progetto.
Complimenti
Complimenti se vedi il led sulla scheda Arduino lampeggiare ogni secondo significa che hai crerato il tuo primo programma per Arduino e tutto funzionabene !!!