Az ESP32 és a MicroPython

Immár két éve, hogy először kezem ügyébe került egy ESP32, és nem sikerült összebarátkoznom vele. Nem kizárólag azért, mert nem nagyon volt értelmes firmware, amivel üzemeltetni lehetett volna, de a gyártó Espressif által kiadott SDK is hemzsegett a hibáktól és hiányosságoktól. Az elmúlt két év során sokat javult a helyzet, immár az ESPEasy és a Tasmota is aránylag stabilan tudja kezelni - az alapfunkcióit legalábbis.
A Bluetooth kezelésével ugyan továbbra sem vagyok túl elégedett, mert még mindig hajlamos újraindítani az egész ESP32-t olykor... de a többi funkcióval nem láttam nagy problémákat.

ESP32-D0WDQ6 / ESP32-D0WD chippel kétféle kiszerelés létezik: az ESP32-WROOM-32 és az ESP32-WROVER.

esp32_1.jpg

Az ESP32 flash tárhelye 4/8/16MB lehet, a 4MB a legáltalánosabb. Nem összetévesztendő a tárhely a memóriával, mivel a flash csak tárolja a programot, nem abban fut!
A memóriája alapvetően 520KB méretű, kivételek ez alól a WROVER chipek, amiken extra 4MB PSRAM kapott még helyet. (esetleg 8MB) Nem lehetetlen persze WROOM-ot sem felbővíteni PSRAM-al, de kevés ilyet látni. Oda kell figyelni arra az apró különbségre is, hogy a PSRAM-al szerelt változatokon a GPIO16 és GPIO17 a PSRAM kapcsolattartásra van bekötve, így ha a felhasználó elkezdi saját célra használni, abból fagyás lesz. Valamivel a PSRAM hozzáférési ideje lassabb, mint az alapmemóriájáé, viszont sok feladatra az a bizonyos 520KB kevéske, pl képmegjelenítésnél, képtovábbításnál. (lásd ESP32 kamera, ami szintén PSRAM-al szerelt)

ESP32-S0WD / ESP32-SOLO-1 az egymagos kiszerelés, valamivel olcsóbb, de nem túl elterjedt. Minden más tulajdonsága megegyezik a WROOM-al. Ám mivel a kétmagos DOWD chipeken a fordítók úgy intézik, hogy az egyik magon fussanak az alapszintű rendszerfunkciók, Wifi+Bluetooth kezelés, a másikon pedig a felhasználói program, így nem hiszem, hogy a DOWD-ra fordított firmware elfutna a SOWD-n is...

solo.jpg

Létezik integrált áramköri antennás és külső IPEX csatlakozós változat is ESP32-ből, nagyobb távolság esetére célszerű a külső antennás modellt választani. Az alapmodulokon túl már rengetegféle felszereltségű és méretű lap kapható, van amin audio dekóder chip van integrálva, vagy LAN csatlakozó, esetleg POE áramellátó chip.

A frissen szerzett ESP32-ket általában MicroPython firmware-el szoktam tesztelni.
De mi is az a MicroPython? A Python egy magas szintű, úgynevezett interpreteres nyelv, a megírt program máris futtatható, ha rendelkezünk a Python értelmezővel, nem kell lefordítani előbb a programot gépi nyelvre. (gyak: ha megírunk egy programrészt, máris tesztelhetjük) A MicroPython (MP) a Python 3-as verziójának egy "lecsupaszított" változata, az alapok ugyanazok, de a nagyobb/lassabb funkciókat kivették belőle. Számomra az is pozitívum, hogy gyengén típusos nyelv, így például ugyanaz a változó tartalmazhat szöveget, a következő pillanatban pedig számot.. keményvonalas programozók számára ez lehet, hogy rémálom, szerintem viszont rugalmasság, és ami nem hajlik, az törik. :) No meg az sem utolsó szempont, hogy rengeteg egyszerű példaprogram és leírás található hozzá. A Python-al már korábban összebarátkoztam, különösen az RPIEasy programom megírása közben.
Érdeklődéssel tesztelgetem hát a Micro változatot. Alapvetően az úgynevezett PyBoard-okkal fut a legjobban, ezek STM32 lapok. Támogatja viszont az ESP32-t is, ami azért még mindig olcsóbb és több tárhellyel bír. A letöltések között elég sok variáns van, két paraméterre kell figyelni:

  • a gyártói SDK ESP-IDF v3 vagy v4, az utóbbi nem támogatja a vezetékes LAN kapcsolatokat = nem mindig a legújabb a legjobb, érdemes a v3-at választani egyelőre
  • van Generic és SPIRAM változat, ez utóbbi a 4MB PSRAM-al szerelt modulokhoz való, érdemes ezt letölteni, mivel a PSRAM nélküli változaton is gond nélkül fut, kiír egy hibát a logba induláskor, de más problémát nem okoz

https://micropython.org/download/esp32/

Csatlakoztassuk az ESP32-t USB-re, meg fog jelenni valami efféle, amiből tudjuk, hogy ttyUSB0 címet kapott:

usb 1-1.1: new full-speed USB device number 3 using ehci-pci
usb 1-1.1: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.63
usb 1-1.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
usb 1-1.1: Product: USB2.0-Serial
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial support registered for generic
usbcore: registered new interface driver ch341
usbserial: USB Serial support registered for ch341-uart
ch341 1-1.1:1.0: ch341-uart converter detected
usb 1-1.1: ch341-uart converter now attached to ttyUSB0

Első körben töröljük a flash tárhelyet, majd írjuk rá a 0x1000 címtől kezdve a számunkra szimpatikus binárist:

esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 esp32spiram-idf3-20200902-v1.13.bin

De akinek nem szimpatikus a konzol, grafikus felületen is megteheti ugyanezt, példának okáért a Thonny segítségével, ami Windowson is fut. Ubuntun sudo apt install thonny és fenn is van. :)

Indulását követően a Run -> Select interpreter menüben válasszuk ki a MicroPython (ESP32) lehetőséget.

thonny1.jpg

A firmware frissítésre kattintva az alábbi ablakban ismét ki kell választani a portot és kitallózni a letöltött bináris firmware állományt. Előzékenyen felajánlja a teljes törlést is, ezt első alkalommal célszerű megejteni. Az Install-ra kattintás után feltölti az eszközre a kiválasztott állományt.

thonny2.jpg

Ha minden sikerült és zárjuk a két ablakot, a főablak alján levő shellben a REPL (Read Evaluate Print Loop) soros porti kimenet adatait látjuk és ide tudunk közvetlenül is python parancsokat bevinni például így:

thonny_repl.jpg

import gc
gc.collect()
gc.mem_free()

A fenti példában a gc modul importálása után a gc.mem_free() parancs visszaadta, hogy 108.544 byte memória szabad az eszközön.. mivel indítás után közvetlenül vagyunk, ez semmiképpen sem PSRAM-al szerelt modell, hanem az 520KB memóriás alapmodell. Azért csak 100 kB van szabadon, mert az 520-ból igazából csak 328kB közvetlenül elérhető, 192kB eleve csak az utasítások tárolására van fenntartva, és a 328-ból a MicroPython indulása előtt elfoglal a FreeRTOS a TCP/IP, WiFi és Bluetooth valamennyit, és csak azután jön a micropython interpreter, és abban a mi programunk. Szóval a 4MB PSRAM-al szerelt ESP32 máris kívánatosabbnak látszik. :)

Nagyobb programot a középen levő fehér szöveges mezőbe lehet bevinni, például ha az alábbiba beírjuk a megfelelő helyre a saját WiFi-nk nevét és jelszavát, elmentjük a "MicroPython device" eszközre és megfuttatjuk a zöld körben levő fehér háromszög ikonra kattintva, akkor felcsatlakozik a wifire és máris kiírja milyen IP címet kapott:

thonny_prog.jpg

Az ESP32 alapokról egyelőre ennyit, folytatás következik ESPEasy, Tasmota, mPyEasy és LAN használat témakörben hamarosan.

A bejegyzés trackback címe:

https://bitekmindenhol.blog.hu/api/trackback/id/tr2416290054

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.

Friss topikok

Címkék

433mhz (12) adc (1) ads1015 (2) ads1115 (1) ajtó (1) alkatrész (23) alternatív kapcsoló (1) am2320 (1) amg8833 (1) analóg (1) android (1) apds-9960 (1) arduino (1) arduinoeasy (5) audio (1) automatizálás (3) basic (2) basic r3 (1) bemenet (2) bh1750 (1) blitzwolf (2) bluetooth (8) bridge (1) camhi (2) csengő (1) csináld magad (22) dht22 (1) digoo (1) dimmer (1) DIY (2) diy (25) do-it-yourself (26) domoticz (8) ds18b20 (1) ds3231 (1) easpeasy (1) ebay (3) érintő (2) érintőkapcsoló (7) érzékelő (11) esp-01 (2) esp32 (6) esp8266 (18) espeasy (3) espurna (1) esp projekt (18) Eview7 (1) ewelink (1) feldolgozó (1) felhő (1) fényérzékelő (1) firmware (7) flame detector (1) flash (1) fogyasztásmérő (3) ftdi (1) füstérzékelő (1) gesture (1) gpio (1) hang (4) hangjelző (1) hc-sr501 (1) hőmérséklet (12) htu21 (1) impulzus relé (1) izzó (2) javascript (1) jelenlétérzékelő (2) kamera (15) keresztkapcsoló (1) kézmozdulat (1) kijelző (3) kimenet (18) konnektor (4) lan (7) lángérzékelő (2) led (3) linux (3) logic level converter (1) lua (1) lux (1) maple mini (2) mcu (3) micropython (1) mobil (1) mosfet (1) mozgás (4) mpyeasy (1) mq-2 (2) mqtt (1) MQTT (1) működtető rendszer (5) multiroom (1) nedvesség (1) neopixel (1) Node-RED (1) nvr (3) nyitás (6) okosház (5) okosizzó (2) okosotthon (9) oled (1) onvif (5) opencv (1) openwrt (3) orange pi (4) páratartalom (6) php (1) poe (1) pow (1) programozás (7) projekt (22) proximity olvasó (1) python (1) raspberry (12) raspberry projekt (5) raspbian (1) rcwl-0516 (1) reed (1) relé (22) remote (2) rf (2) rgb (6) rögzítő (2) router (1) rpieasy (1) rtc (1) rtsp (1) shelly (13) shelly em (1) shutter (1) smartwise (1) solid state relay (1) sonoff (17) sonoff dual (1) SonOTA (1) soros (1) ssr (1) stm32 (4) szenzor (11) szilárdtest relé (1) szintillesztő (2) sziréna (1) szkript (2) szünetmentesítés (4) t1 (1) t4 (1) tasmota (3) Tasmota (1) távirányító (3) Telegram (1) termékteszt (67) termosztát (1) touch (2) ups (4) usb (5) usb hub (1) valós idejű óra (1) vezérlések (17) vezérlő (5) világítás (5) villanykapcsoló (12) webkamera (1) wiegand (1) wifi (21) ws2812 (1) xiaomi (6) xm (3) xmeye (3) yoosee (1) zigbee (8) zwave (3) Címkefelhő
süti beállítások módosítása