Parliamo di come iniziare a sviluppare applicazioni di rete per il chip ESP8266 utilizzando Mongoose Embedded Web Server in Linux. Userò Ubuntu, ma tutte le cose possono essere facilmente adattate a qualsiasi distribuzione Linux.
Chi è chi
Da quando hai iniziato a leggere questo articolo, presumo che tu conosca Linux, ESP8266 e Mongoose. Quindi solo una breve introduzione.
ESP8266
Chip economico con WiFi integrato, sviluppato da Expressif. Se vuoi tuffarti più nel dettaglio, dai un'occhiata al sito ufficiale.
Mangusta
Mongoose è una libreria multiprotocollo completa con un core inferiore a 40kB sviluppata da Cesanta. Trovate modalità informazioni a riguardo sul sito Cesanta.
Linux
Davvero? :-)
Collegamento di ESP8266 al tuo computer
Ok, la prima cosa che dobbiamo fare è collegare il chip ESP8266 al tuo computer. Puoi farlo in diversi modi.
NodeMCU
Se hai un modulo NodeMCU, con il convertitore UART-USB integrato, tutto ciò che devi fare è collegare il modulo al computer tramite USB. BACIO!
Collegamento con convertitore UART-USB esterno
Se il tuo modulo ESP non ha un convertitore UART-USB interno, hai bisogno di uno esterno. Ce ne sono un sacco:cercalo su Google.
Selezionane uno che funzioni con Linux (fondamentalmente, la maggior parte di essi) e abbia un pin da 3,3 V e ricorda:la maggior parte dei convertitori UART-USB ha pin sia per 3,3 V che per 5 V ma non dovresti collegare ESP a pin 5V. Questo dispositivo non è tollerante alla tensione ed è possibile bruciare il modulo.
Ora connettiti (ESP -> Convertitore):
VCC -> 3,3 V
GND -> GND
RX0 -> TX (non RX)
TX0 -> RX
CH_PD -> 3,3 V
Connessione con Arduino
Se non hai un convertitore UART-USB, ma hai Arduino con pin da 3,3 V puoi usarlo facilmente per connettere ESP:
- Collega Arduino al computer tramite USB
- Collega il RESET di Arduino al suo GND:è necessario disabilitare il processore host, perché abbiamo bisogno solo del modulo UART-USB
- Collega ESP (ESP -> Arduino)
- VCC -> 3,3V
- GND -> GND
- RX0 -> RX0 (non TX)
- TX0 -> TX
- CH_PD -> 3,3 V
Verifica connessione
Se la tua connessione è a posto, ESP dovrebbe apparire come un nuovo dispositivo tty. Di solito, NodeMCU ed ESP collegati tramite il convertitore UART-USB appaiono come /dev/ttyUSBx (x =0, 1, 2 etc) e la versione di Arduino appare come /dev/ttyACMx (x =0, 1, 2 etc)
È possibile utilizzare il comando dmesg | grep usb per trovare il tuo dispositivo.
Ad esempio, dopo la connessione di NodeMCU vedrai qualcosa del genere:
[ 1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs
[ 1496.867745] usb 2-3.3: SerialNumber: 4202
[ 1497.900384] usbcore: registered new interface driver usbserial
[ 1497.900423] usbcore: registered new interface driver usbserial_generic
[ 1497.900457] usbserial: USB Serial support registered for generic
[ 1497.903897] usbcore: registered new interface driver cp210x
[ 1497.903989] usbserial: USB Serial support registered for cp210x
[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0
Come puoi vedere, NodeMCU è ora disponibile come /dev/ttyUSB0 .
Come controllo finale, utilizza qualsiasi terminale per connetterti a un nuovo dispositivo; Userò picocom. Questo è un terminale leggero. In Ubuntu può essere installato con:
sudo apt install picocom
Provando:
picocom /dev/ttyUSB0 -b 115200
Se tutto è a posto, dovresti vedere "Terminale pronto ” nell'output picocom.
Correzione dell'errore "Accesso negato"
Se picocom dice "Accesso negato", di solito significa che l'utente corrente non è membro del dialout gruppo:in Linux, per poter accedere alle porte seriali l'utente deve essere un membro di questo gruppo.
Corri:
sudo usermod -aG docker $USER
comando, disconnetti, accedi nuovamente e prova a connettere nuovamente ESP. "Accesso negato" dovrebbe essere sparito.
Costruire la mangusta
Scarica l'ultima versione di Mongoose da qui.
Mongoose viene fornito con un esempio per ESP8266 e RTOS SDK. Si trova qui in GitHub.
Nota:ESP8266 ha due versioni di SDK. Il primo non è un sistema operativo e il secondo è basato su RTOS. In questo articolo userò quest'ultimo. Per trovare le differenze tra loro, cerca su Google o leggi questa risposta nel forum ufficiale.
Per costruire l'esempio hai due opzioni:
- Utilizza la finestra mobile e le immagini della finestra mobile pronte all'uso
- Installa SDK e toolchain sul tuo computer
Utilizzo di Docker
Questo è più semplice e credo il modo migliore. Le immagini della finestra mobile di Cesanta contengono tutto il necessario per creare Mongoose per ESP (e non solo Mongoose, qualsiasi applicazione ESP). Quindi, non è necessario installare elementi in locale e puoi condividere facilmente il tuo codice con amici e colleghi in modo che possano creare il tuo firmware e ottenere esattamente lo stesso risultato.
La guida all'installazione della finestra mobile è disponibile qui. Prova, è davvero semplice, devi solo aggiungere il repository docker al tuo Linux e installarlo come un normale programma con apt .
Una volta installato il docker, vai alla cartella mongoose/examples/ESP8266_RTOS ed esegui build.sh
Nella prima finestra mobile di compilazione scaricherà l'immagine richiesta. Potrebbe volerci del tempo, a seconda del tuo canale Internet. Ma una volta completato build.sh nella cartella ./bin troverai due file .bin.
Questo è il firmware. Ce l'hai fatta!
Utilizzo dell'SDK locale
Se la finestra mobile è troppo semplice per te o per qualsiasi motivo desideri utilizzare strumenti installati localmente, puoi farlo anche tu.
È un po' più difficile e noioso, ma niente di troppo complicato. Soprattutto, dato che Cesanta ha creato alcuni strumenti per te e non è necessario crearli dal sorgente.
Ecco come funziona:
- Clone ESP RTOS SDK da questo repository. Il makefile di esempio lo cerca nella cartella /opt/ESP8266_RTOS_SDK, quindi puoi inserire un repository clonato in questa cartella o modificarne il percorso prima di creare l'esempio (vedi sotto).
- Scarica xtensa-lx106-elf.tar.bz2 da questa cartella pubblica.
- Decomprimi il file xtensa-lx106-elf.tar.bz2. Ad esempio, nella cartella /opt:
sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt
- Modifica la tua variabile PATH, ad esempio, se hai decompresso la toolchain nella cartella /opt usa il seguente comando:
export PATH=/opt /xtensa-lx106-elf/bin:$PERCORSO
(ti consiglio anche di aggiungere questo comando alle tue cartelle .bashrc o .profile, per mantenere le modifiche dopo il riavvio del sistema)
Ora esegui:
$ export SDK_PATH=/opt/ESP8266_RTOS_SDK # Put your path to SDK here
$ export BIN_PATH=./bin; mkdir ./bin
$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0
E ora, se tutto è installato correttamente, avrai il firmware in ./bin cartella
L'hai fatto di nuovo!
ESP lampeggiante
Sono disponibili molti strumenti per eseguire il flashing di ESP8266. Utilizzeremo esptool . Per usarlo, clona questo repository e aggiungi il percorso a esptool.py nella tua variabile PATH (questo è facoltativo e semplicemente conveniente).
Ora, disconnetti picocom, se ancora connesso (Suggerimento:premi Ctrl+A; Ctrl+D per uscire da esso) ed esegui:
esptool.py --port /dev/ttyUSB0 --baud 230400 \
write_flash --flash_mode=dio --flash_size=4m \
0x00000 ${BIN_PATH}/eagle.flash.bin \
0x20000 ${BIN_PATH}/eagle.irom0text.bin \
0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin
Nota importante: se il modulo non è un NodeMCU, è necessario collegare a terra GPIO0 prima di lampeggiare (la messa a terra GPIO0 commuta il modulo in modalità lampeggiante). Dopo aver lampeggiato, disconnetti GPIO0 da terra e riavvia ESP.
Se non si sono verificati errori, vedrai l'output in questo modo:
Connecting...
Erasing flash...
Took 0.58s to erase flash block
Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...
Erasing flash...
Took 2.02s to erase flash block
Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...
Erasing flash...
Took 0.11s to erase flash block
Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...
Leaving…
Pronto! Ora il dispositivo ha eseguito il flashing del firmware.
Primi risultati
Ora dovresti vedere apparire una rete WiFi "Mangusta". L'esempio configura un AP. Usa la password "Mangusta" per connetterti, quindi vai a http://192.168.4.1/ e vedrai una pagina di saluto "Hello, world".
Congratulazioni! Hai appena eseguito Web Server su ESP8266!
Passaggi successivi
I prossimi passi dipendono da te. È possibile utilizzare l'esempio descritto come punto di partenza.
Guarda il suo user_main.c file. Configura un punto di accesso WiFi e avvia il server web. Puoi facilmente cambiare la modalità AP in una modalità stazione (e connetterti alla tua rete WiFi) e utilizzare l'API Mongoose per implementare ciò che desideri. Questo è un modo comune per usare Mongoose, quindi puoi usare un altro esempio di Mongoose per creare il tuo programma e avere http, tcp, udp, mqtt e altre ancora più funzioni sul tuo dispositivo ESP.
Usa i documenti Espressif (per esempio questo) per imparare a controllare il modulo WiFi ESP8266 (e non solo il WiFi) e la documentazione Mongoose per scoprire le caratteristiche di Mongoose.
Punk non morti!