Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Micropython materials in separated files per topic and/or HW #401

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions lessons/micropython/micropython/ampy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
## Práce se soubory

Jak začneš psát trochu složitější programy,
mohlo by se stát, že tě konzole MicroPythonu začne trochu štvát.
Špatně se v ní opravují chyby a automatické odsazování funguje jen většinou.
Pojďme se podívat, jak naštvání předejít.

Nejdřív si do virtuálního prostředí nainstaluj program Ampy od Adafruitu.

```console
(env)$ python -m pip install adafruit-ampy
```

Doporučuji si větší kousky kódu – a určitě takové,
ve kterých je nějaký cyklus, podmínka či funkce –
psát v textovém editoru a do modulu pak posílat celý soubor.

Zkus si to. Do souboru `blikajici_led.py` dej následující kód:

```python
from machine import Pin
from time import sleep
pin_diody = Pin(14, Pin.OUT)
while True:
pin_diody.value(0)
sleep(1/2)
pin_diody.value(1)
sleep(1/2)
```

Potom zavři konzoli (`picocom`, PuTTY nebo `screen`).

Ke spuštění budeš potřebovat znát port:

* Linux: port používáš v příkazu `picocom`, např. `/dev/ttyUSB0`
* Windows: port používáš v PuTTY, např. `COM13`
* macOS: port používáš v příkazu `screen`, např. `/dev/tty.usbmodem*`

`ampy` spusť následujícím příkazem, jen za `PORT` doplň svůj port:

```console
(venv)$ ampy -p PORT run blikajici_led.py
```

Program by měl blikat diodou.
Využívá k tomu funkci `time.sleep()`, která počká daný počet vteřin –
tedy `time.sleep(1/2)` zastaví program na půl sekundy.

Podobně je možné na destičku soubory i nahrávat, jen je potřeba místo
`run` použít `put`.

```console
(venv)$ ampy -p PORT put blikajici_led.py
```

Pokud navíc budeš chtít, aby se program na destičce automaticky spouštěl, musí
se soubor s programem na destičce jmenovat `main.py`. `ampy` umí soubor při
kopírování i přejmenovat, když mu při kopírování zadáš i druhé (nové) jméno.

```console
(venv)$ ampy -p PORT put blikajici_led.py main.py
```

Po úspěšném kopírování máš na destičce nahraný náš program ze souboru
`blikajici_led.py` do souboru `main.py`. Teď už bude tvůj program fungovat
i bez počítače, takže stačí destičku připojit např. k powerbance
a dioda se rozbliká.
29 changes: 29 additions & 0 deletions lessons/micropython/micropython/flashing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
## Flashování

Na našich destičkách je MicroPython už nahraný, ale kdyby sis koupil{{a}}
vlastní NodeMCU nebo chtěl{{a}} firmware aktualizovat, budeš ho potřebovat umět
nahrát.

K tomu je potřeba nástroj `esptool`, který se dá nainstalovat pomocí:

```console
(env)$ python -m pip install esptool
```

Po instalaci esptool si stáhni nejnovější stabilní firmware pro ESP8266
z [micropython.org/download](http://micropython.org/download#esp8266) a zadej:

```console
(env)$ esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash 0 esp8266-20161110-v1.8.6.bin
```

Hodnotu pro `--port` opět doplň podle svého systému – např. `/dev/tty.wchusbserial1420` na Macu, `COM3` na Windows.

> [note]
> Destiček s čipem ESP8266 se vyrábí celá řada různých typů a některé mohou
> potřebovat odlišné nastavení při flashování.
> Popis všech možností nastavení je k nalezení v [dokumentaci k esptool](https://github.com/espressif/esptool#usage).

Je-li na desce nahraný MicroPython, tento příkaz by měl fungovat. U jiného
firmware, (případně u poškozeného MicroPythonu), je potřeba při zapojování
destičky do USB držet tlačítko FLASH.
87 changes: 87 additions & 0 deletions lessons/micropython/micropython/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# MicroPython na malém zařízení

> [note] Tahle sekce bohužel nejde jednoduše projít z domu.
> Využíváme speciální vybavení, které je potřeba nejdřív
> sehnat. Máš-li možnost se dostat na sraz, nebo
> aspoň kontaktovat organizátory, doporučujeme shánět
> spíš tímto způsobem.
> Případně jde daný hardware objednat přes Internet,
> typicky z čínských e-shopů.

{{ figure(
img=static('nodemcu-devkit.jpg'),
alt='LoLin NodeMCU v3 – Vývojová deska s čipem ESP8266',
float='right',
) }}

Dnes budeme programovat malé zařízení –
tak malé, že se ho pohodlně schováš v ruce.
Konkrétně budeme používat „chytrou destičku”, modul zvaný
*NodeMCU Devkit*, která by měla ležet před tebou.
Než ji vyndáš z obalu, měl{{a}} by ses *vybít*:
dotkni se něčeho kovového, co je spojeno se zemí,
třeba radiátoru nebo kovové části schránky nějakého
spotřebiče, který je zapojený do zásuvky.
Tím se zbavíš statické elektřiny, která by mohla
malinké zařízení poškodit.
Pak přístroj vyndej z obalu. Snaž se ho držet za
hrany a příliš se nedotýkat elektroniky a kovových
částí.

> [note]
> Obal bude nejspíš roztržený, protože organizátoři
> na destičku před začátkem kurzu nainstalovali
> MicroPython.

> [warning]
> Obal je vodivý a nesmí přijít do styku se zapojenou destičkou,
> protože by mohl zkratovat její vývody a tím ji zničit.
> Proto obal raději hned schovej a používej ho jen k transportu destičky.

Teď, když destičku držíš v ruce, si
pojďme projít její základní součásti.

<br style='clear: both;'>

{{ figure(
img=static("nodemcu-popisky.svg"),
alt='Obrázek desky NodeMCU DevKit',
float='left',
) }}

Nejdůležitější část vývojové desky je v oplechované
krabičce s logem "Wi-Fi" a "FCC":
<span class="part-green">mikroprocesor ESP8266</span>.
To je „mozek” celého zařízení, který – když je
správně naprogramován – umí provádět pythonní
příkazy a programy.
Procesor sedí na malé destičce, na které je ještě
<span class="part-cyan">anténa</span>, kterou
přístroj může komunikovat s okolím.

Tahle malá destička se dá použít i samostatně;
všechno ostatní, co kolem ní zabírá tolik místa,
nám jen ulehčí hraní a umožní se zařízením
jednoduše komunikovat a krmit ho elektřinou.

Komunikace a „krmení” se děje přes
<span class="part-red">mikro-USB konektor</span>,
do kterého zapojíš kabel ze svého počítače.
Když je modul naprogramovaný, stačí ho místo do
počítače zapojit do nabíječky či externího zdroje
(powerbanky) a bude fungovat samostatně.

Kolem USB konektoru jsou dvě tlačítka:
<code class="part-orange">RST</code>, kterým se destička restartuje
(skoro jako kdybys ho odpojila a zase zapojila, což
se hodí, když něco uděláš špatně a modul „zamrzne”),
a <code class="part-yellow">FLASH</code>, o kterém si povíme později.

Po stranách modulu jsou dvě řady
<span class="part-blue">„nožiček”</span>, na které
se dá napojit celá řada nejrůznějších hraček.
Zkontroluj si, jestli jsou všechny nožičky rovné;
kdyby byla některá ohnutá, tak ji (nejlépe s pomocí
kouče) narovnej nebo si vezmi jinou destičku.

<br style='clear: both;'>
26 changes: 26 additions & 0 deletions lessons/micropython/micropython/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
title: MicroPython
style: md
attribution:
- Pro PyLadies Brno napsal Petr Viktorin, 2016-2017.
- Diagramy s LED vytvořeny pomocí [Fritzing](http://fritzing.org).
license: cc-by-sa-40
css: |
.part-green { outline: 2px solid hsla(113, 100%, 50%, 1);
background-color: hsla(113, 100%, 50%, 0.25); }
.part-cyan { outline: 2px solid hsla(180, 100%, 50%, 1);
background-color: hsla(180, 100%, 50%, 0.25); }
.part-blue { outline: 2px solid hsla(236, 100%, 50%, 1);
background-color: hsla(236, 100%, 50%, 0.25); }
.part-yellow { outline: 2px solid hsla( 60, 100%, 50%, 1);
background-color: hsla( 60, 100%, 50%, 0.25); }
.part-orange { outline: 2px solid hsla( 42, 100%, 50%, 1);
background-color: hsla( 42, 100%, 50%, 0.25); }
.part-red { outline: 2px solid hsla( 0, 100%, 50%, 1);
background-color: hsla( 0, 100%, 50%, 0.25); }
.pull-right, .pull-left { margin: 1em; }
.highlight { background-color: hsla( 0, 100%, 50%, 0.1); }
.img-fluid { max-width: 100%; }
.highlight-nocolor{ background-color: hsla( 60, 100%, 50%, 0.75); }
.highlight-red { background-color: hsla( 0, 100%, 50%, 0.25); }
.highlight-green { background-color: hsla(113, 100%, 50%, 0.25); }
.highlight-blue { background-color: hsla(236, 100%, 50%, 0.25); }
33 changes: 33 additions & 0 deletions lessons/micropython/micropython/input.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
## Vstup

MicroPython na malé destičce obsahuje některé
moduly, které jinde nenajdeš. Ten hlavní se jmenuje
`machine` a zpřístupňuje základní funkce zařízení. Zkus si:

```python
from machine import Pin
pin = Pin(0, Pin.IN)
print(pin.value())
```

Zmáčkni a drž tlačítko `FLASH` vedle USB konektoru.
Přitom pusť `print(pin.value())` znovu.
Jak se hodnota změní?

Jak tomuhle kódu rozumět?
Třída `Pin` ti umožňuje ovládat jednotlivé
„nožičky”, kterými zařízení komunikuje s vnějším
světem: buď na nich nastavovat napětí, nebo zkoumat
jestli na nich nějaké napětí je.

`Pin(0, Pin.IN)` vytvoří objekt třídy Pin,
který bude načítat data z „nožičky” číslo 0.
(`IN` znamená načítání – informace jdou *do* procesoru).
Funkce `pin.value()` změří napětí na dané
„nožičce” a vrátí buď 1 nebo 0 podle toho, jestli nějaké naměřila.

No a „nožička” číslo 0 je připojená k tlačítku `FLASH`,
kterým se tak dá ono napětí ovládat.
Informace o tom, která nožička je kam připojená,
máš na [taháku](https://pyvec.github.io/cheatsheets/micropython/nodemcu-cs.pdf) –
můžeš si zkontrolovat, že Pin(0) u sebe má poznámku FLASH.
122 changes: 122 additions & 0 deletions lessons/micropython/micropython/install.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
## Instalace

Nejdříve propoj modul s počítačem přes USB kabel,
jako kdybys připojoval{{a}} třeba mobil.

> [note]
> Je potřeba použít kvalitní datový kabel.
> Nekvalitní kabely (např. spousta kabelů k
> nabíječkám) jsou často nepoužitelné.

Dál postupuj podle operačního systému na svém počítači.
Kdyby něco nefungovalo, poraď se s koučem.
Původní (anglický) návod k této části je na
<a href="http://docs.micropython.org/en/latest/pyboard/pyboard/tutorial/repl.html">stránkách MicroPythonu</a>.


### Linux

Na správně nastaveném počítači stačí zadat:

```console
$ picocom -b 115200 --flow n /dev/ttyUSB0
```

Pokud příkaz neskončí s chybou, stiskni tlačítko `RST` na modulu.
Měly by se nakonec objevit tři zobáčky, `>>>`.

Většina počítačů ale na komunikaci s malými zařízeními nastavená není.
Skončí-li příkaz `picocom` s chybou,
oprav ji podle následujícího návodu a zkus to znova.
(Možná bude potřeba vyřešit víc než jednu chybu.)

* Nemáš-li příkaz `picocom` nainstalovaný,
je potřeba ho nainstalovat (např.
`sudo dnf install picocom` nebo
`sudo apt-get install picocom`).
* Pokud `picocom` skončil s chybou
`No such file or directory`, pravděpodobně
je potřeba k zařízení přistupovat přes jiný soubor.
Použij příkaz `dmesg | tail`, který vypíše něco jako:

<pre>
$ dmesg | tail
[703169.886296] ch341 1-1.1:1.0: device disconnected
[703176.972781] usb 1-1.1: new full-speed USB device number 45 using ehci-pci
[703177.059448] usb 1-1.1: New USB device found, idVendor=1a86, idProduct=7523
[703177.059454] usb 1-1.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[703177.059457] usb 1-1.1: Product: USB2.0-Serial
[703177.060474] ch341 1-1.1:1.0: ch341-uart converter detected
[703177.062781] usb 1-1.1: ch341-uart converter now attached to <b>ttyUSB0</b>
</pre>

Máš-li místo `ttyUSB0` něco jiného, v příkazu `picocom` to použij místo
`ttyUSB0`.

* Pokud `picocom` skončil s chybou `Permission denied`, potřebuješ získat
přístup k souboru zařízení.
To znamená přidat se do příslušné skupiny:

```console
$ sudo usermod -a -G dialout $(whoami)
```

Poté je potřeba se znovu přihlásit, třeba příkazem:

```console
$ su - $(whoami)
```

Pro ověření spusť příkaz `groups`; v jeho výstupu by mělo být `dialout`.
Například:

```console
$ groups
kristyna lp wheel dialout mock
```


### Windows

MicroPython se přihlásí jako COM port. Otevři
správce zařízení a zjisti, který COM port to je (kouč s tím pomůže).

Nebylo-li zařízení nalezeno, je potřeba nainstalovat
*driver*, který je ke stažení třeba
[z tohoto blogu](https://iotta.cz/ovladace-pro-ch340g/).

Pak si nainstaluj program
[PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)
(`putty.exe`) a spusť ho.
V konfiguračním okýnku zaškrtni *Connection Type: Serial* a
do *Serial line:* zadej svůj COM port.
Pak přepni v seznamu vlevo na *Serial* (úplně dole) a nastav *Speed* na *115200*
a *Flow Control* na *None*:

{{ figure(
img=static("putty-config.jpg"),
alt='Obrázek nastavení PuTTY',
) }}

Potom zpátky v kategorii *Session* můžeš nastavení uložit pro příště:
do políčka *Saved Sessions* zadej *MicroPython* a klikni OK.

Nakonec klikni *Open*. Mělo by se otevřít
okýnko podobné konzoli, kde se, když zmáčkneš
na modulu `RST`, objeví nakonec tři zobáčky: `>>>`.


### macOS

V příkazové řádce zadej:

```console
$ screen /dev/tty.usbmodem* 115200
```

a stiskni Enter.
Pak na modulu zmáčkni `RST`.
Měly by se nakonec objevit tři zobáčky, `>>>`.

Nejde-li to, je možná potřeba nainstalovat driver. Ten se dá stáhnout
z [tohoto blogu](https://iotta.cz/ovladace-pro-ch340g/).
Loading