ESP8266 & NodeMCU

25/11/2016

Con l’intento di auto-costruire un antifurto, qualche tempo fa cercando un’alternativa super economica ai soliti moduli radio per la trasmissione dati scoprii l’esistenza di questi moduli operanti nella rete wifi con la possibilità di operare con il protocollo TCP.

Non solo il basso costo ma addirittura la possibilità di operare indipendentemente da un processore esterno (tipo Arduino/Atmel) tanto da renderli perfettamente autonomi almeno per il mio impiego e credo per una buona parte di altri.

Inutile che mi dilungo con la descrizione del “sistema” è sufficiente andare su Google e digitare ESP8266 per trovarsi di fronte ad un mondo.

Proprio per via della vastità di questo mondo, popolato da più o meno “maneggioni” come me, ho trovato serie difficoltà ad inquadrare il sistema ed a capire come meglio sfruttarlo.

Permettetemi quindi la presunzione, sulla base delle mie difficoltà, di creare questa guida col fine di capire al volo e meglio orientarsi in funzione delle proprie esigenze.

Cos’è

Esistono una vastità di siti dove trovare informazioni sul “sistema”.

In sostanza ESP8266 è un “chippino wifi” che normalmente viene venduto già montato su varie tipologie di basette (ESP-01 fino a ESP-12, NodeMCU ecc.) La differenza in sostanza è sul numero di I/O disponibili, sul modulo di alimentazione (chip molto delicato …) e sulla pratica interfaccia USB o meno. A voi la scelta in base alla necessità. Mi sembra di aver capito che esistono anche un paio di varianti del chip stesso, ma credo sia irrilevante.

Detto chip viene normalmente acquistato con installato un firmware che permette di utilizzarlo ovviamente dopo aver scritto un apposito programma. La cosa interessante è che si può facilmente programmare, a costo zero, con l’IDE di Arduino (diamo un po’ per scontato che si sappia cosa sia, altrimenti c’è san Google…) .

Sempre su Google ed anche su YouTube esistono un’infinità di tutorial in tutte le lingue che insegnano come collegarlo e come programmarlo con lo stesso linguaggio usato per Arduino ovviamente includendo le apposite librerie.

Nel box seguente, tratto dal sito del produttore (Expressiv) la varie tipologie di Firmware installabili. A grandi linee: Con Sistema Operativo (RTOS SDK Real Time Operating System. Anche qui ampiamente descritto nei siti linkati da Google) e senza SIstema Operativo (Non OS SDK)

Poi esistono delle schedine chiamate NodeMCU che hanno il chip (generalmente montato s ESP12) con un firmware contenente un interprete LUA (eLua) che permette l’esecuzione l’esecuzione dei relativi script.

La faccenda qui è un po’ più complicata:

I firmware “utilizzabili con l’ide di Arduino” (non so come meglio definirli) li si scarica dal sito del produttore e li si installa con l’apposita procedura (sempre scaricabile dal sito del produttore) Mentre per poter utilizzare LUA occorre un firmware che si basa ovviamente sul SDK (firmware di cui sopra) con annesso l’interprete LUA ed i relativi moduli (non vengono dati tutti per default per questioni di limitato spazio di memoria…) necessari per far funzionare le eventuali device collegate (sensori, ecc.) piuttosto che implementare funzioni di più alto livello quali HTTP, SPI I2C e tante altre belle cose.

Come riportato nel sito istituzionale NodeMCU esistono 3 sistemi per avere il Firmware (chiamiamolo) NodeMCU:

  • farselo fare dal fantastico sito riportato: si scelgono i moduli e lo si fa compilare, viene poi inviata una mail con il link per scaricare le due versioni: matematiche ad interi o virgola mobile (sempre una questione di impiego ottimizzato della poca memoria a disposizione).
  • Compilarselo da se…
  • Non mi ricordo la terza possibilità ma in questa sede è irrilevante.

Dotatevi di tanta pazienza, allestitevi una macchina (anche virtuale) con SO Linux e seguite con tanta pazienza (e 2) i due successivi articoli.

Spero di esservi stato utile e di poterlo essere ache con i riassunti a seguire.

IMPORTANTISSIMO: Le informazioni riportate NON sono frutto delle mie competenze ma sono un collage di quanto riportato nei vari siti linkati. Non è tanto una questione di scarico di responsabilità ma piuttosto riconoscere il merito a chi ha fatto il lavoro più complesso e dal rilevante contenuto tecnologico.

BUON DIVERtimento

Firmware

[Non-OS SDK]

The Non-OS SDK uses timers and callbacks as the main way to perform the various functions – nested events, functions triggered by certain conditions. The Non-OS SDK uses the espconn network interface; the user needs to develop their software according to the usage rules of the espconn interface.

[RTOS SDK]

1. RTOS version SDK uses the freeRTOS system, a multi-tasking OS. You can use standard interfaces to freeRTOS resource management, recycling operations, execution delay, inter-task messaging and synchronization, task-oriented process design. For the specifics of interface methods, refer to freeRTOS official website instructions or USING THE FREERTOS REAL TIME KERNEL – A Practical Guide introduction.

2. RTOS SDK version of the network operating interface is a standard lwIP API, while providing a package which enables BSD Socket APIsocket interface. Users can directly use the socket API to develop software applications; your code can also be directly compiled to run standard applications on other platforms Socket , effectively reducing the cost of learning platform switching. (possibly flawed translation)

3. RTOS version of the SDK introduces cJSON library, use the library functions to more easily parse JSON packets.

4. RTOS version is compatible with non-OS SDK in the Wi-Fi interface, smart config interfaces, Sniffer related interfaces, system interface, timer interface, FOTA interfaces and peripheral driver interface, but does not support the AT implementation.