Setup ESP8266 SDK RTOS con Linux ubuntu 18.04

Avrete sicuramente sentito parlare dell’ESP8266, negli ultimi anni questo chip sta spopolando fra appassionati di elettronica e progettisti del settore.
Si tratta di un chip low-cost prodotto dalla cinese Espressif Systems, integra al suo interno un potente microcontrollore e funzionalità WiFi con lo stack TCP-IP completo.
In commercio possiamo trovare tante board, in diversi formati che montano questo chip, ma in sostanza il cuore non cambia.
Personalmente ho acquistato la board nodeMCU v2 come questa e sono rimasto sorpreso dalle sue potenzialità:
nodeMCU v2 board
Integra già il convertitore USB seriale e la potete comodamente alimentare da USB, a differenza di altre dove è necessario fare adattatori vari o, ancora peggio, dove non avete a disposizione tutte le uscite.

Caratteristiche tecniche

  • Processore: microprocessore RISC L106 a 32 bit, basato su Tensilica Xtensa Diamond a 80 o 160 MHz
  • 64 KiB di RAM per le istruzioni, 96 KiB di RAM dati
  • Flash SPI esterna: da 512 KiB a 16 MB (la nodeMCU v2 ha 4MB di FLASH )
  • IEEE 802.11 b/g/n Wi-Fi
  • 16 pin GPIO
  • 1 SPI
  • 1 I²C
  • 1 Interfacce I²S con DMA (pin condivisi con GPIO)
  • 2 UART (1 con TX e RX dedicati, l’altra solo TX condiviso con GPIO)
  • 1 10-bit ADC ad approssimazioni successive

Scelta dell’ambiente di sviluppo

Il modulo nodeMCU viene spedito con già il firmware di default caricato, vi consente di programmare l’ESP8266 scrivendo sostanzialmente degli script in linguaggio Lua.
Personalmente non utilizzo questo metodo in quanto preferisco scrivere il codice direttamente in C, è sicuramente un metodo più professionale e performante.
Per scrivere il nostro software in linguaggio C abbiamo 2 strade:

  • IDE di Arduino
  • SDK Espressif + IDE Eclipse

Ho provato entrambi, l’IDE di Arduino è molto semplice da installare e utilizzare, ci sono una miriade di librerie già pronte all’uso e tanti tutorial in rete. come contro non abbiamo a disposizione il correttore di sintassi e i collegamenti automatici alle funzioni.
Se vogliamo a disposizione un vero e proprio ambienti di sviluppo con tutte le comodità che ne derivano io consiglio di usare Eclipse.

Setup SDK e toolchain

Per scrivere il firmware di un modulo ESP8266 la casa madre ci mette a disposizione 2 alternative:

  • SDK basato su FreeRTOS
  • SDK senza RTOS

Come si può intuire, il primo SDK è basato sul sistema operativo FreeRTOS, utilizzando questa tipologia avremmo a disposizione le funzionalità di un sistema operativo embedded vero e proprio: Task, semafori, mutex etc…
La seconda tipologia non è basata su nessun sistema operativo, è più leggera da eseguire e genera solitamente codice più compatto.
Teoricamente potremmo scrivere lo stesso firmware sia con che senza sistema operativo, ma in modo diverso.
Io utilizzo SDK RTOS, come prima cosa creiamo una cartella dove scaricheremo il Software Development Kit, apriamo un terminale nella nostra home directory e digitiamo

mkdir ESP8266
cd ESP8266
mkdir SDK
cd SDK
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git

Poi dobbiamo scaricare anche la toolchain necessaria alla compilazione:

wget https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-88-gde0bdc1-4.8.5.tar.gz
tar -xzf xtensa-lx106-elf-linux64-1.22.0-88-gde0bdc1-4.8.5.tar.gz

Ora abbiamo a disposizione tutto quello che ci serve per procedere alla compilazione di un progetto di esempio.

Compilazione di esempio

Copiamo un progetto di esempio nella cartella ESP8266, che useremo come cartella base per i nostri progetti:

cd ..
cp -r SDK/ESP8266_RTOS_SDK/examples/get-started/project_template .

A questo punto dobbiamo esportare nelle variabili di ambiente la variabile IDF_PATH, che rappresenta la cartella dell’SDK e aggiungere alla variabile PATH il percorso della toolchain in modo da poter utilizzare il compilatore.

export IDF_PATH=/home/luca/ESP8266/SDK/ESP8266_RTOS_SDK/
export PATH=$PATH:/home/luca/ESP8266/SDK/xtensa-lx106-elf/bin/
make menuconfig

Dopo avere eseguito il comando make menuconfig se tutto è andato a buon fine ci troveremo una finestra come questa:
finestra menuconfig
In questo menu dobbiamo settare la porta seriale utilizzata per comunicare con il nostro ESP8266 entrando nel menu “Serial flasher config” alla prima voce.
Per il resto se non sapete cosa state facendo non toccate nulla.
Ora eseguiamo il comando make e attendiamo la fine della compilazione, ci vogliono pochi istanti; se tutto è andato a buon fine e non otteniamo errori siamo pronti a scrivere il firmware sull’ESP8266, per farlo utilizziamo il comando:

make flash

Questo firmware in particolare non fa nulla di che, serve come base di partenza, ma ora potete sbizzarrirvi e provare gli altri esempi o scrivere il vostro codice.