OctopusLab – workshop micropython – 3. díl

– 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,

             # defaultně 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


Led: Ukázka z terminálu

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.


Ukázka main.py – spuštění web serveru „po startu“


Network setup

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.


Sedmisegmentový display – a obyčejná elektroinstalatérská krabička

s krytem z nerezového plechu – zkoušíme i pro teploměr nebo termostat…

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"


examples/oled_clock.py

opět na vývojové desce octopusLAB: ROBOTboard

Sdílejte článek:

Související články

Toto je první díl ze tří – úvodního kurzu Micropython na ESP32.

– ROBOTboard (HW) – Octopus open source knihovny (FW) – Nastavení zařízení a periferií – ds: device setting > pinouts – ios: input-output setup – Upgrade systému – Displeje – Tlačítka – Mechatronika – Čidla a vstupy – Shrnutí V…

OctopusLAB (komunitní projekt české společnosti Octopus engine s.

V Octopus LAB (sledujte nás na FB) jsme se poslední dobou hodně soustředili na ESP32 ve spojení s Micropythonem.

Nová generace kutilů, bastlířů (makerů a geeků) Během několika posledních let jsme měli možnost setkat se s učiteli, vedoucími elektrokroužků i s mladými zájemci o elektroniku a moderní technologie.