Lassen Sie uns darüber sprechen, wie Sie mit der Entwicklung von Netzwerkanwendungen für den ESP8266-Chip mit Mongoose Embedded Web Server unter Linux beginnen. Ich werde Ubuntu verwenden, aber alle Dinge können leicht für jede Linux-Distribution angepasst werden.
Wer ist wer
Da Sie diesen Artikel gelesen haben, gehe ich davon aus, dass Sie sich mit Linux, ESP8266 und Mongoose auskennen. Also nur eine kurze Einführung.
ESP8266
Preisgünstiger Chip mit integriertem WLAN, entwickelt von Expressif. Wenn Sie mehr ins Detail gehen möchten, besuchen Sie die offizielle Website.
Mungo
Mongoose ist eine vollständige Multiprotokollbibliothek mit einem Kern von weniger als 40 kB, die von Cesanta entwickelt wurde. Modusinformationen dazu finden Sie auf der Cesanta-Website.
Linux
Wirklich? :-)
ESP8266 mit Ihrem Computer verbinden
Ok, als erstes müssen wir den ESP8266-Chip an Ihren Computer anschließen. Sie können dies auf verschiedene Arten tun.
NodeMCU
Wenn Sie ein NodeMCU-Modul mit integriertem UART-zu-USB-Konverter haben, müssen Sie das Modul nur über USB mit dem Computer verbinden. KÜSS!
Verbindung mit externem UART-USB-Konverter
Wenn Ihr ESP-Modul keinen internen UART-USB-Konverter hat, benötigen Sie einen externen. Es gibt Unmengen davon - einfach mal googeln.
Wählen Sie einen aus, der mit Linux funktioniert (im Grunde die meisten) und einen 3,3-V-Pin hat, und denken Sie daran:Die meisten UART-USB-Konverter haben Pins für 3,3 V und 5 V, aber Sie sollten ESP nicht an 5-V-Pins anschließen. Dieses Gerät ist nicht spannungstolerant und es besteht die Möglichkeit, dass Ihr Modul durchbrennt.
Jetzt verbinden (ESP -> Converter):
VCC -> 3,3 V
GND -> GND
RX0 -> TX (nicht RX)
TX0 -> Empfang
CH_PD -> 3,3 V
Verbindung mit Arduino
Wenn Sie keinen UART-USB-Konverter haben, aber Arduino mit 3,3-V-Pins haben, können Sie ihn einfach verwenden, um ESP anzuschließen:
- Schließen Sie Arduino über USB an den Computer an
- Verbinden Sie Arduinos RESET mit seinem GND:Es ist erforderlich, um den Host-Prozessor zu deaktivieren, da wir nur ein UART-USB-Modul benötigen
- ESP verbinden (ESP -> Arduino)
- VCC -> 3,3 V
- Masse -> Masse
- RX0 -> RX0 (nicht TX)
- TX0 -> TX
- CH_PD -> 3,3 V
Verbindung wird überprüft
Wenn Ihre Verbindung in Ordnung ist, sollte ESP als neues tty-Gerät angezeigt werden. Normalerweise erscheinen NodeMCU und ESP, die über einen UART-USB-Konverter verbunden sind, als /dev/ttyUSBx (x =0, 1, 2 usw.) und die Arduino-Version erscheint als /dev/ttyACMx (x =0, 1, 2 usw.)
Sie können den Befehl dmesg | verwenden grep usb um Ihr Gerät zu finden.
Zum Beispiel sehen Sie nach dem Anschluss von NodeMCU so etwas:
[ 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
Wie Sie sehen können, ist NodeMCU jetzt als /dev/ttyUSB0 verfügbar .
Verwenden Sie zur abschließenden Überprüfung ein beliebiges Endgerät, um eine Verbindung zu einem neuen Gerät herzustellen. Ich werde picocom verwenden. Dies ist ein leichtes Terminal. In Ubuntu kann es installiert werden mit:
sudo apt install picocom
Versuchen:
picocom /dev/ttyUSB0 -b 115200
Wenn alles in Ordnung ist, sollten Sie „Terminal bereit sehen ” in der picocom-Ausgabe.
Behebung des Fehlers „Zugriff verweigert“
Wenn picocom „Zugriff verweigert“ sagt, bedeutet das normalerweise, dass der aktuelle Benutzer kein Mitglied des Dialouts ist Gruppe:Unter Linux muss der Benutzer Mitglied dieser Gruppe sein, um auf serielle Ports zugreifen zu können.
Ausführen:
sudo usermod -aG docker $USER
Befehl, abmelden, wieder anmelden und versuchen, ESP erneut zu verbinden. „Zugriff verweigert“ sollte verschwunden sein.
Mongoose bauen
Laden Sie hier die neueste Mongoose-Version herunter.
Mongoose wird mit einem Beispiel für ESP8266 und RTOS SDK ausgeliefert. Es befindet sich hier in GitHub.
Hinweis:ESP8266 hat zwei SDK-Versionen. Das erste ist ein Nicht-Betriebssystem und das zweite ist RTOS-basiert. In diesem Artikel verwende ich letzteres. Um die Unterschiede zwischen ihnen zu finden, googeln Sie oder lesen Sie diese Antwort im offiziellen Forum.
Um das Beispiel zu erstellen, haben Sie zwei Möglichkeiten:
- Verwenden Sie Docker und gebrauchsfertige Docker-Bilder
- Installieren Sie das SDK und die Toolchain auf Ihrem Computer
Verwendung von Docker
Das ist einfacher und meiner Meinung nach der bessere Weg. Die Docker-Images von Cesanta enthalten alles, was Sie zum Erstellen von Mongoose für ESP benötigen (und nicht nur Mongoose – jede ESP-Anwendung). Sie müssen also nichts lokal installieren und können Ihren Code ganz einfach mit Freunden und Kollegen teilen, damit diese Ihre Firmware erstellen und genau das gleiche Ergebnis erzielen können.
Die Docker-Installationsanleitung ist hier verfügbar. Probieren Sie es aus, es ist wirklich einfach, Sie müssen nur das Docker-Repository zu Ihrem Linux hinzufügen und es wie ein gewöhnliches Programm mit apt installieren .
Sobald Docker installiert ist, gehen Sie zum Ordner mongoose/examples/ESP8266_RTOS und führen Sie build.sh aus
Beim ersten Build lädt Docker das erforderliche Image herunter. Je nach Internetkanal kann es eine Weile dauern. Aber sobald build.sh im Ordner ./bin abgeschlossen ist, finden Sie zwei .bin-Dateien.
Das ist die Firmware. Du hast das geschafft!
Lokales SDK verwenden
Wenn Ihnen Docker zu einfach ist oder Sie aus irgendeinem Grund lokal installierte Tools verwenden möchten, können Sie dies auch tun.
Es ist ein bisschen schwieriger und langweiliger, aber nicht zu kompliziert. Vor allem, da Cesanta einige Tools für Sie entwickelt hat und Sie sie nicht aus dem Quellcode erstellen müssen.
So funktioniert es:
- Klonen Sie ESP RTOS SDK aus diesem Repo. Das Beispiel-Makefile sucht danach im Ordner /opt/ESP8266_RTOS_SDK, daher können Sie entweder ein geklontes Repo in diesen Ordner legen oder den Pfad dorthin ändern, bevor Sie das Beispiel erstellen (siehe unten).
- Lade xtensa-lx106-elf.tar.bz2 aus diesem öffentlichen Ordner herunter.
- Entpacken Sie die Datei xtensa-lx106-elf.tar.bz2. Zum Beispiel in den Ordner /opt:
sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt
- Ändern Sie Ihre PATH-Variable, wenn Sie beispielsweise die Toolchain in den /opt-Ordner entpackt haben, verwenden Sie den folgenden Befehl:
export PATH=/opt /xtensa-lx106-elf/bin:$PATH
(Außerdem würde ich empfehlen, diesen Befehl zu Ihren .bashrc- oder .profile-Ordnern hinzuzufügen, um die Änderungen nach dem Systemneustart beizubehalten)
Führen Sie nun Folgendes aus:
$ 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
Und jetzt, wenn alles richtig installiert ist, haben Sie die Firmware in ./bin Ordner
Du hast es wieder geschafft!
Flashing ESP
Es gibt viele Tools zum Flashen von ESP8266. Wir werden esptool verwenden . Um es zu verwenden, klonen Sie dieses Repo und fügen Sie den Pfad zu esptool.py in Ihre PATH-Variable ein (dies ist optional und einfach praktisch).
Trennen Sie jetzt picocom, falls es noch verbunden ist (Tipp:drücken Sie Strg+A; Strg+D, um es zu verlassen) und führen Sie Folgendes aus:
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
Wichtiger Hinweis: Wenn Ihr Modul keine NodeMCU ist, müssen Sie GPIO0 vor dem Blinken erden (das Erden von GPIO0 schaltet das Modul in den Blinkmodus). Nach dem Flashen GPIO0 von Masse trennen und ESP neu starten.
Wenn keine Fehler aufgetreten sind, sehen Sie die Ausgabe wie folgt:
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…
Bereit! Jetzt wird das Gerät mit Ihrer Firmware geflasht.
Erste Ergebnisse
Jetzt sollte ein „Mongoose“-WLAN-Netzwerk erscheinen. Das Beispiel richtet einen AP ein. Verwenden Sie das Passwort „Mongoose“, um eine Verbindung herzustellen, und navigieren Sie dann zu http://192.168.4.1/, und Sie sehen eine „Hello, world“-Begrüßungsseite.
Herzliche Glückwünsche! Sie führen den Webserver einfach auf ESP8266 aus!
Nächste Schritte
Die nächsten Schritte hängen von Ihnen ab. Sie können das beschriebene Beispiel als Ausgangspunkt verwenden.
Sehen Sie sich die Datei user_main.c an Datei. Es richtet einen WLAN-Zugangspunkt ein und startet den Webserver. Sie können den AP-Modus einfach in einen Stationsmodus ändern (und eine Verbindung zu Ihrem WiFi-Netzwerk herstellen) und die Mongoose-API verwenden, um zu implementieren, was Sie wollen. Dies ist eine übliche Art, Mongoose zu verwenden, Sie können also ein anderes Mongoose-Beispiel verwenden, um Ihr Programm zu erstellen und http, tcp, udp, mqtt und mehr weitere Funktionen auf Ihrem ESP-Gerät zu haben.
Verwenden Sie Espressif-Dokumente (z. B. dieses), um zu erfahren, wie das ESP8266-WLAN-Modul (und nicht nur WLAN) geregelt wird, und die Mongoose-Dokumentation, um Mongoose-Funktionen zu entdecken.
Punks sind nicht tot!