ESP8266, Sviluppiamo firmware con Eclipse

Eclipse è un ambiente di sviluppo multi-piattaforma e multi-linguaggio molto diffuso. Viene utilizzato principalmente per programmare in Java e C/C++, ma con plugin aggiuntivi possiamo espandere le sue potenzialità a molti altri linguaggi.
Essendo multi-piattaforma funziona sia su Linux che su Windows, a 32 e 64 bit.

Eclipse necessita di Java (JRE) per funzionare, quindi prima di procedere è fondamentale installarlo.

Download

Scarichiamo la versione di Eclipse che ci interessa a questo link io utilizzo la versione a 64 bit.
Ora estraiamo il contenuto nella nostra cartella:

tar -zxf eclipse-inst-linux64.tar.gz

Installazione

Entriamo nella cartella appena estratta ed eseguiamo il file eclipse-inst

cd eclipse-installer
./eclipse-inst

ci troveremo di fronte ad una finestra che mostra le varie possibilità:
Eclipse setup
Noi sceglieremo “Eclipse IDE for C/C++ Developer” e poi “install” alla schermata successiva.
Ora il programma di installazione scaricherà dalla rete i file necessari, terminata questa fase abbiamo il nostro IDE pronto da eseguire.

Primo progetto per l’ESP8266

Questa è la schermata che ci troviamo davanti una volta avviato:
Eclipse
partendo dall’esempio creato nel precedente articolo andiamo a creare il progetto con Eclipse.
Andiamo su “File”, “New” e poi “Makefile Project with existing code”, con il bottone “Browse…” andiamo a recuperare la cartella dell’esempio “project_template”, ora clicchiamo su “Finish”.
In alto a sinistra troveremo il nostro nuovo progetto importato, tuttavia ora non è utilizzabile, dobbiamo dire ad Eclipse come fare a compilarlo.
Clicchiamo con il destro sul progetto e poi su “properties”, andiamo su “C/C++ Build” e dentro ad “Environment” settiamo le variabili IDF_PATH e quella della toolchain, come nella foto sotto.
La variabile IDF_PATH è richiesta dal sistema di compilazione dei progetti e indica dove di trova la directory del Software Development Kit, mentre per permettere di utilizzare il compilatore dobbiamo aggiungere al path di sistema il suo percorso.
Eclipse project properties
da notare anche il flag sotto impostato su “Replace native environment with specified one”, clicchiamo su Apply.
Impostiamo la cartella dei file include in “C/C++ General”, “Paths and Symbols” come indicato sotto.
Eclipse paths
Ora possiamo cliccare su “Apply and close” e finalmente provare a compilare il nostro esempio, andando su Project, prima facciamo un “Clean” e poi “Build Project”, dovremmo vedere sulla console di Eclipse dopo pochi istanti una scritta blu simile a quella sotto.
Build succesfully

Se vogliamo rendere le operazioni di clean/build e la scrittura sul chip molo più comoda e rapida possiamo impostare delle “Build Target” automatiche, che eseguono per noi dei comandi specifici, semplicemente con un click
In alto a destra troviamo il tab “Build”, selezioniamolo e con il destro sul progetto clicchiamo “New”, dobbiamo creare i 3 comandi come illustrato nelle finestre sotto.
null

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.