MicroPython
&
ESP32
Thomas Waldmann
EasterHegg 2018, 2018-04-01
Einordnung ESP32
- CPU, RAM, Massenspeicher, Durchsatz:
PC > rpi > ESP32 > Arduino - Leistungsaufnahme:
PC > rpi > ESP32, Arduino - Interfaces/Features (Elektronik):
ESP32, rpi > arduino > PC - Komfort beim SW-Entwickeln:
PC, rpi > ESP32 > arduino - Preis:
PC > rpi > ESP32, arduino
ESP32 Cores / Memory
- verbesserter Nachfolger des ESP8266
- 3.3 V, 5 uA ... 260 mA
- 32bit Microcontroller
- DualCore 2x 240MHz
- sep. ULP-Prozessor für SleepMode
- 520 kiB SRAM ("WROOM"-Modul)
- +4MiB pSRAM (nur im "WROVER")
- 4 MiB Flash
ESP32 I/O
- GPIO, PWM, Touchpad
- I2C, I2S, SPI, UART, RMT
- CAN, SDIO, ...
- DAC / ADC, PreAmp
- Hall Effect, Temperature
- WIFI 802.11 b/g/n, WPA2
- Bluetooth
- Ethernet*
ESP32 Dev-Boards
- Welches ESP32-Modul / Chip / Revision?
- Anzahl I/O-Pins? Breite und Breadboard-Eignung?
- Zusatz-Hardware?
- Micro-USB: USB<->UART, 5V -> 3.3V
- Li-Akku-Ladeschaltung
- Ladebuchse oder Akku-Halterung 18650
- OLED-Display
- LORA-Funkmodul onboard
- Modul-Systeme
WeMOS LOLIN32 Pro
TTGO ESP32 LORA
TTGO ESP32 Battery/OLED
Elektrodragon ESP32-Pico-D4
... auf Breadboard
Tulabadi's NODE32pico
Software: ESP32 Toolchain
- C
- ESP-IDF ("IoT Development Framework")
- Arduino Core für Arduino IDE
- GCC Toolchain
- Linux, macOS, Windows
- Lua
- JavaScript
- MicroPython!
Python (allgemein)
- komfortable, meist interpretierte Hochsprache
- mehrere Implementierungen (in C, RPython, Java, ...)
- standard heute: CPython 3.x
- einfach zu lernen und zu benutzen:
- mächtige Kontrollstrukturen und Datentypen
- gut ausgebaute Standard-Library
- automatische, dynamische Speicher-Verwaltung
- klare, leicht lesbare Syntax, wenig Boilerplate
- aber: durch Ressourcen-Verbrauch (z.B. RAM) ist das "normale" CPython nicht für MicroController geeignet.
MicroPython
- Python 3 für MicroController
- optimiert auf wenig RAM/Flash/CPU-Verbrauch
- ersetzt teilweise normales Betriebssystem, da sonst keins vorhanden.
- Libraries für HW-Zugriff oder Zeitkritisches
- in C erweiterbar (z.B. "C Extensions")
- Benutzung:
- interaktiver Interpreter ("REPL"-Console)
- Source-Code "main.py" auf uC-Dateisystem laden
MicroPython - Tools
- esptool.py
- Flash löschen
- Flash mit MicroPython-Image beschreiben
- mpy-utils
- mpy-fuse:
ESP32 als beschreibbares Dateisystem mounten - mpy-upload:
eine Datei auf ESP32 hochladen
- mpy-fuse:
- Terminal:
- starten: screen /dev/ttyUSB0 115200
- beenden: Strg-a k
- http://docs.micropython.org/en/latest/esp8266/
MicroPython Beispielcode
from time import sleep
from machine import Pin
led = Pin(12, Pin.OUT)
for counter in 1, 2, 3, 4:
led.value(True)
sleep(0.1)
led.value(False)
sleep(0.1)
Demo - interaktiv
- screen
- MicroPython REPL
- help()
- GPIO (Pin)
- PWM
- TouchPad
Demo - nicht interaktiv
- ESP32 mounten:
- mpy-fuse mnt
- ...
- fusermount -u mnt
- Datei-Transfer:
- mpy-upload FILE
- Autostart: boot.py & main.py
- OLED: Zähler
- I2C: Beleuchtungs-Sensor
- WLAN: SSID-Scan
Flash Time!
- Daily Builds der MicroPython ESP32 Firmware
- können neue Funktionen enthalten
- aber auch neue Bugs - vorsichtig sein!
- Dateisysteminhalt geht verloren.
- esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
- esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash \
-z 0x1000 esp32_firmware.bin
uPy & ULP Co-Prozessor
- Assembler-Code auf dem PC übersetzen:
- binutils-esp32ulp (espressif)
- binutils-esp32ulp (espressif)
- Assembler-Code auf dem ESP32 (oder PC) übersetzen:
- https://github.com/ThomasWaldmann/py-esp32-ulp
- in MicroPython implementiert
- neu, Alpha-Status, mit Unit/Compat-Tests
- https://github.com/micropython/micropython/pull/3578
"ports/esp32 add support for the ulp" (load and run)
Fragen?
(auch gerne danach ausserhalb des Saals)
Im Internet:
micropython.org & esp32.net
Im Stuttgarter Hackerspace:
https://wiki.shackspace.de/project/micropython
Kontakt: Thomas Waldmann <tw @ waldmann-edv . de>
MicroPython_ESP32_EH18
By Thomas Waldmann
MicroPython_ESP32_EH18
MicroPython und ESP32 Vortrag, EasterHegg 2018
- 2,431