====== Notizen zum ESP32 mit Stellar Wireless ======
In diesem Artikel werde ich Notizen zum ESP32 im Zusammenspiel mit Stellar Wireless sammeln.
Zuerst möchte ich zwei Informationsquellen empfehlen zum Thema Microcontroller:
* [[https://www.rototron.info/|Webseite: rototron.info]] bzw. der zugehörige Kanal auf [[https://www.youtube.com/user/rdagger68|Youtube: rdagger68]]
* [[https://www.youtube.com/channel/UCu94OHbBYVUXLYPh4NBu10w|Youtube: Unexpected Maker]]
===== Einstieg in MicroPython =====
==== MicroPython auf dem ESP32 installieren =====
MicroPython über diesen Link für ESP32 beziehen: [[https://micropython.org/download#esp32|micropython.org/download#esp32]]
Je nach Betriebssystem ist der Pfad unter dem der ESP32 angesprochen wird unterschiedlich. Bei meinem Raspberry Pi (Linux) ist es /dev/ttyUSB0, bei anderen Betriebssystemen kann das abweichen.
Nun löschen wir die bisherigen Inhalte auf dem ESP32:
esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
Nachdem die MicroPython ".bin"-Datei von der Webseite oben heruntergeladen wurde, wird der ESP32 über folgenes Kommando geflashed (neuere Version dann entsprechend abweichender Dateiname):
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32spiram-idf3-20200329-v1.12-317-g688323307.bin
esptool.py v3.0-dev
Serial port /dev/ttyUSB0
Connecting........_____.
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
WARNING: Detected crystal freq 41.13MHz is quite different to normalized freq 40MHz. Unsupported crystal in use?
Crystal is 40MHz
MAC: 24:6f:28:d1:f9:08
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 16MB
Flash params set to 0x0240
Compressed 1528672 bytes to 947656...
Wrote 1528672 bytes (947656 compressed) at 0x00001000 in 22.4 seconds (effective 545.4 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
==== Die erste Verbindung zum ESP32 ====
Je nachdem welches Terminalprogramm man bevorzugt, kann man dieses verwenden. Auf dem Raspberry hatte ich gerade "screen" zur Hand, damit geht das so:
screen /dev/ttyUSB0 115200
Evtl. ist es notwendig noch einmal "Enter" zu drücken, aber man sollte nun von der REPL begrüßt werden:
>>> print("Hallo Welt!")
Hallo Welt!
==== "rshell", die Alternative zu screen ====
Wem screen nicht zusagt, der möchte vielleicht rshell ausprobieren.
Die Installation von rshell geht wie folgt:
python3 -m pip install rshell
rshell -p /dev/ttyUSB0
Zu beachten ist dass die Ausgabe auf der Console mit screen etwas ausgiebiger ist als mit der rshell. Es ist durchaus möglich dass man das irgendwo einstellen kann. Die REPL verlässt man dann mit Strg+X!
==== Die ersten Schritte des ESP32 im Wireless ====
import network
wlan = network.WLAN(network.STA_IF) # Den ESP32 im Client-Modus initialisieren
wlan.active(True) # Die Schnittstelle aktivieren
wlan.scan() # Nach verfügbaren WLANs scannen
results = wlan.scan() # Ergebnis in der Variable "results" hinterlegen
>>> len(results)
17
>>> for ssid in results:
... if "Stellar" in ssid[0]:
... print(ssid)
...
...
(b'Stellar-WPA3-Personal', b'\xdc\x08V\x00\x1b\xd2', 6, -40, 3, False)
(b'Stellar-DSPSK', b'\xdc\x08V\x00\x1b\xd1', 6, -41, 3, False)
(b'Stellar-WPA3-PSK-Personal', b'\xdc\x08V\x00\x1b\xd3', 6, -41, 3, False)
(b'Stellar-WPA3-Personal', b'\xdc\x08V\x00)\x12', 6, -53, 3, False)
(b'Stellar-WPA3-PSK-Personal', b'\xdc\x08V\x00)\x13', 6, -53, 3, False)
(b'Stellar-DSPSK', b'\xdc\x08V\x00)\x11', 6, -54, 3, False)
==== Die erste Verbindung zum Stellar Wireless ====
Bei dieser SSID handelt es sich um WPA3-Transition-Mode. Diese SSID ist also auch in der Lage WPA2 anzubieten.
>>> wlan.connect("Stellar-WPA3-PSK-Personal", "vollgeheim")
I (3023478) wifi: new:<6,0>, old:<6,0>, ap:<255,255>, sta:<6,0>, prof:1
I (3023478) wifi: state: init -> auth (b0)
I (3023488) wifi: state: auth -> assoc (0)
I (3023498) wifi: state: assoc -> run (10)
I (3023538) wifi: connected with Stellar-WPA3-PSK-Personal, aid = 1, channel 6, BW20, bssid = dc:08:56:00:29:13
I (3023538) wifi: security type: 3, phy: bgn, rssi: -52
I (3023538) wifi: pm start, type: 1
I (3023548) network: CONNECTED
I (3023628) wifi: AP's beacon interval = 102400 us, DTIM period = 1
I (3025588) event: sta ip: 192.168.11.142, mask: 255.255.255.0, gw: 192.168.11.254
I (3025588) network: GOT_IP
Der gleiche Vorgang mit der rshell
>>> import network
>>> wlan=network.WLAN(network.STA_IF)
>>> wlan.active(True)
True
>>> wlan.connect("Stellar-WPA3-PSK-Personal", "vollgeheim")
>>> wlan.isconnected()
True
>>> wlan.ifconfig()
('192.168.11.142', '255.255.255.0', '192.168.11.254', '192.168.2.1')
===== Typische Fehlermeldungen =====
==== Fehlermeldung: A fatal error occurred: Timed out waiting for packet content ====
Kommt es zur folgenden Fehlermeldung, dann ist die BAUD-Rate zu hoch. Versucht es dann z.B. mit 460800.
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 write_flash -z 0x1000 esp32spiram-idf3-20200329-v1.12-317-g688323307.bin
esptool.py v3.0-dev
Serial port /dev/ttyUSB0
Connecting......
Chip is ESP32D0WDQ5 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
WARNING: Detected crystal freq 41.13MHz is quite different to normalized freq 40MHz. Unsupported crystal in use?
Crystal is 40MHz
MAC: 24:6f:28:d1:f9:08
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
A fatal error occurred: Timed out waiting for packet content
===== Einstieg in idf.py / espressif Beispiele =====
Damit der ESP32 das Verfahren "WPA3-Personal" unterstützt, muss dieses wie folgt aktiviert werden.
# Im esp-idf Verzeichnis ". ./export.sh" ausführen, danach steht idf.py in diesem Terminal zur Verfügung
idf.py menuconfig
screenshots
Der Quellcode wird normal mit "build" gebaut, dies wird durch "flash" aber impliziert und daher lautet der folgende Befehl "flash" und nicht "build". Das "monitor" dahinter sorgt dafür dass die Console für Meldungen geöffnet wird. Diesen "monitor"-Modus verlässt man mit "Strg+]", was auf einer deutschen QWERTZ-Tastatur über Strg+AltGr+9 erreicht wird. :)
idf.py -p /dev/ttyUSB0 flash monitor
Möchte man nur den "monitor"-Modus starten, geht dies wie folgt:
idf.py -p /dev/ttyUSB0 monitor