Come detto nel precedente articolo esistono molteplici possibilità per programmare l’ESP8266, sia in termini di linguaggio che di IDE utilizzato.
Dispongo di diverse versioni dell’ESP8266 ma per i primi esperimenti ho deciso di optare per la witty board.

Trattasi di un piccolo dev kit composto da due parti: una base “rimovibile” e una parte superiore con il micro controllore vero e proprio.

Sulla parte superiore troviamo:

  • 1 USB di sola alimentazione
  • un led RGB
  • un foto resistore
  • un pulsante di input

sulla base rimovibile invece:

  • 1 interfaccia USB UART (CH340G)
  • due pulsanti: reset e flash

In sostanza con le due parti connesse si dispone di un vero sistema di sviluppo comprensivo di tutto quanto serve per programmarlo.
Una volta programmato il dispositivo è possibile staccare la base e usare la parte superiore (alimentata tramite USB) e usarla connessa ad una bread board.

Iniziamo con predisporre l’IDE ovvero Arduino IDE.
Con linux la cosa è abbastanza semplice: si scarica il file, lo si decomprime e si lancia lo script di installazione come spiegato molto bene qui.
Se usate windows o MacOS X dovete scaricare anche i driver per l’USB UART.

A questo punto si procede al setup di Arduino IDE per l’uso con l’ESP8266 (dall’altra parte Arduino IDE nasce per Arduino!).
Lanciate Arduino IDE e selezionate File > Impostazione : nella maschera che comparirà inserite la stringa

http://arduino.esp8266.com/stable/package_esp8266com_index.json

nel campo URL aggiuntive per il gestore schede.

(Qui potete trovare un elenco esaustivo degli add-on di supporto per vari dispositivi supportati da Arduino Ide.)

Adesso da Strumenti > Scheda selezionate la Vs versione della scheda ESP8266: non essendo disponibile la witty board io uso NodeMcu 1.0 che ritengo essere il setting che più si avvicina all’hardware che ho a disposizione.

Selezionata la scheda comparirà un lista dalla quale dovete selezionare la voce “esp8266 by ESP8266 Community“. Fatto questo partirà il download delle varie librerie di supporto per ESP8266 (sono circa 150 Mb quindi potrebbe volerci un po’ di tempo).

Infine carichiamo il supporto SPIFFS (qui è spiegato di cosa si tratta).
Questo step non è necessario adesso, io ve lo cito comunque perchè tornerà utile in futuro.
Per l’installazione fate riferimento a questa guida. Riavviate Arduino Ide e sarete finalmente operativi!

Adesso si inizia a giocare: collegate la scheda e settate la porta di comunicazione (strumenti > porta, dovreste vedere /dev/ttyUSB0). Scriviamo un primo programmino di test.

const int LDR = A0;
const int BUTTON = 4;
const int RED = 15;
const int GREEN = 12;
const int BLUE = 13;
 
void setup() 
{
    Serial.begin(9600);
 
    pinMode(LDR, INPUT);
    pinMode(BUTTON, INPUT);
    pinMode(RED, OUTPUT);
    pinMode(GREEN, OUTPUT);
    pinMode(BLUE, OUTPUT);
}
 
void loop()
{
    Serial.print("Fotoresistore: ");
    Serial.println(analogRead(LDR));
    Serial.print("Tasto: ");
    Serial.println(digitalRead(BUTTON));
 
    analogWrite(RED, random(0,1023));
    analogWrite(GREEN, random(0,1023));
    analogWrite(BLUE, random(0,1023));
 
    delay(500);
}

cosa dovrebbe fare questo programma?
Beh intanto bisogna conoscere la piedinatura della witty board.
Cercando online ho trovato il significato di alcuni piedini (almeno di quelli che servono a me):

  • GPIO04 : il tasto della parte superiore: è attivo alto pertanto diventa 0 se viene premuto
  • GPIO12 : led verde
  • GPIO13 : led blu
  • GPIO15 : led rosso
  • A0 : foto resistore

Inoltre sembra che i 3 led siano pilotabili in PWM ossia modulazione di larghezza dell’inpulso (Pulse Modulation Width): in sostanza si sta usando un pin digitale per simulare un’uscita analogica.
Questo si ottiene variando appunto la larghezza dell’impulso : l’hardware in uso prevede una risoluzione di 10bit (quindi valori compresi tra 0 e 1023). Se passiamo il valore 1023 significa che il pin è attivo per tutto il duty cicle mentre se passiamo 0 è sempre spento. Valori intermedi significano far percepire al led una percentuale compresa tra lo 0% (valore 0) e il 100% (valore 1023) ergo simulare appunto una lettura analogica su un pin che normalmente funziona in digitale ovvero 0 o 1 quindi spento o accesso.

Diversamente il foto resistore (LDR) è collegato ad un pin analogico (A0) che ha sempre risoluzione di 10bit ergo fornisce valori compresi tra 0 e 1023. In base che cosa vengono forniti questi valori ovvero come si comporta il foto resistore? Al buio totale ritorna 0, alla luca massima ritorna 1023. In pratica misura la luminosità dell’ambiente circostante.

Vediamo quindi il programma: come prima cosa definiamo delle costanti per identificare comodamente i vari elementi che andremo ad azionare. Fatto questo nella routine di init settiamo i pin in base al tipo di azione per essi prevista quindi il foto resistore e il pulsante saranno degli ingressi mentre i led RGB saranno delle uscita (mi sembra abbastanza ovvio, nevvero?).

Il ciclo principale infine legge i valori dell’LDR e del pulsante e li invia alla seriale (quindi potremo leggerli nel monitor seriale fornito da arduino IDE.. praticamente il debug dei poveri). Il colore dei tre componenti del led vengono determinati in maniera casuale fornendo appunto tre valori casuali compresi tra 0 e 1023. Fatto questo si aspetta mezzo secondo (500ms) e si riparte.

Per avviare il programma è sufficiente indicare il comando carica del menu sketch. Normalmente l’iter previsto sarebbe la sequenza dei seguenti comandi: verifica/compila e poi carica ma arduino IDE è in grado di accorgersi quando si carica se il programma deve essere ricompilato pertanto il solo comando carica è sufficiente.
A questo punto un piccolo led azzuro di fianco al chip principale lampeggerà e nella command line di arduino IDE potremo consultare l’avanzamento delle operazioni di caricamento.
Ultimato il caricamento vedrete il led RGB cambiare di colore ogni mezzo secondo e attivando il monitor seriale (menu strumenti > monitor seriale ) potrete consultare i valori del foto resistore e del pulsante.

Se provate ad oscurare il foto resistore usando una mano noterete che il valore diminuirà, viceversa avvicinando una fonte luminosa il valore aumenterà.
Lo stesso accadrà premendo il tasto della parte superiore della witty board: normalmente sarà mostrato 1 (ricordiamoci che il pin collegato al tasto è attivo alto) mentre premendo il tasto il valore sarà 0.

Questo è quello che ci aspetteremmo, in realtà non tutto funzionerà regolarmente; o meglio: ci sono alcuni aspetti che devono essere portati alla vostra attenzione:

  • il tasto per il flash ovvero per la scrittura del programma sul dispositivo sembra essere inutile: da quanto letto in rete sembra che Arduino IDE riesca a settare il dispositivo in flash mode in automatico. Di sicuro usando altro hardware e un altro IDE questo comportamento non sarà garantito.
  • il led rosso sembra non funzionare! Le ho provate tutte: ottengo solo variazioni comprese tra il verde ed il blu. Settando a 1023 SOLO il led rosso quest’ultimo non si accende mai… ergo non funge. Considerando da dove proviene la scheda la cosa non mi stupisce.

Bene questo è quanto per ora.
Ai prossimi esperimenti!
Bye

ESP8266 – witty board e Arduino Ide

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *