GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Entwickeln Sie Netzwerkanwendungen für ESP8266 mit Mongoose unter Linux

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:

  1. Schließen Sie Arduino über USB an den Computer an
  2. 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
  3. ESP verbinden (ESP -> Arduino)
    1. VCC -> 3,3 V
    2. Masse -> Masse
    3. RX0 -> RX0 (nicht TX)
    4. TX0 -> TX
    5. 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:

  1. Verwenden Sie Docker und gebrauchsfertige Docker-Bilder
  2. 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:

  1. 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).
  2. Lade 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 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!


Linux
  1. Linux-Tipps zur Verwendung von Cron zum Planen von Aufgaben

  2. So packen Sie Python-Anwendungen für Linux

  3. 10 Linux-Befehle für die Netzwerkdiagnose

  4. Verwenden von at für Cron-Jobs zur einmaligen Verwendung in Linux

  5. Verwenden des SS-Tools für die Netzwerkfehlerbehebung

So begrenzen Sie die Netzwerkbandbreite in Linux mit Wondershaper

Zeigen Sie Netzwerkinformationen in Linux mit What IP Tool an

Erstellen Sie einen persistenten bootfähigen USB-Stick mit Ventoy in Linux

Verwenden von ifstat für Linux-Netzwerkstatistiken

DEFT Linux Eine Linux-Distribution für Computerforensik

Wie entwickelt man OpenGL ES (GLES) 2.0-Anwendungen unter Linux?