Esp8266 und Esp32 - Programmierung mit Arduino IDE - Eine Einführung
Motivation: Die Seiten von Fips finde ich sehr gut, allerdings habe ich mehrere Anläufe gebraucht, die Idee hinter den Seiten zu verstehen. Mit dem folgenden Text möchte ich helfen, die ersten Hürden zu überwinden.
Zielgruppe: Fortgeschrittene Anfänger bei der Arduino-Programmierung, die nun WLAN nutzen möchten.
Tabs: Größere Projekte können für eine bessere Übersichtlichkeit in mehrere Dateien aufgeteilt werden. Die Arduino IDE unterstützt dies durch die Anzeige der Dateien in Tabs. Alle Dateien müssen im selben Projektordner liegen und die Datei Webserver.ino muß den Namen des Projektordners erhalten. Das Einbinden der Projektdateien übernimmt die Arduino IDE.
Welche Tabs man für das eigene Projekt auswählt, hängt von der Aufgabenstellung ab.
WiFi.mode: Möchte man den ESP mit einem Router wie der Fritz!Box verbinden, um auch Zugang zum Internet zu erlangen, verwendet man den Connect Tab. SSID und Passwort sind die des Routers. Der Router vergibt eine IP, die im seriellen Monitor angezeigt wird. Im Browser eines ebenfalls mit dem Router verbundenen PCs wird die vom Router vergebene IP zur Kontaktaufnahme mit dem ESP verwendet.
Der ESP kann aber auch ein von einem Router unabhängiges WLAN erzeugen. Dazu verwendet man den Access Point Tab. SSID und Passwort können frei gewählt werden. Die vom ESP vergebene IP 192.168.4.1 wird im seriellen Monitor angezeigt. Der PC muß zunächst mittels SSID und Passwort mit dem ESP verbunden werden (Win10: Windows-Einstellungen / Netzwerk und Internet / Verfügbare Netzwerke anzeigen). Im Browser des PCs wird die vom ESP vergebene IP zur Kontaktaufnahme mit dem ESP verwendet.
Unabhängig vom WiFi.mode kann der ESP als Client oder Webserver eingesetzt werden.
Dateisystem: Ein Browser erwartet Dateien wie http://192.168.4.1/index.html zur Anzeige. Beim ESP sind die Tabs Esp8266 LittleFS oder Esp32 Spiffs zum Speichern von Dateien vorgesehen. Auch Stylesheets können abgelegt werden. Enthält die html-Datei Javascript, können JSON-Datenpakete zur dynamischen Anzeige von Zuständen verwendet werden.
Alternativ kann der ESP den Inhalt einer Datei auch als Zeichenkette zusammenstellen und diese anstelle eines Dateiinhalts an den Browser schicken. Da immer der ganze Dateiinhalt übertragen wird, kann auf Javascript zur Aktualisierung verzichtet werden. Für den Einstieg ist dies die möglicherweise einfachere Variante.
Beispiel für ESP32: Ein einfaches Beispiel zum Ein- und Ausschalten einer LED soll den Einstieg erleichtern.
-
Zwischen G13 und GND wird eine LED mit Vorwiderstand 330 Ω geschaltet. Je nach eigener Hardware kann auch ein anderer Pin verwendet werden. Da die eingebaute LED schon in anderen Situationen blinkt, habe ich einen unabhängigen Pin gewählt.
-
Projektverzeichnis ESP_LEDeinaus anlegen.
-
Von der Seite Esp32 WebServer Tab die Datei in das Projektverzeichnis kopieren und in ESP_LEDeinaus.ino umbenennen.
-
Von der Seite Esp32 Access Point Tab die Datei Connect.ino in das Projektverzeichnis kopieren.
-
Von der Seite Esp32 EspBoardLed Tab die Datei EspBoardLed.ino in das Projektverzeichnis kopieren.
-
Arduino-IDE mit einer der drei Dateien starten. Die IDE zeigt drei Tabs.
-
ESP32 per USB mit PC verbinden. In der IDE ESP32 entsprechend der eignen Hardware als Board auswählen, dann den Port wählen.
-
Änderungen im Tab ESP_LEDeinaus:
— 1. Kommentierung entfernen: #define DEBUGGING
— 2. Kommentierung ergänzen: // spiffs();
— 3. Kommentierung ergänzen: // admin();
— 4. Kommentierung entfernen: espboardLed();
— 5. Kommentierung ergänzen: // if (millis() < 0x2FFF || millis() > 0xFFFFF0FF) runtime();
- Änderungen im Tab Connect
— 1. Eventuell Namen ändern: const char *ssid = "Esp32AP";
— 2. Passwort ändern: const char *password = "12345678";
- Änderungen im Tab EspBoardLed
— 1. LED-Pin ergänzen: #define LED_BUILTIN 13
-
Den seriellen Monitor der IDE mit 115200 Baud öffnen.
-
Projekt speichern, kompilieren und zum ESP32 übertragen.
-
Nach der Meldung „Hard resetting via RTS pin...“ sollte der serielle Monitor folgenden Text anzeigen:
Sketchname: C:...\Temp\arduino_modified_sketch_305680\ESP_LEDeinaus.ino
Build: Wed Sep 09 11:47:35 2020 IDE: 1.8.13Verbinde dich mit dem Netzwerk "Esp32AP"
Gib die IP 192.168.4.1 im Browser einHostname des AP = espressif
Mac Adresse des AP = 25:6A:28:96:94:95
Broadcast IP des AP = 192.168.4.255
HTTP Server gestartet
-
Im PC (Win10) die verfügbarenWLAN-Netzwerke anzeigen, „ESP32AP“ auswählen und das Passwort „12345678“ als Sicherheitsschlüssel eingeben. Nach einer Überprüfung wird die Verbindung bestätigt.
*** Diesen Punkt bei Bedarf wiederholen *** -
Im PC Browser öffnen und „192.168.4.1/led“ eingeben. Die Seite „Onboard Led schalten“ mit dem Text „LED ist aus“ wird angezeigt.
-
Durch Klicken auf „LED Ein“ wird die an Pin 13 angeschlossenen LED eingeschaltet, durch „LED Aus“ ausgeschaltet.
Der ESP32 hat als Access Point ein eigenes WLAN eingerichtet, an das man sich mit PC, Laptop oder Smartphone anmelden kann.
Das Beispiel ist damit erfolgreich umgesetzt!
Ich stelle diesen Text zur Diskussion und Ergänzung. Wenn Fips etwas übernehmen möchte, so würde ich mich freuen. Wenn es dem einen oder anderen Einsteiger helfen würde, wäre der Zweck erfüllt