Il modulo ESP8266 e il NodeMCU DevKit – Parte 1 – Introduzione e preparazione ambiente di sviluppo con Arduino IDE

E’ stato presentato ad Agosto 2014 e da allora non ha smesso di diffondersi a macchia d’olio. La Espressif Systems, una compagnia di Shangai, ci ha visto davvero giusto. Il loro modulino a basso costo (ma davvero basso!), l’ ESP8266 ha permesso un po’ a tutti di fare i primi esperimenti con l’IoT (Internet Of Things) e di conquistarsi una bella fetta di mercato.

Il modulo in questione comprende:

  • una CPU Tensilica Xtensa LX106 che gira a 80MHz (su alcuni modelli può arrivare a 160MHz)
  • una memoria flash esterna che varia da 512Kb a 4Mb a seconda del modello, in cui viene memorizzato il programma
  • 64Kb di memoria RAM per le istruzioni e 96Kb di memoria RAM per i dati
  • Lo stack TCP/IP e la possibilità di collegarsi alle reti wifi b/g/n
  • 16 GPIO (anche se non su tutti i moduli sono riportati tutti e 16)
  • UART / I2C / I2S/ SPI / 1 modulo ADC a 10bit

La Tensilica, una compagnia che produce CPU e DSP customizzabili, fa parte della Cadence Design Systems.

I moduli ESP8266 sono stati prodotti in vari modelli, dall’ESP-01 all’ESP-12. Cambiano forma, numero di pin disponibili, passo della piedinatura, approvazione FCC presente o mancante. Evito di riportare qui la lista completa, che è già riportata in maniera esaustiva sul sito ESP8266.com, in questa pagina.

esp-01
Modulo ESP-01

Quindi dicevamo: l’ESP8266 è un modulino a basso costo che permette di interfacciare le nostra applicazioni alla rete internet, quindi controllare degli oggetti, tramite i suoi I/O, sfruttando il collegamento Wi-Fi. L’ESP8266 può collegarsi ad una rete preesistente (client) o crearne una propria (server) alla quale possiamo collegarci col pc o lo smartphone.

I moduli in questione, dall’ESP-01 all’ESP-12, hanno chiaramente bisogno di alcuni componenti esterni per poter funzionare, ad esempio, funzionando tutti a 3.3V hanno come minimo bisogno di un regolatore di tensione per poterli alimentare (a meno che non avete un buon alimentatore stabilizzato regolabile o altre fonti di alimentazione sicura a 3.3V). In aggiunta, come dicevo in alto, non tutti i GPIO della CPU sono esposti (il modello più piccolo di tutti, l’ESP-01 ne ha esposti solo 3 più le due linee della UART) e in aggiunta alcuni modelli hanno un passo da 2mm anzichè da 2.54 come siamo abituati ad utilizzarlo su breadboard e millefori. Ma, cosa principale, per caricare il programma abbiamo bisogno di un adattatore USB/seriale TTL.

Sui Moduli ESP-xx è installato di default l’interprete per i comandi AT, per cui collegandovi con un adattatore USB/seriale TTL e con un programma di emulazione terminale, è possibile impartire comandi AT, la cui lista completa è riportata sul documento ufficiale del modulo ESP8266, di cui è possibile scaricare una copia sul sito di SparkFun a questo indirizzo.

esp-12
Modulo ESP-12

Per tale motivo ho deciso di acquistare non un modulo ESP-xx ma un modulo chiamato orami comunemente NodeMCU (più correttamente: NodeMCU DevKit). Tanto la differenza di prezzo è davvero di pochi spiccioli!

NodeMCU non è il nome dell’hardware in se stesso (perchè si tratta sempre di un modulo ESP-12 dotato di alcuni accessori esterni) ma è un riferimento ad un firmware open source, già caricato di serie sui NodeMCU DevKit, che permette di programmarli utilizzando il linguaggio LUA (che non è un nuovo linguaggio di programmazione, ma esiste dal 1993, ed è utilizzatissimo, tra l’altro, anche in ambito videogame).

La differenza principale del NodeMCU DevKit con i moduli ESP-xx è che:

  • Ha già installato il firmware NodeMCU al posto dell’interprete comandi AT di serie
  • Monta un modulo ESP-12 a bordo e riporta all’esterno tutti i pin con un passo da 2.54mm
  • Ha integrato un convertitore USB/seriale TTL
  • Ha integrato il regolatore di tensione a 3.3V
  • Sono presenti due pulsanti (reset e flash, quest’ultimo serve per riprogrammarne il firmware, cosa che sui moduli ESP si ottiene portando a massa il pin GPIO0)

L’interfacciamento con l’esterno è sempre a 3.3V per cui fate attenzione quando lo collegate a dispositivi a 5V! Utilizzate sempre almeno un partitore di tensione quando avete bisogno di invare un livello logico a 5V al modulo!

Di NodeMCU DevKit ne esistono due generazioni e ogni ditta la produce a modo suo. Chiaramente è preferibile un modulo di seconda generazione che ha apportato dei miglioramenti. In questa pagina viene illustrata la differenza tra i due moduli.

NodeMCU DevKit gen.2
NodeMCU DevKit gen.2

Vi dico soltanto che ho pagato, in Cina, un NodeMCU DevKit, gen.2, €3,35 e probabilmente cercando meglio, lo si trova ad un prezzo ancora più basso! Quindi direi che vale proprio la pena di provarlo… no?

L’unico problema di questo modulo è che entra nelle breadboard prendendosi tutta la larghezza, per cui è impossibile, su breadboard, collegare qualcosa in serie ai pin, a meno che non si giostra facendo passare i cavi sotto la scheda… Ad ogni modo è possibile collegarla tramite cavetti jumper o optare per qualche schedina più costosa e più stretta.

Al Maker Faire Rome, gli amici della Linksprite, che avevano lo stand affianco al mio, mi hanno omaggiato di due bellissime board che montano un ESP8266 e che utilizzerò nel prossimo articolo. La Linknode D1, che è una scheda avente lo stesso form-factor di Arduino (ma con scarsa compatibilità a livello di funzioni dei pin):

linknode_d1E la Linknode R4, che monta un ESP8266 e ha 4 relè, ottima per controlli remoti on/off di luci o altro in casa via web:

Linksprite Linknode R4 4-Relay WiFi Controller
Linksprite Linknode R4 4-Relay WiFi Controller

Nota sul pin analogico

Il modulo ESP8266 ha un solo pin analogico, contrassegnato come A0 e capace quindi di leggere una tensione da 0 a 1V. Non tutti i moduli ESP-xx riportano all’esterno il pin analogico. Questo è presente soltanto sui moduli 7,8,12 e 12E.

Installazione Drivers

La maggior parte delle schede NodeMCU DevKit montano un convertitore USB/Seriale TTL della Silicon Labs, il modello CP2102. Scaricate i drivers dal sito ufficiale e installateli prima di collegare la scheda:

Download Drivers CP2102

La scheda che ho acquistato io in Cina monta un chip più economico: il CH340G. Tale chip è anche presente sulla scheda Linknode D1 della Linksprite. Windows di default non riconosce questo chip, per cui bisogna prima scaricare il driver dal sito ufficiale, installarlo e quindi collegare la scheda. I drivers sono disponibili per Windows, Mac e Linux sulla pagina ufficiale:

Download Drivers CH340G

Se invece state utilizzando un modulo ESP-xx, oppure una scheda che monta l’ESP8266 e non munita di convertitore USB/seriale TTL (come la Linknode R4 della Linksprite) penso che già avete installati i drivers del vostro adattatore USB/seriale TTL. Gli adattatori che montano un chip della FTDI vengono riconosciuti subito. Altri no, come ad esempio i convertitori economici basati sul chip PL2303 della Prolific.

Nel caso utilizziate un convertitore basato sul chip PL2303, i drivers ufficiali si trovano qui:

Download Drivers PL2303

Se il chip è di tipo nuovo (PL-2303HXD o PL-2303TA), i drivers linkati sopra vanno bene su tutte le versioni di windows, altrimenti se avete un chip vecchio (PL-2303X e PL-2303HXA), potete usare i drivers scaricabili dal sito della Olimex (che distribuisce adattatori basati su quel chip), in questa pagina, ma… Funzionano soltanto con versioni di windows sotto la 7 (e con la vecchia versione del chip).

Se avete la sfortuna di avere un adattatore con un PL-2303 di tipo vecchio e una versione di Windows dalla 7 a salire… sono dolori. Provate a cercare su google “PL2303 Windows 8”. (ho trovato una procedura linkata in questa pagina ma non l’ho provata e a quanto pare gli antivirus della Symantec danno problemi con quell’exe, se trovate una procedura buona/files buoni, linkate nei commenti che la aggiungo).

EDIT
Sono riuscito a trovare dei drivers che funzionano correttamente con la vecchia versione del chip PL2303, non danno fastidio all’antivirus, e mi funzionano correttamente sotto windows 8.1 64bit! Li potete trovare in questa pagina: totalcardiagnostics.com/support/(…)

Dopo aver installato i drivers, viene creata una porta COM.

Installazione dell’ ESP8266 Core for Arduino IDE

Abbiamo detto più in alto che i vari moduli ESP8266 possono essere programmati con il firmware NodeMCU (già presente invece sulle schede NodeMCU DevKit) che permette di interagire utilizzando il linguaggio LUA. Tuttavia questo argomento non sarà trattato in questo articolo. Se siete interessati a programmare il vostro modulo ESP8266 in LUA, sappiate che se avete un modulo ESP8266 nudo e crudo dovete flasharlo con la versione di NodeMCU che più vi aggrada (ne esistono di vari tipi, ottimizzati per tutte le esigenze), utilizzando dei programmi appositi (in questo caso vi rimando a questa guida).

Per programmare i moduli ESP8266, e tutte le schede che li montano, con l’IDE Arduino è necessario avere installata l’ultima versione (o una delle ultime che consentono l’aggiunta di board aggiuntive tramite script). Scaricate ed installate l’ultima versione di Arduino IDE dalla pagina ufficiale.

Andare su Github a questo indirizzo: https://github.com/arduino/Arduino/wiki/Unofficial-list-of-3rd-party-boards-support-urls

In questa pagina c’è un elenco di schede di terze parti che è possibile programmare con l’IDE di Arduino. Scorrendo verso il basso cerchiamo l’elemeno della lista intitolato “ESP8266 Community”, a fianco a questo nome c’è un link: NON dobbiamo cliccarlo ma soltanto copiarlo:

json link
Dove recuperare il link al file Json con le definizioni della scheda da inserire in Arduino IDE

Non riporto qui il link del file Json perchè potrebbero decidere di cambiarne il nome o la posizione, per cui è conveniente andare sulla pagina elencata e copiare il link da li, che è sicuramente quello più aggiornato.

Dopo aver copiato il link, lanciare l’IDE di Arduino e andare in File -> Preferences.

Nella schermata che compare, in basso, nel campo “Additional Board manager URLs:”, incollare il link che abbiamo copiato poc’anzi:

board manager

Premere quindi il pulsante “OK”.

Ora andare nel menù Tools -> Board “[nome dell’ultima board usata]-> Boards manager

boards_manager_menu

Nella schermata che compare, scorrere in basso. Alla fine dovrebbe apparire un riquadro con scritto “esp8266 by ESP8266 Community“. Cliccando proprio sopra questo riquadro, nel riquadro stesso, in basso a destra, compare una dropdown list con le versioni disponibili (direi di lasciare quella che compare, che è l’ultima versione) e il pulsante Install:

boards_manager

Premere quindi il pulsante “Install”. Si avvia il download automatico di tutti i tools necessari e l’impostazione automatica di Arduino IDE. Si tratta di circa 160Mb di files, quindi bisogna attendere qualche minuto.

Alla fine dell’installazione, premere il pulsante “Close” sulla finestra attiva del boards manager. Ora dal menù Tools -> Board compaiono alcune schede basate sull’ESP8266:

new_boards

Per ora questo è tutto, esempi di programmazione e altro nella parte successiva dell’articolo.

Clicca qui per andare alla parte successiva di questo tutorial

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)