Comunicazione ESP-01 & Arduino Nano

In questo articolo cercherò di fare chiarezza sulla comunicazione tra un ESP-01 (che come sappiamo monta il chip ESP8266) e un 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:

  1. utilizzo di diodi
  2. partitori resistivi
  3. 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:

Esp82 pins

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":

Arduino IDE gestore schede

4) Poi selezionala

Generic esp8266 selection

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

Monitor seriale

 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.