Udvikle netværksapplikationer til ESP8266 ved hjælp af Mongoose i Linux

Udvikle netværksapplikationer til ESP8266 ved hjælp af Mongoose i Linux

Lad os tale om, hvordan man begynder at udvikle netværksapplikationer til ESP8266-chip ved hjælp af Mongoose Embedded Web Server i Linux. Jeg vil bruge Ubuntu, men alle ting kan let tilpasses til Linux distribution.

Hvem er hvem

Siden du begyndte at læse denne artikel, antager jeg, at du ved om Linux, ESP8266 og Mongoose. Så kun en kort introduktion.

ESP8266

Billig chip med integreret WiFi, udviklet af Expressif. Hvis du vil dykke ind i flere detaljer, tjek den officielle site.

Mongoose

Mongoose er et komplet multi-protocol bibliotek med en kerne af under 40kB udviklet af Cesanta. Find tilstandsinformation om det på Cesanta websted.

Linux

Virkelig? ????

Tilslutning af ESP8266 til din computer

Ok, det første vi skal gøre er at forbinde ESP8266-chippen til din computer. Du kan gøre det på flere måder.

NodeMCU

Hvis du har et NodeMCU-modul, er det kun nødvendigt at tilslutte modulet til computeren via USB med ombord-til-USB-konverter. KYS!

Tilslutning til ekstern UART-USB-konverter

Hvis dit ESP-modul ikke har en intern UART-USB-konverter, skal du bruge en ekstern enhed. Der er mange af dem - bare Google den.

Vælg en, der virker med Linux (stort set de fleste) og har en 3.3V-pin og husk: De fleste af UART-USB-konverterne har stifter til både 3.3V og 5V, men du bør ikke forbinde ESP til 5V-stifter. Denne enhed er ikke spændingstolerant, og det er muligt at udbrænde dit modul.

Tilslut nu (ESP -> Converter):

VCC -> 3.3V

GND -> GND

RX0 -> TX (ikke RX)

TX0 -> RX

CH_PD -> 3.3V

Tilslutning med Arduino

Hvis du ikke har en UART-USB-konverter, men har Arduino med 3.3V-ben, kan du nemt bruge den til at forbinde ESP:

  1. Slut Arduino til computer via USB
  2. Slut Arduino's RESET til sin GND: det er nødvendigt at deaktivere værtprocessoren, fordi vi kun har brug for UART-USB-modul
  3. Tilslut ESP (ESP -> Arduino)
    1. VCC -> 3.3V
    2. GND -> GND
    3. RX0 -> RX0 (ikke TX)
    4. TX0 -> TX
    5. CH_PD -> 3.3V

Bekræfter forbindelse

Hvis din forbindelse er ok, skal ESP vises som en ny tty-enhed. Normalt vises NodeMCU og ESP via UART-USB konverter som / dev / ttyUSBx (x = 0, 1, 2 osv.) Og Arduino version vises som / dev / ttyACMx (x = 0, 1, 2 osv.)

Du kan bruge kommandoen dmesg | greb usb for at finde din enhed.

For eksempel, efter tilslutning af NodeMCU kan du se noget sådan:

[1496.765417] usb 2-3.3: Ny fuldhastighed USB-enhedsnummer 15 ved hjælp af xhci_hcd

[1496.867729] usb 2-3.3: Ny USB-enhed fundet, idVendor = 10c4, idProduct = ea60

[1496.867736] usb 2-3.3: Nye USB-enhedsstrenge: Mfr = 1, Product = 2, SerialNumber = 3

[1496.867740] usb 2-3.3: Produkt: CP2102 USB til UART Bridge Controller

[1496.867743] usb 2-3.3: Producent: Silicon Labs

[1496.867745] usb 2-3.3: SerialNumber: 4202

[1497.900384] usbcore: registreret ny brugergrænseflade driver usbserial

[1497.900423] usbcore: Registreret ny interface driver usbserial_generic

[1497.900457] usbserial: USB Serial support registreret for generisk

[1497.903897] usbcore: Registreret ny interface driver cp210x

[1497.903989] usbserial: USB Serial support registreret for cp210x

[1497.904382] usb 2-3.3: cp210x konverter er nu knyttet til ttyUSB0

Som du kan se, er NodeMCU nu tilgængelig som / dev / ttyUSB0.

Som en endelig check skal du bruge en hvilken som helst terminal til at oprette forbindelse til en ny enhed; Jeg skal bruge picocom. Dette er en letvægts terminal. I Ubuntu kan den installeres med:

sudo apt installere picocom

Forsøger:

picocom / dev / ttyUSB0 -b 115200

Hvis alt er ok, skal du se "Terminal klar" i picocom output.

Fixing "Access Denied" -fejl

Hvis picocom siger "Access Denied", som normalt betyder, at den nuværende bruger ikke er medlem af dialoutgruppen: I Linux skal brugeren være medlem af denne gruppe for at få adgang til serielle porte.

Løb:

sudo usermod -aG docker $ USER

kommando, log ud, log ind igen og prøv at forbinde ESP igen. "Adgang nægtet" burde være væk.

Bygning Mongoose

Download nyeste Mongoose udgivelse fra her.

Mongoose leveres med et eksempel på ESP8266 og RTOS SDK. Den er fundet her i GitHub.

Bemærk: ESP8266 har to versioner af SDK. Den første er en ikke-OS, og den anden er RTOS-baseret. I denne artikel bruger jeg sidstnævnte. For at finde forskellene mellem dem, google eller læs denne svar på det officielle forum.

For at bygge eksemplet har du to muligheder:

  1. Brug docker og brugbare dockerbilleder
  2. Installer SDK og toolchain på din computer

Brug af Docker

Dette er enklere, og jeg tror på den bedre måde. Cesantas dockerbilleder indeholder alt hvad du behøver for at opbygge Mongoose til ESP (og ikke kun Mongoose - enhver ESP-applikation). Så du behøver ikke installere ting lokalt, og du kan nemt dele din kode med venner og kolleger, så de vil kunne bygge din firmware og få det samme resultat.

Docker installationsvejledningen er tilgængelig her. Prøv det, det er virkelig nemt, du skal blot tilføje docker repository til din Linux og installere det som et almindeligt program med apt.

Når docker er installeret, skal du gå til desmerdyr / eksempler / ESP8266_RTOS mappe og kør build.sh

På den første build-docker downloades det krævede billede. Det kan tage et stykke tid, afhængigt af din internetkanal. Men når build.sh er afsluttet i ./bin mappe, finder du to .bin-filer.

Det er firmware. Du gjorde dette!

Brug af lokal SDK

Hvis docker er for simpelt for dig eller af en eller anden grund, du vil bruge lokalt installerede værktøjer, kan du også gøre det.

Det er lidt sværere og kedeligt, men intet for kompliceret. Især, da Cesanta byggede nogle værktøjer til dig, og du behøver ikke at bygge dem fra kilden.

Sådan fungerer det:

  1. Clone ESP RTOS SDK fra denne repo. Eksemplet makefile leder efter det i mappen / opt / ESP8266_RTOS_SDK, så du kan enten sætte en klonet repo i denne mappe eller ændre banen til den, før du bygger eksemplet (se nedenfor).
  2. Download xtensa-lx106-elf.tar.bz2 fra denne offentlig mappe.
  3. Pak ud xtensa-lx106-elf.tar.bz2 filen. For eksempel til / opt mappe:
    sudo tjære -xvf xtensa-lx106-elf.tar.bz2 -C / opt
  4. Ændr din PATH-variabel, for eksempel, den udpakket værktøjskæde til / opt-mappe bruger følgende kommando:
    eksport PATH = / opt / xtensa-lx106-elf / bin: $ PATH

(jeg vil også anbefale at tilføje denne kommando til dine .bashrc eller .profile mapper, for at holde ændringerne efter system genstart)

Kør nu:

$ eksport SDK_PATH = / opt / ESP8266_RTOS_SDK # Sæt din vej til SDK her

$ eksport BIN_PATH =. / bin; mkdir ./bin

$ gør rent lav BOOT = ingen APP = 0 SPI_SPEED = 40 SPI_MODE = dio SPI_SIZE_MAP = 0

Og nu, hvis alt er installeret korrekt, har du firmwaren i ./bin-mappen

Du gjorde det igen!

Blinkende ESP

Der er mange værktøjer til rådighed til at blinke ESP8266. Vi skal bruge esptool. For at bruge det klon denne repo og tilføj stien til esptool.py i din PATH-variabel (dette er valgfrit og bare praktisk).

Afbryd forbindelsen til picocom, hvis den stadig er forbundet (Hint: tryk Ctrl + A; Ctrl + D for at afslutte det) og kør:

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

Vigtig note: Hvis dit modul ikke er en NodeMCU, skal du gemme GPIO0 før du blinker (jordforbindelse GPIO0 skifter modulet til blinkende tilstand). Efter blinking skal du afbryde GPIO0 fra jorden og genstarte ESP.

Hvis der ikke opstod nogen fejl, kan du se udgangen som denne:

Tilslutning ... Sletning flash ... Tog 0.58'er for at slette flashblok Skrev 35840 bytes ved 0x00000000 i 1.8 sekunder (157.5 kbit / s) ... Sletning flash ... Tog 2.02'er for at slette flashblok Skrev 301056 bytes ved 0x00020000 i 15.4 sekunder (156.7 kbit / s) ... Sletning flash ... Tog 0.11'er for at slette flashblok Skrev 1024 bytes ved 0x0007e000 i 0.1 sekunder (163.5 kbit / s) ... Forladelse ...

Parat! Nu blinker enheden med din firmware.

Første resultater

Nu skal du se et "Mongoose" WiFi netværk vises. Eksemplet opretter en AP. Brug adgangskode "Mongoose" til at forbinde, og navigér derefter til http: // 192.168.4.1 /, og du vil se en "Hej verden" hilsen side.

Tillykke! Du kører bare Webserver på ESP8266!

Næste skridt

Næste trin afhænger af dig. Du kan bruge det beskrevne eksempel som udgangspunkt.

Kig til filen user_main.c. Det opretter et WiFi-adgangspunkt og starter webserver. Du kan nemt ændre AP-tilstanden til en stationstilstand (og oprette forbindelse til dit WiFi-netværk) og bruge Mongoose API'en til at implementere, hvad du vil. Dette er en almindelig måde at bruge Mongoose på, så du kan bruge en anden Mongoose eksempel at opbygge dit program og have http, tcp, udp, mqtt og flere flere funktioner på din ESP-enhed.

Brug Espressif dokumenter (for eksempel denne en) for at lære at regere ESP8266 WiFi-modul (og ikke kun WiFi) og Mongoose dokumentation at opdage mongoose-funktioner.

Punkere ikke døde!

Kilde

Giv en kommentar

Dette websted bruger Akismet til at reducere spam. Lær, hvordan dine kommentardata behandles.