Comunicazione ESP-01 & Arduino Nano
Criticità hardware tra ESP8266 e Arduino Nano
Alimentazione ESP8266
L' ESP 8266 richiede una tensione di alimentazione di 3.3V e in trasmissione arriva ad assorbire intorno ai 200mA. Anche se un Arduino Nano ha un'uscita a 3.3 volt, questo non riesce ad erorare la corrente richiesta dall'ESP8266 (eroga massimo 80mA).
Questa problematica è difficile da verificare perché si manifesta con un riavvio sporadico dell' ESP01. Dico "sporadico" perché solo in alcuni casi l'ESP assorbe tanto e quindi solo in questi casi si riavvia.
Soluzione
Ho utilizzato uno stabilizzatore di tensione AMS1117. L'AMS1117 ha tre piedini:
- IN - da collegare a positgivo di alimentazione di 5 volt
- OUT - qui troviamo la tensione di 3.3 Volt
- GND - da collegare al negativo di alimentazione.
Ovviamente i 3.3 volt saranno disponibili tra GND e OUT.
Livelli di tensione
Idealizzando, i livelli di tensione di Arduino Nano per gli stati Alto e Basso sono rispettivamente di + 5 volt oppure 0. Per l'ESP8266 invece sono di 3.3 Volt oppure zero. Serve quindi un modo per abbassare questi livelli
Soluzione
In rete si trovano diversi modi:
- utilizzo di diodi
- partitori resistivi
- utilizzo di level converter
Io ho optato per il terzo metodo
Comunicazione tra ESP8266 e ArduinoNano
La comunicazione tra i due avviene tramite la seriale.
Ricordando la piedinatura dell'ESP01:

Normalmente il piedino TX dell'ESp01 va collegato al piedino RX dell' Arduino Nano. Analogamente al pieno RX dell'ESP01 che va collegato al piedino TX dell'Arduino Nano.
Qui arrivano due problemi. Il primo è che TX e RX dell'Arduino vengono utilizzati dal "Monitor Seriale" dell'ide di Arduino e quindi, se vogliamo far stampare qualcosa sul monitor seriale dell'IDE non possono essere utilizzati.
Per ovviare a questa situazione possiamo utilizzare la libreria SoftwareSerial (inclusa nell'IDE di Arduino) che permette di emulare la seriale (quindi le connessioni TX e RX di Arduino) su altri piedini.
Starai pensando: "Bene! Problema risolto!". No, non è risolto perché la "Software Serial" ha un limite di 9600 bps mentre gli ESP01 sono impostati di fabbrica a 115200bps. In seguito ti mostrerò come abbassare questa velocità.
Questa complicazione non si verifica su modelli come Arduino Leonardo, Micro o Mega che dispondono di più seriali.
Comunicazione con l'ESP8266
L'ESP 8266 può funzionare in due modalità:
- AT Mode (detta anche "Command mode")
- Altri (Es: LUA) dipendentemente dal firmware caricato
La prima prevede l'utilizzo dei Comandi AT. I comandi AT sono praticamente delle stringhe e ogni stringa individua un comando particolare che sarà interpretato dall'ESP01. Personalmente li ritengo molto comodi per iniziare e per questo li vedremo tra poco
La lista dei comandi AT è disponibile al seguente indirizzo:
https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf
Invio di comandi AT all'ESP01
L'invio di comandi AT può essere fatto tramite l'IDE di Arduino.
Il modulo ESP01 può essere connesso all'USB del pc tramite un adattatore seriale o tramite un Arduino (in questo caso l'Arduino farà da passacarte).
Il mio consiglio è di spendere questa manciata di euro per l'adattatore seriale perché ci semplificherà la vita.
Apri l'IDE di Arduino e aggiungi la scheda
1) Vai su File -> Impostazioni
2) Nella casella di testo "URL aggiuntive per il gestore di schede" aggiungi:
https://arduino.esp8266.com/stable/package_esp8266com_index.json
3) Vai su Strumenti -> Scheda -> Gestore Scheda e aggiungi "ESP8266":
4) Poi selezionala
5) Adesso connetti il modulo ESP-01 nell'adattatore e l'adattatore nell'USB del PC.
6) Apri il serial monitor, imposta la velocità a 115200 come nella figura seguente e scrivi "AT" (senza le virgolette!) e poi "AT+GMR" per ottenere la versione del firmware
ATTENZIONE: NON USARE AT+IPR. Altrimenti devi buttare il modulo!
Se vuoi continuare su questa modalità ti consiglio questo link, ma come anticipato non è questa la modalità che preferisco.
Utilizzo della libreria WiFiEsp
In giro per il web si trovano davvero tantissime librerie pronte all'uso che di fatto sono un wrapper per i comandi AT.
Una di queste è WiFiEsp di Bruno Portaluri
Altre modalità di funzionamento
Il modulo ESP8266 contiene un processore (più potente di quello montato sulla scheda Arduino). Di fatto, il funzionamento "comandi AT", dipende dal firmware caricato.
Inoltre, il modulo ESP-01 espone solo due porte dell'ESP8266 che possono essere trasformate in I2C tramite la libreria "Wire.h".
Quindi possiamo caricare un programma sull'ESP-8266 uno sull'Arduino e farli comunicare come più ci viene comodo.