Entwicklung von Netzwerkanwendungen für ESP8266 mit Mongoose unter Linux

Lassen Sie uns darüber sprechen, wie man mit der Entwicklung von Netzwerkanwendungen für den ESP8266 Chip mit Mongoose Embedded Web Server unter Linux beginnt. Ich werde Ubuntu verwenden, aber alle Dinge können leicht an jede Linux-Distribution angepasst werden.

Seit du angefangen hast, diesen Artikel zu lesen, nehme ich an, dass du etwas über Linux, ESP8266 und Mongoose weißt. Also nur eine kurze Einführung.

ESP8266

Preiswerter Chip mit integriertem WiFi, entwickelt von Expressif. Wenn du mehr ins Detail gehen möchtest, schau dir die offizielle Seite an.

Manguste

Mongoose ist eine von Cesanta entwickelte komplette Multiprotokoll-Bibliothek mit einem Kern von unter 40kB. Informationen zum Modus finden Sie auf der Website von Cesanta.

Linux

Wirklich? 🙂

Anschließen von ESP8266 an Ihren Computer

Ok, das erste, was wir tun müssen, ist, den ESP8266 Chip mit Ihrem Computer zu verbinden. Du kannst es auf verschiedene Weise tun.

NodeMCU

Wenn Sie ein NodeMCU-Modul haben, müssen Sie mit dem integrierten UART-to-USB-Konverter nur das Modul über USB mit dem Computer verbinden. KISS!

Anschluss an einen externen UART-USB-Konverter

Wenn Ihr ESP-Modul keinen internen UART-USB-Konverter hat, benötigen Sie einen externen. Es gibt eine Menge davon – einfach googlen.

Wählen Sie einen, der mit Linux funktioniert (im Grunde genommen die meisten von ihnen) und einen 3,3V-Pin hat und denken Sie daran: Die meisten UART-USB-Konverter haben Pins für 3,3V und 5V, aber Sie sollten ESP nicht an 5V-Pins anschließen. Dieses Gerät ist nicht spannungsfest und es ist möglich, dass Ihr Modul ausbrennt.

Verbinden Sie nun (ESP -> Konverter):

VCC -> 3.3V

GND -> GND -> GND

RX0 -> TX (nicht RX)

TX0 -> RX

CH_PD -> 3.3V

Verbindung mit Arduino herstellen

Wenn Sie keinen UART-USB-Konverter haben, aber Arduino mit 3,3V-Pins, können Sie ihn einfach zum Anschluss von ESP verwenden:

  1. Arduino über USB mit dem Computer verbinden
  2. Verbinden Sie Arduino’s RESET mit seinem GND: Es ist erforderlich, den Host-Prozessor zu deaktivieren, da wir nur UART-USB-Modul benötigen.
  3. ESP anschließen (ESP -> Arduino)
    1. VCC -> 3.3V
    2. GND -> GND -> GND
    3. RX0 -> RX0 (nicht TX)
    4. TX0 -> TX
    5. CH_PD -> 3.3V

Überprüfen der Verbindung

Wenn Ihre Verbindung in Ordnung ist, sollte ESP als neues tty-Gerät erscheinen. Normalerweise erscheinen NodeMCU und ESP, die über den UART-USB-Konverter verbunden sind, als /dev/ttyUSBx (x = 0, 1, 2 usw.) und Arduinos Version erscheint als /dev/ttyACMx (x = 0, 1, 2 usw.).

Sie können den Befehl dmesg | grep usb verwenden, um Ihr Gerät zu finden.

Zum Beispiel werden Sie nach dem Anschluss von NodeMCU so etwas sehen:

 

[  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 du sehen kannst, ist NodeMCU jetzt als /dev/ttyUSB0 verfügbar.

Zur letzten Kontrolle verwenden Sie ein beliebiges Terminal, um sich mit einem neuen Gerät zu verbinden; ich werde picocom verwenden. Dies ist ein leichtes Terminal. In Ubuntu kann es mit installiert werden:

sudo apt install picocom

Ich versuche es:

picocom /dev/ttyUSB0 -b 115200

Wenn alles in Ordnung ist, sollten Sie „ Terminal ready „ im picocom-Ausgang sehen.

Behebung des Fehlers „Zugriff verweigert“.

Wenn picocom „Access Denied“ sagt, bedeutet das in der Regel, dass der aktuelle Benutzer nicht Mitglied der Dialout-Gruppe ist: Unter Linux muss der Benutzer, um auf serielle Schnittstellen zugreifen zu können, Mitglied dieser Gruppe sein.

Lauf:

sudo usermod -aG docker $USER

Befehl, Abmeldung, Wiedereinloggen und versuchen, ESP wieder zu verbinden, „Access denied“ sollte weg sein.

Gebäude Mongoose

Laden Sie die neueste Mongoose Version von hier herunter.

Mongoose wird mit einem Beispiel für ESP8266 und RTOS SDK ausgeliefert. Es befindet sich hier in GitHub.

Hinweis: ESP8266 hat zwei Versionen des SDK. Das erste ist ein Nicht-OS und das zweite ist RTOS-basiert. In diesem Artikel werde ich letzteres verwenden. Um die Unterschiede zwischen ihnen zu finden, googeln oder lesen Sie diese Antwort im offiziellen Forum.

Um das Beispiel zu erstellen, hast du zwei Möglichkeiten:

  1. Verwenden Sie Docker und gebrauchsfertige Docker-Images.
  2. SDK und Toolchain auf Ihrem Computer installieren

Verwendung des Dockers

Das ist einfacher und ich glaube, der bessere Weg. Die Dockbilder von Cesanta enthalten alles, was Sie benötigen, um Mongoose for ESP zu bauen (und nicht nur Mongoose only – jede ESP-Anwendung). Sie müssen also nichts lokal installieren und können Ihren Code leicht mit Freunden und Kollegen teilen, damit sie Ihre Firmware erstellen und genau das gleiche Ergebnis erzielen können.

Die Installationsanleitung für den Docker finden Sie hier. Versuchen Sie es, 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 das Docker installiert ist, gehen Sie in den Ordner mongoose/examples/ESP8266_RTOS und führen Sie build.sh aus.

Beim ersten Build lädt das Dock das gewünschte Image herunter. Es kann eine Weile dauern, abhängig von Ihrem Internet-Kanal. Aber sobald build.sh im Ordner ./bin fertig ist, findest du zwei.bin-Dateien.

Das ist die Firmware. Du hast das getan!

Verwendung des lokalen SDKs

Wenn der Docker für Sie zu einfach ist oder Sie aus irgendeinem Grund lokal installierte Tools verwenden möchten, können Sie das auch tun.

Es ist etwas härter und langweilig, aber nichts zu kompliziert. Vor allem, wenn man bedenkt, dass Cesanta einige Tools für Sie entwickelt hat und Sie diese nicht aus dem Quellcode erstellen müssen.

So funktioniert es:

  1. Klonen Sie ESP RTOS SDK aus diesem Repo. Das Beispiel-Makefile sucht danach im Ordner /opt/ESP8266_RTOS_SDK, so dass Sie entweder einen geklonten Repo in diesen Ordner legen oder den Pfad zu ihm ändern können, bevor Sie das Beispiel erstellen (siehe unten).
  2. Laden Sie xtensa-lx106-elf.tar.bz2 aus diesem öffentlichen Ordner herunter.
  3. 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
  4. Ändern Sie Ihre Variable PATH, z.B. wenn Sie die Toolchain in den Ordner /opt entpackt haben, verwenden Sie folgenden Befehl:export PATH=/opt/xtensa-lx106-elf/bin:$PATH

(auch würde ich empfehlen, diesen Befehl zu deinen.bashrc- oder.profile-Ordnern hinzuzufügen, um die Änderungen nach einem Systemneustart beizubehalten).

Jetzt lauf weg:

$ 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 im Ordner./bin.

Du hast es schon wieder getan!

Blinkender ESP

Es gibt viele Tools, um ESP8266 zu flashen. Wir werden esptool verwenden. Um es zu verwenden, klonen Sie diesen Repo und fügen Sie den Pfad zu esptool.py in Ihrer PATH-Variablen hinzu (dies ist optional und nur bequem).

Trennen Sie nun picocom, falls noch verbunden (Hinweis: Drücken Sie Strg+A; Strg+D, um es zu verlassen) und starten Sie:

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 Flashen erden (Erdung GPIO0 schaltet das Modul in den Blinkmodus). Nach dem Blinken GPIO0 von der Masse trennen und ESP neu starten.

Wenn keine Fehler aufgetreten sind, sehen Sie die Ausgabe so:

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! Nun wird das Gerät mit Ihrer Firmware geflasht.

Erste Ergebnisse

Nun sollten Sie ein „Mongoose“ WiFi-Netzwerk sehen. 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 Begrüßungsseite „Hello, world“.

Herzlichen Glückwunsch! Du hast gerade Web Server auf ESP8266 ausgeführt!

Nächste Schritte

Die nächsten Schritte hängen von dir ab. Sie können das beschriebene Beispiel als Ausgangspunkt verwenden.

Schauen Sie sich die Datei user_main.c an. Es richtet einen WiFi-Zugangspunkt ein und startet den Webserver. Sie können den AP-Modus ganz einfach auf einen Stationsmodus umstellen (und sich mit Ihrem WiFi-Netzwerk verbinden) und die Mongoose API verwenden, um alles zu implementieren, was Sie wollen. Dies ist eine gängige Methode, um Mongoose zu verwenden, so dass Sie ein anderes Mongoose Beispiel verwenden können, 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 lernen, wie Sie das ESP8266 WiFi-Modul (und nicht nur das WiFi-Modul) und die Mongoose-Dokumentation beherrschen, um die Merkmale der Mongoose zu entdecken.

Punks nicht tot!

Das könnte dich auch interessieren …