- Změny v Micropythonu si vynucují změnu octopus()
- Opakování a podrobnější doplnění
- LED – nejjednodušší knihovna pro testování
- web_server()
- Webový editor IDE (integrated development environment)
- Některé další vychytávky
- Drobné projekty – examples
V minulých dvou dílech jste si mohli vyzkoušet pár prvních experimentů s ESP32. Hlavní částí byla příprava ESP – podle následujícího odkazu:
https://www.octopuslab.cz/micropython-octopus/
Změny v Micropythonu si vynucují změny v octopus()
Vývoj open-source Micropythonu je nekončící proces – a tak nám například před dokončením toho dílu změnili formát předkompilovaných souborů *.mpy – proto je nutné mít verzi:
MicroPython v1.11-392-…-build-octopusLAB on 2019-10-08
a novější – ke stažení u nás:
https://octopusengine.org/download/micropython/micropython-octopus.bin a pak přejít na verze octopus() od 0.92+ lépe 0.93 stable
Z dalších změn, které jsou aktuální, vybírám opravu chyby, kterou jsme trochu z pohodlnosti využívali:
from octopus import * (kde octopus nebyla class)
https://github.com/micropython/micropython/issues/5121
– v dalších verzím proto dojde k jistým úpravám jádra našeho systému.
Pro účely různých experimentů z terminálu postačí v této poslední nové verzi importovat samostatně „všechny“ dostupné metody (respektive metody se linkují dynamicky podle nastavení setup() > ios, například – když nemáte nastavenou SW RGB diodu, nepřihrají se vám knihovny pro její ovládání a ani předdefinované barvy)
>>> octopus() >>> from util.octopus import * v kódu ale "import *" důrazně nedoporučujeme, tam se vždy uvedou jen nutné knihovny, například: >>> from util.octopus import w, web_server Pokud chceme mít některé metody dostupné už po zavolání octopus(), zatím řešíme rozšířením globals() v souboru boot.py: def octopus(): ... from util.octopus import ls, cat, cp globals()["ls"]=ls # ls("subdir") pro list souborů v adresáři globals()["cat"]=cat # cat nefo f pro výpis obsahu souboru globals()["cp"]=cp # cp nebo file_copy pro kopii obsahu, # dafaultně do main.py Máme také rozpracovánu změnu s class Octopus, kterou budeme používat: >>> from util.octopus import Octopus >>> o = Octopus()
Opakování a podrobnější doplnění
posloupnost pro pro instalaci octopus() do nově nahraného Micropythonu: >>> octopus_initial.setup() -> w, a -> cw, sd před dalším spuštěním se musí importovat: >>> from util import octopus_initial příkazy pro update a nastavení : >>> setup() > w, a > cw, sd > ds, ios update stable verze stačí: >>> u() obecný upgrade z cloudu (musí existovat soubor.tar na url) >>> from util.octopus import u >>> u() je zkrácení pro: >>> from util.setup import deploy >>> deploy("vaše cesta k url/soubor.tar") -> >>> deploy("https://octopusengine.org/download/web-ide.tar") provádí se také ze setup(), kde přibylo samostané nahrávání examples [sde] octopus help: >>> h() podrobněji na webu: https://www.octopuslab.cz/micropython-octopus-help/
LED – nejjednodušší knihovna pro testování
Ukázky zdrojových kódů slouží pro vysvětlení, jak to všechno je napsané, ale především pro inspiraci, pokud někdo bude chtít vytvářet vlastní a klidně mnohem složitější projekt – princip zůstává stejný.
Všechny knihovny a další ukázky najdete na githubu. Celý kód pro „util/led“ je zde: https://github.com/octopusengine/octopuslab/blob/master/esp32-micropython/util/led/__init__.py
>>> from util.led import Led >>> led = Led(2) # BUILT_IN_LED vytvoření instance objektu Led na pinu 2 (nejčastější "vestavěný") >>> led.value(1) instance objektu "tečka" metoda "( parametry )" zde: hodnota (value) s parametrem 1 znamená, že se LEDka rozsvítí. . >TAB nabídka metod Napište "led" . (tečka) a stiskněte TAB led. class init module qualname value dict pin blink toggle state led. zkuste si také: >>> dir(led) ... >>> led.pin > Pin(2) přednastaveno, na ESP32 modulu je BUILT_IN_LED na pinu 2 >>> led.state False >>> led.value(1) >>> led.state 1
Podobným způsobem můžete zkoumat všechny ostatní moduly, metody a funkce v Micropythonu, což se dá využít nejen jako nápověda, ale i pro výuku a hlubší pochopení.
web_server()
Spuštění webového serveru jsme zjednodušili na maximální možnou míru, navíc jsme doplnili pár dalších možností – od nastavení WiFi, nastavení systému a ukázku ovládání (zatím nezabezpečeného) jednoduchých periferií (LED, RGB LED, PWM…)
Máte-li nainstalovaný octopus() verze 0.91+, webový server spustíte následovně:
>>> from util.octopus import w, web_server >>> w() >>> web_server()
Zkuste nejdříve z terminálu, kdy se vám vypíše IP adresa na které web server poběží – nejčastěji 192.168.x.y (Kde x je velmi často 0 nebo 1)
Pokud jste připojeni s počítačem na stejné síti jako ESP, po zadání adresy do prohlížeče byste měli vidět následující stránku (nebo velmi podobnou) generovanou ESPéčkem:
Webový editor – IDE
Hlavní částí webového serveru je webový editor, ve kterém se dá zdrojový kód vytvářet, editovat i spouštět – a v dolní polovině paralelně běžící web-repl.
IDE = integrated development environment.
AP (access point) a webserver: >>> from util.octopus import ap_init, web_server >>> ap = ap_init() >>> web_server() AP se spouští jako nový "poskytovatel lokální WiFi sítě" - ke kterému se lze připojit zpravidla na adrese: 192.168.4.1 Pokud se připojení AP provede automaticky po startu, můžete potom nastavit připojení k jiné známé WiFi v okolí bez nutnosti připojování k PC.
Některé další vychytávky
pro práci se soubory jsme přímo do octopus() integrovali některé příkazy, které známe z Linuxu (ls, cat, cp) - zde jako metody, proto je nutno používat závorky: >>> ls() provede výpis souborů (*.py) a podadresářů (bez přípony) je to pouze zkratka - což udělá v základu i: >>> import os >>> os.listdir() >>> ls("examples") > výpis obsahu podardresáře >>> cat("examples.clock.py") > výpis obsahu souboru >>> cp("examples/blink.py") > zkopírování souboru/programu do main.py dafaultně, nebo do jiného souboru (druhý nepovinný parametr) vytváření souborů a spustitelných programů lze provádět i v interaktivním řádkovém modu, pokud není jiná možnost - např.: ampy run file, ampy main.py file, wifi webrepl, blockly... ale zatím to lze pro jednoduché a krátké pokusy obejít přímo z Micropythonu: >>> with open('examples/pokus.py', 'w') as f: >>> f.write(".....") krátký program po spuštění: >>> with open('main.py', 'w') as f: ... f.write("octopus()\n") ... f.write("while True:\n") ... f.write(" led.blink()\n") ... f.write(" sleep(1)\n") ... máme v plánu lépe využívat i časování - například pomocí timeru: timer_init() > tim1 tim1.deinit() Env.timerLed = 0 časovač běhu: Env.start = ticks_ms() start = ticks_diff(ticks_ms(), Env.start) Env.start = start > "nulování" V našich open-source zdrojích je celá řada knihoven pro práci s různými zařízeními a senzory, včetně jednoduchých ukázek: https://github.com/octopusengine/octopuslab/tree/master/esp32-micropython
Dobné projekty – examples
Máme k dispozici pár ukázek – ucelenější ukázkové projekty, na kterých demonstrujeme jednoduchost práce se systémem a základy rapid prototypingu – programy na pár řádků? Například hodiny, budík, teploměr, termostat, tickernátor, messenger, alarm, měřící přístroj, zařízení pro diagnostiku, logování a posílání dat do databáze…
Můžeme vytvářet funkční zařízení nebo jednoduché hry. Vše se snažíme zprovoznit jen za pomoci několika základních řádek kódu.
jak fungují jednoduché hodiny v našem příkladu: modul ESP32 s ROBOTboard a 7-mi segment Displejem (8 číslic, obvod MAX) from util.octopus import w, time_init, get_hhmm, disp7_init w() time_init() zobrazení času: get_hhmm() '11:23' get_hhmm("-") > parametrem je "separátor" - defaultně ":" '11-23' clock.py: w() > připojení k internetu - správně nastaveno v setup() time_init() > ze serveru se stáhne aktuální čas (i datum) d7 = disp7_init() > inicializace sedmisegmentového displeje def clock(): … d7.show(get_hhmm("-")) … sleep(0.5) … d7.show(get_hhmm(" ")) blikání pomlčky - vidíme, že to žije … sleep(0.5) … while True: … clock()
Ukázka je v "examples/clock.py" a podobně i pro oled display: "examples/oled_clock.py"
https://www.octopuslab.cz/micropython-octopus/
https://www.octopuslab.cz/workshop-micropython1/
https://www.octopuslab.cz/workshop-micropython2/
https://www.octopuslab.cz/workshop-micropython3/
https://www.octopuslab.cz/micropython-web-ide/
https://www.octopuslab.cz/micropython-octopus-help/