Tento workshop nejde projít jen tak z domu – je potřeba speciální příprava. Pokyny pro organizátory najdeš na podstránce.
Vítej na workshopu MicroPythonu! Dnes si ukážeme, jak programovat – jak říkat počítači, co má dělat. Aktivita je určena lidem, kteří nikdy předtím neprogramovali.
K programování použijeme programovací jazyk. To je způsob, jak počítačům zadávat příkazy – jazyk, kterému rozumí jak počítače, tak lidé (programátoři).
Konkrétně dnes použijeme MicroPython – variantu jazyka Python přizpůsobenou na ovládání malých zařízení.
Laptop použijeme vlastně jen kvůli klávesnici a monitoru; všechno zajímavé se bude dít na té malé destičce, kterou vidíš vedle sebe a ze které vede spousta drátů. (Pro úplnost: je to deska NodeMCU s mikroprocesorem ESP8266.)
Dost povídání, pojďme na to!
Klikni na Activities; potom vyber z levého panelu Terminal (ikonka černého okýnka).
Objeví se příkazová řádka – černé okýnko s bílým textem, kam můžeš zadávat příkazy.
V příkazové řádce by měl být řádek končící dolarem. Za ten dolar napiš:
picocom -b 115200 /dev/ttyUSB0
Opisuj opatrně, každé písmenko má smysl! Pak zmáčkni Enter. Měl by se objevit následující výpis:
picocom v1.7
port is : /dev/ttyUSB0
flowcontrol : none
baudrate is : 115200
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is :
emap is : crcrlf,delbs,
Terminal ready
Pak stiskni Enter. Měly by se objevit tři zobáčky, kterými MicroPython prosí o instrukce:
>>>
Za tři zobáčky můžeš zadat nějaký matematický příklad. MicroPython ho spočítá. Zkus třeba tyhle (zobáčky nepiš, ty vypíše sám MicroPython:
>>> 1 + 1
>>> 1 - 5
>>> 3 * 3
>>> 1 / 4
>>> (84 + 5) * 100
Poznáš co dělá hvězdička nebo lomítko?
Tipneš si, proč programátoři používají tyhle symboly, a ne třeba
3 × 3
nebo ¼
?
Věděl/a jsi, že v Americe používají desetinnou tečku místo čárky? Většina programovacích jazyků ji používá taky.
MicroPython na našich destičkách má připravený objekt led
, jehož metodou
value
jde ovládat svítící dioda.
Stačí jen zadat správné příkazy:
>>> led.value(1)
>>> led.value(0)
K destičce je připojeno i tlačítko.
Metodou btn.value()
se zeptáš, jestli je právě zmáčknuté, nebo ne.
>>> btn.value()
Zkus tenhle příkaz zadat, zatímco tlačítko držíš.
Informace o tom, jestli je tlačítko zmáčknuté – btn.value()
– je číslo:
buď 0, nebo 1.
Výraz btn.value()
můžeš použít kdekoliv, kde se objevuje číslo
0, nebo 1 – třeba pro rozsvícení nebo zhasnutí diody:
>>> led.value(btn.value())
Existuje způsob, jak nechat MicroPython něco opakovat stále dokola:
takzvaný nekonečný cyklus.
Na jeden řádek napiš while True:
(s velkým T a dvojtečkou na konci)
a potom tělo cyklu – příkaz, který se má provést.
MicroPython tělo cyklu automaticky odsadí – přidá na začátek řádku
mezery. Ty mezery nemaž.
Nakonec několikrát stiskni Enter, dokud se program nespustí.
>>> while True:
... led.value(btn.value())
...
...
Nekonečný cyklus se opakuje donekonečna. Je ale způsob jak ho přerušit, až tě omrzí: zmáčkni Ctrl+C.
Další objekt, který můžeš použít, je servo
.
Ten ovládá servomotor, který můžeš nastavit na konkrétní úhel. Třeba:
>>> servo.duty(120)
>>> servo.duty(40)
... nebo něco mezi tím.
Nepoužívej prosím čísla menší než 40 nebo větší než 120, motorek se tím může ničit.
Před chvílí jsme si ukázali tento kód:
>>> led.value(btn.value())
Hodnota btn.value()
může být buď 1, nebo 0.
Pojďme ji použít pro motorek: chceme, aby se natočil buď na 40 nebo na
120, podle toho, jestli je tlačítko zmáčknuté.
Na to, abys z 0 nebo 1 udělal/a 40 nebo 120, je potřeba znát trochu matematiky:
0
× Y = 40
1
× Y = 120
Jistě zvládneš vypočítat, že X = 40 a Y = 80. Tyhle hodnoty doplnit do kódu:
>>> servo.duty(40 + btn.value() * 80)
Změníš program tak, aby se natáčel na 50
nebo 90
?
Dokážeš výsledek dát do cyklu, aby program na zmáčknutí či puštění tlačítka reagoval automaticky?
Poslední věc připojená k destičce je LED pásek s několika světýlky. Každé z nich se dá nastavit na nějakou barvu. Zkus si to:
>>> strip[0] = RED
>>> strip[1] = GREEN
>>> strip[2] = BLUE
>>> strip.write()
První tři příkazy připravují jednotlivé barvy a poslední všechno připravené
pošle do LED pásku.
Až budeš experimentovat, nezapomeň na strip.write()
– bez toho
se barvy neukážou.
Teď si přestaneme jen tak hrát a začneme psát program.
Spusť editor: Klikni na Activities; potom vyber z levého panelu Text Editor (ikonka zápisníku s tužkou).
Objeví se bílé okýnko, do kterého napiš:
strip[0] = WHITE
strip[1] = OFF
strip[2] = OFF
strip.write()
Soubor ulož (Save) pod jménem main.py
.
Potom se vrať k příkazové řádce a ukonči picocom
:
stiskni Ctrl+A a pak Ctrl+Q.
Měl by se objevit řádek končící dolarem.
Za dolar napiš:
ampy -p /dev/ttyUSB0 run main.py
... a stiskni Enter. Tento příkaz soubor s programem do zařízení nahraje a rovnou spustí.
Zkus v editoru nastavit jiné barvy a program znovu uložit (Ctrl+S).
Potom v příkazové řádce zmáčkni šipku nahoru ↑.
Tím se vrátíš k předchozímu příkazu (ampy
) a můžeš znovu stisknout
Enter a program spustit.
Tady je program, který rozbliká LED pásek.
Ukazuje větší cyklus, a navíc funkci sleep
, která MicroPython na chvíli
zdrží: sleep(1/4)
čeká čtvrtinu sekundy.
Při přepisování dávej pozor na odsazení – řádky vevnitř v cyklu musí být všechny odsazené o čtyři mezery.
strip[0] = OFF
strip[1] = OFF
strip[2] = OFF
while True:
strip[0] = RED
strip[1] = OFF
strip.write()
sleep(1/4)
strip[0] = OFF
strip[1] = RED
strip.write()
sleep(1/4)
Dokážeš naprogramovat semafor?
Se závorou?
Cykly nemusí být jen nekonečné. Tady je cyklus, který čeká dokud není stisknuté tlačítko.
Potom se rozsvítí světlo – všimni si, že příkaz led.value(1)
už není
odsazený. Není součást cyklu.
led.value(0)
while btn.value():
sleep(1/100)
led.value(1)
Polož na tlačítko nějaký těžší předmět (třeba myš) tak, aby bylo zmáčknuté. Když někdo předmět vezme, tlačítko přestane být zmáčknuté.
Napiš program, který na to bude čekat a jakmile někdo myš ukradne, LED pásek začne zuřivě blikat.
Tím dnešní krátká exkurze do světa MicroPythonu končí. Jestli tě programování zaujalo a chceš v něm pokračovat, dej nám vědět!
Nebo pak z klidu domova napiš Petrovi na pviktori@redhat.com.