Skip to content

Commit 0c8d350

Browse files
committed
Micropython materials in separated files per topic and/or HW
1 parent 8a39ed1 commit 0c8d350

24 files changed

+13070
-0
lines changed
+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
## Práce se soubory
2+
3+
Jak začneš psát trochu složitější programy,
4+
mohlo by se stát, že tě konzole MicroPythonu začne trochu štvát.
5+
Špatně se v ní opravují chyby a automatické odsazování funguje jen většinou.
6+
Pojďme se podívat, jak naštvání předejít.
7+
8+
Nejdřív si do virtuálního prostředí nainstaluj program Ampy od Adafruitu.
9+
10+
```console
11+
(env)$ python -m pip install adafruit-ampy
12+
```
13+
14+
Doporučuji si větší kousky kódu – a určitě takové,
15+
ve kterých je nějaký cyklus, podmínka či funkce –
16+
psát v textovém editoru a do modulu pak posílat celý soubor.
17+
18+
Zkus si to. Do souboru `blikajici_led.py` dej následující kód:
19+
20+
```python
21+
from machine import Pin
22+
from time import sleep
23+
pin_diody = Pin(14, Pin.OUT)
24+
while True:
25+
pin_diody.value(0)
26+
sleep(1/2)
27+
pin_diody.value(1)
28+
sleep(1/2)
29+
```
30+
31+
Potom zavři konzoli (`picocom`, PuTTY nebo `screen`).
32+
33+
Ke spuštění budeš potřebovat znát port:
34+
35+
* Linux: port používáš v příkazu `picocom`, např. `/dev/ttyUSB0`
36+
* Windows: port používáš v PuTTY, např. `COM13`
37+
* macOS: port používáš v příkazu `screen`, např. `/dev/tty.usbmodem*`
38+
39+
`ampy` spusť následujícím příkazem, jen za `PORT` doplň svůj port:
40+
41+
```console
42+
(venv)$ ampy -p PORT run blikajici_led.py
43+
```
44+
45+
Program by měl blikat diodou.
46+
Využívá k tomu funkci `time.sleep()`, která počká daný počet vteřin –
47+
tedy `time.sleep(1/2)` zastaví program na půl sekundy.
48+
49+
Podobně je možné na destičku soubory i nahrávat, jen je potřeba místo
50+
`run` použít `put`.
51+
52+
```console
53+
(venv)$ ampy -p PORT put blikajici_led.py
54+
```
55+
56+
Pokud navíc budeme chtít, aby se program na destičce automaticky spouštěl, musí
57+
se soubor s programem na destičce jmenovat `main.py`. `ampy` umí soubor při
58+
kopírování i přejmenovat, když mu při kopírování zadáme i druhé (nové) jméno.
59+
60+
```console
61+
(venv)$ ampy -p PORT put blikajici_led.py main.py
62+
```
63+
64+
Po úspěšném kopírování máme na destičce nahraný náš program ze souboru
65+
`blikajici_led.py` do souboru `main.py`. Teď už bude tvůj program fungovat
66+
i bez počítače, takže stačí destičku připojit např. k powerbance
67+
a dioda se rozbliká.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## Flashování
2+
3+
Na našich destičkách je MicroPython už nahraný, ale kdyby sis koupil{{a}}
4+
vlastní NodeMCU nebo chtěl{{a}} firmware aktualizovat, budeš ho potřebovat umět
5+
nahrát.
6+
7+
K tomu je potřeba nástroj `esptool`, který se dá nainstalovat pomocí:
8+
9+
```console
10+
(env)$ python -m pip install esptool
11+
```
12+
13+
Po instalaci esptool si stáhni nejnovější stabilní firmware pro ESP8266
14+
z [micropython.org/download](http://micropython.org/download#esp8266) a zadej:
15+
16+
```console
17+
(env)$ esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash 0 esp8266-20161110-v1.8.6.bin
18+
```
19+
20+
Hodnotu pro `--port` opět doplň podle svého systému – např. `/dev/tty.wchusbserial1420` na Macu, `COM3` na Windows.
21+
22+
> [note]
23+
> Destiček s čipem ESP8266 se vyrábí celá řada různých typů a některé mohou
24+
> potřebovat odlišné nastavení při flashování.
25+
> Popis všech možností nastavení je k nalezení v [dokumentaci k esptool](https://github.com/espressif/esptool#usage).
26+
27+
Je-li na desce nahraný MicroPython, tento příkaz by měl fungovat. U jiného
28+
firmware, (případně u poškozeného MicroPythonu), je potřeba při zapojování
29+
destičky do USB držet tlačítko FLASH.
+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# MicroPython na malém zařízení
2+
3+
> [note] Tahle sekce bohužel nejde jednoduše projít z domu.
4+
> Využíváme speciální vybavení, které je potřeba nejdřív
5+
> sehnat. Máš-li možnost se dostat na sraz, nebo
6+
> aspoň kontaktovat organizátory, doporučujeme shánět
7+
> spíš tímto způsobem.
8+
> Případně jde daný hardware objednat přes Internet,
9+
> typicky z čínských e-shopů.
10+
11+
{{ figure(
12+
img=static('nodemcu-devkit.jpg'),
13+
alt='LoLin NodeMCU v3 – Vývojová deska s čipem ESP8266',
14+
float='right',
15+
) }}
16+
17+
Dnes budeme programovat malé zařízení –
18+
tak malé, že se ho pohodlně schováš v ruce.
19+
Konkrétně budeme používat „chytrou destičku”, modul zvaný
20+
*NodeMCU Devkit*, která by měla ležet před tebou.
21+
Než ji vyndáš z obalu, měl{{a}} by ses *vybít*:
22+
dotkni se něčeho kovového, co je spojeno se zemí,
23+
třeba radiátoru nebo kovové části schránky nějakého
24+
spotřebiče, který je zapojený do zásuvky.
25+
Tím se zbavíš statické elektřiny, která by mohla
26+
malinké zařízení poškodit.
27+
Pak přístroj vyndej z obalu. Snaž se ho držet za
28+
hrany a příliš se nedotýkat elektroniky a kovových
29+
částí.
30+
31+
> [note]
32+
> Obal bude nejspíš roztržený, protože organizátoři
33+
> na destičku před začátkem kurzu nainstalovali
34+
> MicroPython.
35+
36+
> [warning]
37+
> Obal je vodivý a nesmí přijít do styku se zapojenou destičkou,
38+
> protože by mohl zkratovat její vývody a tím ji zničit.
39+
> Proto obal raději hned schovej a používej ho jen k transportu destičky.
40+
41+
Teď, když destičku držíš v ruce, si
42+
pojďme projít její základní součásti.
43+
44+
<br style='clear: both;'>
45+
46+
{{ figure(
47+
img=static("nodemcu-popisky.svg"),
48+
alt='Obrázek desky NodeMCU DevKit',
49+
float='left',
50+
) }}
51+
52+
Nejdůležitější část vývojové desky je v oplechované
53+
krabičce s logem "Wi-Fi" a "FCC":
54+
<span class="part-green">mikroprocesor ESP8266</span>.
55+
To je „mozek” celého zařízení, který – když je
56+
správně naprogramován – umí provádět pythonní
57+
příkazy a programy.
58+
Procesor sedí na malé destičce, na které je ještě
59+
<span class="part-cyan">anténa</span>, kterou
60+
přístroj může komunikovat s okolím.
61+
62+
Tahle malá destička se dá použít i samostatně;
63+
všechno ostatní, co kolem ní zabírá tolik místa,
64+
nám jen ulehčí hraní a umožní se zařízením
65+
jednoduše komunikovat a krmit ho elektřinou.
66+
67+
Komunikace a „krmení” se děje přes
68+
<span class="part-red">mikro-USB konektor</span>,
69+
do kterého zapojíš kabel ze svého počítače.
70+
Když je modul naprogramovaný, stačí ho místo do
71+
počítače zapojit do nabíječky či externího zdroje
72+
(powerbanky) a bude fungovat samostatně.
73+
74+
Kolem USB konektoru jsou dvě tlačítka:
75+
<code class="part-orange">RST</code>, kterým se destička restartuje
76+
(skoro jako kdybys ho odpojila a zase zapojila, což
77+
se hodí, když něco uděláš špatně a modul „zamrzne”),
78+
a <code class="part-yellow">FLASH</code>, o kterém si povíme později.
79+
80+
Po stranách modulu jsou dvě řady
81+
<span class="part-blue">„nožiček”</span>, na které
82+
se dá napojit celá řada nejrůznějších hraček.
83+
Zkontroluj si, jestli jsou všechny nožičky rovné;
84+
kdyby byla některá ohnutá, tak ji (nejlépe s pomocí
85+
kouče) narovnej nebo si vezmi jinou destičku.
86+
87+
<br style='clear: both;'>
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
title: MicroPython
2+
style: md
3+
attribution:
4+
- Pro PyLadies Brno napsal Petr Viktorin, 2016-2017.
5+
- Diagramy s LED vytvořeny pomocí [Fritzing](http://fritzing.org).
6+
license: cc-by-sa-40
7+
css: |
8+
.part-green { outline: 2px solid hsla(113, 100%, 50%, 1);
9+
background-color: hsla(113, 100%, 50%, 0.25); }
10+
.part-cyan { outline: 2px solid hsla(180, 100%, 50%, 1);
11+
background-color: hsla(180, 100%, 50%, 0.25); }
12+
.part-blue { outline: 2px solid hsla(236, 100%, 50%, 1);
13+
background-color: hsla(236, 100%, 50%, 0.25); }
14+
.part-yellow { outline: 2px solid hsla( 60, 100%, 50%, 1);
15+
background-color: hsla( 60, 100%, 50%, 0.25); }
16+
.part-orange { outline: 2px solid hsla( 42, 100%, 50%, 1);
17+
background-color: hsla( 42, 100%, 50%, 0.25); }
18+
.part-red { outline: 2px solid hsla( 0, 100%, 50%, 1);
19+
background-color: hsla( 0, 100%, 50%, 0.25); }
20+
.pull-right, .pull-left { margin: 1em; }
21+
.highlight { background-color: hsla( 0, 100%, 50%, 0.1); }
22+
.img-fluid { max-width: 100%; }
23+
.highlight-nocolor{ background-color: hsla( 60, 100%, 50%, 0.75); }
24+
.highlight-red { background-color: hsla( 0, 100%, 50%, 0.25); }
25+
.highlight-green { background-color: hsla(113, 100%, 50%, 0.25); }
26+
.highlight-blue { background-color: hsla(236, 100%, 50%, 0.25); }
+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
## Vstup
2+
3+
MicroPython na malé destičce obsahuje některé
4+
moduly, které jinde nenajdeš. Ten hlavní se jmenuje
5+
`machine` a zpřístupňuje základní funkce zařízení. Zkus si:
6+
7+
```python
8+
from machine import Pin
9+
pin = Pin(0, Pin.IN)
10+
print(pin.value())
11+
```
12+
13+
Zmáčkni a drž tlačítko `FLASH` vedle USB konektoru.
14+
Přitom pusť `print(pin.value())` znovu.
15+
Jak se hodnota změní?
16+
17+
Jak tomuhle kódu rozumět?
18+
Třída `Pin` ti umožňuje ovládat jednotlivé
19+
„nožičky”, kterými zařízení komunikuje s vnějším
20+
světem: buď na nich nastavovat napětí, nebo zkoumat
21+
jestli na nich nějaké napětí je.
22+
23+
`Pin(0, Pin.IN)` vytvoří objekt třídy Pin,
24+
který bude načítat data z „nožičky” číslo 0.
25+
(`IN` znamená načítání – informace jdou *do* procesoru).
26+
Funkce `pin.value()` změří napětí na dané
27+
„nožičce” a vrátí buď 1 nebo 0 podle toho, jestli nějaké naměřila.
28+
29+
No a „nožička” číslo 0 je připojená k tlačítku `FLASH`,
30+
kterým se tak dá ono napětí ovládat.
31+
Informace o tom, která nožička je kam připojená,
32+
máš na [taháku](https://pyvec.github.io/cheatsheets/micropython/nodemcu-cs.pdf)
33+
můžeš si zkontrolovat, že Pin(0) u sebe má poznámku FLASH.
+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
## Instalace
2+
3+
Nejdříve propoj modul s počítačem přes USB kabel,
4+
jako kdybys připojoval{{a}} třeba mobil.
5+
6+
> [note]
7+
> Je potřeba použít kvalitní datový kabel.
8+
> Nekvalitní kabely (např. spousta kabelů k
9+
> nabíječkám) jsou často nepoužitelné.
10+
11+
Dál postupuj podle operačního systému na svém počítači.
12+
Kdyby něco nefungovalo, poraď se s koučem.
13+
Původní (anglický) návod k této části je na
14+
<a href="http://docs.micropython.org/en/latest/pyboard/pyboard/tutorial/repl.html">stránkách MicroPythonu</a>.
15+
16+
17+
### Linux
18+
19+
Na správně nastaveném počítači stačí zadat:
20+
21+
```console
22+
$ picocom -b 115200 --flow n /dev/ttyUSB0
23+
```
24+
25+
Pokud příkaz neskončí s chybou, stiskni tlačítko `RST` na modulu.
26+
Měly by se nakonec objevit tři zobáčky, `>>>`.
27+
28+
Většina počítačů ale na komunikaci s malými zařízeními nastavená není.
29+
Skončí-li příkaz `picocom` s chybou,
30+
oprav ji podle následujícího návodu a zkus to znova.
31+
(Možná bude potřeba vyřešit víc než jednu chybu.)
32+
33+
* Nemáš-li příkaz `picocom` nainstalovaný,
34+
je potřeba ho nainstalovat (např.
35+
`sudo dnf install picocom` nebo
36+
`sudo apt-get install picocom`).
37+
* Pokud `picocom` skončil s chybou
38+
`No such file or directory`, pravděpodobně
39+
je potřeba k zařízení přistupovat přes jiný soubor.
40+
Použij příkaz `dmesg | tail`, který vypíše něco jako:
41+
42+
<pre>
43+
$ dmesg | tail
44+
[703169.886296] ch341 1-1.1:1.0: device disconnected
45+
[703176.972781] usb 1-1.1: new full-speed USB device number 45 using ehci-pci
46+
[703177.059448] usb 1-1.1: New USB device found, idVendor=1a86, idProduct=7523
47+
[703177.059454] usb 1-1.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
48+
[703177.059457] usb 1-1.1: Product: USB2.0-Serial
49+
[703177.060474] ch341 1-1.1:1.0: ch341-uart converter detected
50+
[703177.062781] usb 1-1.1: ch341-uart converter now attached to <b>ttyUSB0</b>
51+
</pre>
52+
53+
Máš-li místo `ttyUSB0` něco jiného, v příkazu `picocom` to použij místo
54+
`ttyUSB0`.
55+
56+
* Pokud `picocom` skončil s chybou `Permission denied`, potřebuješ získat
57+
přístup k souboru zařízení.
58+
To znamená přidat se do příslušné skupiny:
59+
60+
```console
61+
$ sudo usermod -a -G dialout $(whoami)
62+
```
63+
64+
Poté je potřeba se znovu přihlásit, třeba příkazem:
65+
66+
```console
67+
$ su - $(whoami)
68+
```
69+
70+
Pro ověření spusť příkaz `groups`; v jeho výstupu by mělo být `dialout`.
71+
Například:
72+
73+
```console
74+
$ groups
75+
kristyna lp wheel dialout mock
76+
```
77+
78+
Kdyby to nefungovalo, na srazu ti může pomoci nějaký kouč.
79+
Jestli procházíš materiály z domu a nepovedlo
80+
se ti přidat do skupiny, dá se to obejít tak,
81+
že místo `picocom` použiješ `sudo picocom`.
82+
83+
### Windows
84+
85+
MicroPython se přihlásí jako COM port. Otevři
86+
správce zařízení a zjisti, který COM port to je (kouč s tím pomůže).
87+
88+
Nebylo-li zařízení nalezeno, je potřeba nainstalovat
89+
*driver*, který je ke stažení třeba
90+
[z tohoto blogu](https://iotta.cz/ovladace-pro-ch340g/).
91+
92+
Pak si nainstaluj program
93+
[PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)
94+
(`putty.exe`) a spusť ho.
95+
V konfiguračním okýnku zaškrtni *Connection Type: Serial* a
96+
do *Serial line:* zadej svůj COM port.
97+
Pak přepni v seznamu vlevo na *Serial* (úplně dole) a nastav *Speed* na *115200*
98+
a *Flow Control* na *None*:
99+
100+
{{ figure(
101+
img=static("putty-config.jpg"),
102+
alt='Obrázek nastavení PuTTY',
103+
) }}
104+
105+
Potom zpátky v kategorii *Session* můžeš nastavení uložit pro příště:
106+
do políčka *Saved Sessions* zadej *MicroPython* a klikni OK.
107+
108+
Nakonec klikni *Open*. Mělo by se otevřít
109+
okýnko podobné konzoli, kde se, když zmáčkneš
110+
na modulu `RST`, objeví nakonec tři zobáčky: `>>>`.
111+
112+
113+
### macOS
114+
115+
V příkazové řádce zadej:
116+
117+
```console
118+
$ screen /dev/tty.usbmodem* 115200
119+
```
120+
121+
a stiskni Enter.
122+
Pak na modulu zmáčkni `RST`.
123+
Měly by se nakonec objevit tři zobáčky, `>>>`.
124+
125+
Nejde-li to, je možná potřeba nainstalovat driver. Ten se dá stáhnout
126+
[tohoto blogu](https://iotta.cz/ovladace-pro-ch340g/).

0 commit comments

Comments
 (0)