Sdílejte chiptron.cz na sociálních sítích



RSS feeds

OctopusLab - workshop micropython - 3. dílTisk

- 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

Upozornění

Administrátor těchto stránek ani autor článků neručí za správnost a funkčnost zde uvedených materiálů.
Administrátor těchto stránek se zříká jakékoli odpovědnosti za případné ublížení na zdraví či poškození nebo zničení majetku v důsledku elektrického proudu, chybnosti schémat nebo i teoretické výuky. Je zakázané používat zařízení, která jsou v rozporu s právními předpisy ČR či EU.
Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva.
Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ.
10,973,360 návštěv