Skip to content

Add a MicroPython course #544

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

Closed
wants to merge 14 commits into from
Closed
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
58 changes: 58 additions & 0 deletions courses/micropython/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
title: MicroPython
description: Základy Pythonu na malém hardware
long_description: |
Programovací jazyk Python lze použít i pro programování malých zařízení
a k nim připojených tlačítek, světýlek či mororků.
Tady se dozvíš, jak na to.

Používáme platformu ESP8266, resp. NodeMCU.

Na tento kurz je potřeba obstarat speciální zařízení.
V Česku se dá sehnat relativně rychle, spolehlivě a draze
např. u [Arduino Shop](https://arduino-shop.cz/) nebo
[GM Electronic](https://www.gme.cz/);
v Cíně levně ale s dlouhou dobou dodání
např. z [AliExpress](https://www.aliexpress.com/).

Kurz je psaný pro začátečníky, ale potřebuje hlavně ze začátku
relativně složité nastavení.
Doporučujeme proto začít s někým zkušenějším – např. na workshopu
nebo [na srazu](https://pyvo.cz/).

canonical: true
vars:
coach-present: false
plan:
- title: Nastavení zařízení
serial: 0
slug: setup
materials:
- lesson: micropython/flashing

- title: Úvod
slug: intro
materials:
- lesson: micropython/install
- lesson: micropython/micropython
- lesson: micropython/intro
- lesson: micropython/input
- lesson: micropython/output
- lesson: micropython/ampy
- lesson: micropython/pwm

- title: Další periferie
slug: devices
materials:
- lesson: micropython/piezo
- lesson: micropython/switch
- lesson: micropython/rgb_leds
- lesson: micropython/servo
- lesson: micropython/thermometer
- lesson: micropython/oled
- lesson: micropython/motors

- title: Komunikace
slug: comms
materials:
- lesson: micropython/webrepl
- lesson: micropython/socket
67 changes: 67 additions & 0 deletions lessons/micropython/ampy/index.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á.
6 changes: 6 additions & 0 deletions lessons/micropython/ampy/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
title: Práce se soubory
style: md
attribution:
- Pro PyLadies Brno napsal Petr Viktorin, 2016-2017.
- Upravil Lumír Balhar, 2018.
license: cc-by-sa-40
29 changes: 29 additions & 0 deletions lessons/micropython/flashing/index.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.
6 changes: 6 additions & 0 deletions lessons/micropython/flashing/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
title: Flashování
style: md
attribution:
- Pro PyLadies Brno napsal Petr Viktorin, 2016-2017.
- Upravil Lumír Balhar, 2018.
license: cc-by-sa-40
33 changes: 33 additions & 0 deletions lessons/micropython/input/index.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.
6 changes: 6 additions & 0 deletions lessons/micropython/input/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
title: Vstup
style: md
attribution:
- Pro PyLadies Brno napsal Petr Viktorin, 2016-2017.
- Upravil Lumír Balhar, 2018.
license: cc-by-sa-40
20 changes: 20 additions & 0 deletions lessons/micropython/install/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## 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:

* [Linux]({{ subpage_url('linux') }})
* [macOS]({{ subpage_url('macos') }})
* [Windows]({{ subpage_url('windows') }})

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>.

13 changes: 13 additions & 0 deletions lessons/micropython/install/info.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
title: Instalace
style: md
attribution:
- Pro PyLadies Brno napsal Petr Viktorin, 2016-2017.
- Upravil Lumír Balhar, 2018.
license: cc-by-sa-40
subpages:
linux:
title: Instalace – Linux
macos:
title: Instalace – macOS
windows:
title: Instalace – Windows
61 changes: 61 additions & 0 deletions lessons/micropython/install/linux.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Instalace pro 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 <strong>ttyUSB0</strong>
</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
```

34 changes: 34 additions & 0 deletions lessons/micropython/install/macos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Instalace pro 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, `>>>`.

Nefunguje-li to, zadej

```console
$ ls /dev/tty.*
```

a vyber jméno zařízení které přísluší tvé destičce.
(Neboj se si nechat poradit od někoho zkušenějšího.)
Toto jméno použij místo `/dev/tty.usbmodem*` v příkazu `screen` výše.

Není-li jméno zařízení vidět, je možná potřeba nainstalovat ovladač pro
USB převodník CP2102.
Ten se dá stáhnout [ze stránek výrobce][cp2012-driver].

> [note]
> Odkaz je pro destičky s USB převodníkem CP2102.
> Některé levnější modely používají převodník CH340G.
> Který převodník máš se nejlíp dozvíš od toho, kdo ti destičku poskytl.
> Ovladač k CH340G se dá dostat
> [z tohoto blogu](https://iotta.cz/ovladace-pro-ch340g/).

[cp2012-driver]: https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
52 changes: 52 additions & 0 deletions lessons/micropython/install/windows.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Instalace pro Windows


## Instalace ovladače a číslo COM portu

> [note]
> Tento návod je pro destičky s USB převodníkem CP2102.
> Některé levnější modely používají převodník CH340G.
> Který převodník máš se nejlíp dozvíš od toho, kdo ti destičku poskytl.
> Ovladač k CH340G se dá dostat
> [z tohoto blogu](https://iotta.cz/ovladace-pro-ch340g/).

Po připojení destičky se Windows nejspíš pokusí nainstalovat ovladač.
To je dobře.
Kdyby instalace potřebovala vybrat soubor, ovladač stáhni [ze stránek výrobce][cp2012-driver], rozbal a vyber.

Ze systémového menu (klávesa Windows) otevři *správce zařízení*
(Device Manager).
Pod *Ostatní zařízení* (Other Devices) nebo *Ports (COM & LPT)*
najdi položku obsahující *CP2102* nebo *CP210x*.

Je-li u položky ikonka varování ⚠, stáhni ovladač [ze stránek výrobce][cp2012-driver],
pak klikni na položku pravým tlačítkem, vyber aktualizaci ovladače a použij
dříve stažený ovladač.

Jestli ikonka ⚠ chybí (nebo zmizela), na konci jména položky by mělo
být číslo COM portu – například `(COM13)`. Číslo si zapamatuj.


## Instalace a nastavení PuTTY

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 *Save*.

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: `>>>`.

[cp2012-driver]: https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
Loading