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

Giovanni Bernardo | 21 ottobre 2016
Categorie: Arduino - Domotica - ESP8266 - Progetti

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

Puoi lasciare un commento, o un trackback dal tuo sito.

  1. #1 da jumpjack il 22 ottobre 2016

    Programmare un NodeMCU è di una facilità disarmante, basta collegarlo a un cavetto USB e via.
    Sarebbe invece davvero utile un tutorial in italiano su come programmare un modulino standalone ESP-xx : se cerchi 10 tutorial in rete, troverai 10 modi diversi di collegare resistenze di pullup e pulldown… e a me non ne funziona nessuno! Nè con ESP-01, nè con ESP-07, nè con un ESP-12 staccato da un NodeMCU funzionante, nè con un ESP-12 standalone collegato al NodeMCU al posto di quello tolto!

    Aiuto!

    • #2 da Giovanni Bernardo il 23 ottobre 2016

      Non ho moduli ESP-xx, ma mi risulta che per programmarli bisogna portare il pin GPIO0 a massa, poi per far girare il programma, lo togli da massa. Nessuna pull-up o pull-down. Hai provato così?

    • #3 da Giovanni Bernardo il 23 ottobre 2016

      Quelli tolti/messi dal NodeMCU non ti funzionano per il semplice motivo che sul NodeMcu, l’ESP-12 è pre-programmato con il firmware NodeMCU, per cui il metodo di reset dovrebbe essere diverso perchè controllato via seriale

    • #4 da Giovanni Bernardo il 23 ottobre 2016

      Ho una Linknode R4. Sopra c’è un modulo ESP-12 nudo e crudo. Ci sono solo collegati dei transistor a 4 I/O per pilotare i relè. C’è un jumper per programmarla che porta il GPIO0 a massa. Quando l’hai finita di programmare, il jumper lo sposti per portare GPIO0 a 3.3V ed esegue il programma. Per cui, come dicevo prima, porta il pin GPIO0 a massa, e magari metti una resistenza di pull-up su quel pin per evitare di doverlo riportare a 3.3V finita la programmazione. Prova cosi e fammi sapere

    • #5 da Giovanni Bernardo il 17 luglio 2017

      Allora.. Riprendo questo post perchè ho comprato alcuni ESP-01 e non ho avuto nessun tipo di difficoltà a programmarli.
      1) pin CH_P0 fisso a 3.3V
      2) GPIO2 liberamente utilizzabile
      3) GPI0 deve stare a 3.3V mediante resistenza da 10K, poi con un jumper o un interruttore lo porti a massa per entrare in modalità programmazione
      4) pin RESET a 3.3V mediante resistenza di pullup da 10K, con un pulsante lo mandi a massa per eseguire il reset

      In pratica per programmarlo premerai il pulsante di reset, tenendolo premuto sposti il jumper (o l’interruttore) su GPIO0 in modo da portarlo a massa, quindi rilasci il reset ed entra in modalità programmazione. Se non vuoi usare il reset basta che stacchi l’alimentazione, porti a massa il GPIO0 e ridai alimentazione. Finito di programmare togli il jumper da GPIO0, in modo che torni alto grazie alla resistenza di pullup, e premi reset.

  2. #6 da Luca Tanganelli il 23 ottobre 2016

    Molto interessante. Ho un NodeMCU e un ESP-01 di cui ho provato i comandi at. Vogio fare delle prove per caricarci il firmware NodeMCU. Se riesco faccio sapere come.

Devi essere collegato per lasciare un commento.

  1. Ancora nessun trackback
Settorezero.com e il logo Zroid™ ©2007÷2017 Giovanni Bernardo - E' vietata la copia e la distribuzione anche parziale dei contenuti di questo sito web senza l'esplicito consenso dell'autore. I contenuti di settorezero.com sono distribuiti sotto una licenza Creative Commons Attribuzione-Non Commerciale-Non Opere derivate 2.5 Italia e sono soggetti alle condizioni definite nel disclaimer. Settorezero.com e tutti i suoi contenuti sono tutelati dalla legge sul diritto d'autore per cui i trasgressori sono perseguibili a norma di legge. Settorezero fa uso dei cookie leggi l'informativa estesa. Il tema di questo sito è basato sul tema Fusion per wordpress, realizzato originariamente da digitalnature e fa uso del plugin Wassup per il computo delle statistiche. Per contattare l'autore siete pregati di utilizzare la sezione contatti. Siamo presenti anche su Facebook e, meno assiduamente, anche su Twitter - Tumblr - Google+ - Blogspot - Youtube.
Creative Commons BY-NC-ND 2.5