Micropython – uPyShell

V Octopus LAB se zaměřujeme na ESP32 ve spojení s Micropythonem. Hledáme limity a možnosti maximálního zjednodušení práce s mikrokontrolerem. Využíváme výborných vlastností Micropythonu (objektové, modulární, file-sytem…) v tuto chvíli už trochu na doraz, zápolíme s rychlostí i s velikostí paměti RAM i s omezeními dostupných standardních knihoven.

Na akci „hardwarové Pyvo 2019“ jsme představili náš #uPyshell (čti: u Pyšel) Vzniklo to trochu jako recese pro vánoční besídku, ale pravda, že příkazy: ls(„examples“), mkdir(„newTest“), cp(„f1″,“f2“), cat(„file.py“) jsme používali už dříve, ale psát („parametry“) je trochu otravné, když command lajna to má elegantně jen s mezerama.
(A to nemluvím o esptool, ampy, „kill“ screen..)

Takže pro jednoduchou práci se soubory, editaci nebo testování „paralelních“ procesů si zavolám:

>>> from util.shell import shell # často bývá už "přednastaveno"
>>> shell()                      # a jsem v "Linuxu" - zkusíme "help": 
uPyShell:~/$ help
octopusLAB - simple shell help:
   ---------+--------------------------+--------------------
            | F: file name             |
            | M: "main.py"             |  octopusLAB 2020
   ---------+--------------------------+--------------------
      clear | clear display            |
       free | free RAM (memory)        |
         df | Disk Free (flash)        |
         cd | Change Directory         | cd examples / cd ..
        pwd | Print Working Dir.       |
         ls | LiSt files and dir.      | ls examples
      mkdir | make directory           | mkdir newdir
         cp | CoPy F (defaul M)        | cp test.py back.py
         rm | ReMove F                 | rm test.py
        top | main proces info         |
       wifi | wireless "fidelity"      | wifi on / wifi scan
       ping | Packet InterNet Groper   | ping google.com
   ifconfig | wifi InterFace conf.     |
       wget | wget URL subdir download | wget https://my.web/f.py
       find | find "text"              | find oled
        cat | concatenate F (defaul M) | cat back.py
        edit| edit (defaul M)          | simple "line editor"
         ./ | run F                    | ./examples/blink.py
            | run F & > process/thread | run examples/blink.py &
       exit | back to uPy              | > Micropython
   ---------+--------------------------+---------------------

Práce s adresáři a se soubory

90% si vystačíme s ls, cd, find, mkdir, top, find, free….a to už nám tam běží, navíc přidáváme „edit“ (jednoduchý řádkový editor pro malé python programy) a „run“ pro jejich spouštění.

zde první ukázka spouštění jednoduchého kódu běžícího pak v samostatném vlákně
„kill“ zatím korektně neumíme, tak není ve stable verzi naimplementován
ukázka, jak vypadá spuštění v samostatném „vlákně“
v jednoduchém řádkovém editoru „edit“,
který je už součástí uPyShellu

Internetové připojení a práce s Wifi

$ ifconfig – nastavení a konfigurace připojení WiFi
$ ping „host“ – klasický „ping“ – odezva vzdálené IP
$ wget url-file – zatím alfa, kopíruje defaultně do adresáře download, který je nutno vytvořit: $ mkdir download
$ upgrade – základ už je
$ wifi param:
wifi on, wifi off (on = wifi on + connect, off = wifi disconnect) a wifi scan

testujeme: ifconfig, ping a wget

Více „souběžně běžících procesů“

Na test se dá použít sleep 10 (pauza 10 vteřin) která když se spustí s „&“ na konci: sleep 10 & , tak se rozběhne v samostatném vlákně / procesu. Stejně tak spouštíme ukázku – blikání ledky:
run examples/blink.py &
Běžící procesy pak vidíme v top – zatím není jednoduché je ukončit, máme značná omezení – takže řešíme dočasně resetem – ale pracujeme na tom.

Jak spustit blikání ledky jako samostatný proces.
S „&“ na konci příkazu (odděleno mezerou)
Po spuštění si ledka vesele bliká a my máme stále k dispozici práci v shellu!
Není problém spustit i více než dva nebo tři souběžně běžící procesy. (v top vidíte fialově)
Dokonce to funguje i s přerušením (vložené IRQ 9 -> to bylo stisknuto tlačítko)
Testovali jsme skoro 20 vláken, to už je ale značně zpomalené a poněkud nestabilní
(_thread je stále v experimentálním režimu)

V několika vteřinách můžete vidět, o co jde a jak to asi celé funguje

Link na „core“ zdroj:
https://github.com/octopusengine/octopuslab/blob/master/esp32-micropython/util/shell/__init__.py