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 případný hardware objednat přes Internet, typicky z čínských e-shopů.
Materiály byly připraveny pro celodenní workshop; na kratší lekcích může být něco vynecháno.
Dnes budeme programovat malé zařízení – tak malé, že 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ěla 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í.
Obal bude nejspíš roztržený, protože organizátoři na destičku před začátkem kurzu nainstalovali MicroPython.
Teď, když destičku držíš v ruce, si pojďme projít její základní součásti.
Nejdůležitější část vývojové desky je v oplechované krabičce s logem "Wi-Fi" a "FCC": mikroprocesor ESP8266. 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ě anténa, 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 μUSB konektor, 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:
RST
, 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 FLASH
, o kterém si povíme později.
Po stranách modulu jsou dvě řady „nožiček”, 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.
Bohužel se dnes neobejdeme bez instalace. Musíš naučit svůj počítač, aby si s destičkou povídal.
Nejdřív si do virtuálního prostředí nainstaluj program Ampy od Adafruitu. Ten budeme později používat na nahrávání kódu:
(env)$ python -m pip install adafruit-ampy
Pak propoj modul s počítačem přes USB kabel, jako kdybys připojovala třeba mobil.
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 stránkách MicroPythonu.
Na správně nastaveném počítači stačí zadat:
$ 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.)
picocom
nainstalovaný,
je potřeba ho nainstalovat (např.
sudo dnf install picocom
nebo
sudo apt-get install picocom
).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: $ 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 ttyUSB0
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:
$ sudo usermod -a -G dialout $(whoami)
Poté je potřeba se znovu přihlásit, třeba příkazem:
$ su - $(whoami)
Pro ověření spusť příkaz groups
; v jeho výstupu by mělo být dialout
.
Například:
$ groups
kristyna lp wheel dialout mock
Kdyby to nefungovalo, na srazu ti může pomoci nějaký kouč.
Jestli procházíš materiály z domu a nepovedlo
se ti přidat do skupiny, dá se to obejít tak,
že místo picocom
použiješ sudo picocom
.
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, případně z materiálů pro Arduino workshop.
Pak si nainstaluj si program
PuTTY
(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 a nastav Speed na 115200
a Flow Control na None:
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: >>>
.
V příkazové řádce zadej:
$ 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.
Tak jako máš na počítači nainstalovaný operační systém, na vývojové desce je takzvaný firmware, program, který ovládá všechny ty drátky, čipy a světýlka, co v ní jsou. My používáme firmware zvaný MicroPython, který navíc rozumí jazyku Python a umí provádět pythonní příkazy. Zkus si to! Tři zobáčky, které vyskočily v minulém kroku, přišly ze zařízení, které teď netrpělivě čeká na příkaz.
>>> 1+1
2
>>> print('Hello World')
Hello World
Téměř vše, co používáš v Pythonu na počítači, umí MicroPython taky: čísla, řetězce, seznamy, třídy, výjimky, moduly a tak dál. Některé detaily ale jsou trochu osekané, aby se všechno vešlo do extrémně malého prostoru. Zkus si, jak se liší efekt následujících příkazů od „velkého” Pythonu:
>>> print
>>> import math
>>> math.pi
Nejdůležitější věc, která je osekaná, je standardní
knihovna – většina modulů, které na
počítači můžeš naimportovat, v MicroPythonu chybí.
U modulů jako turtle
je to pochopitelné,
ale v rámci šetření místem chybí i moduly jako random
.
Většinou to příliš nevadí – malá zařízení se používají
na jiné věci než ty velké – ale je potřeba si na to
dát pozor.
Některé věci ze standardní knihovny se dají najít
ve zjednodušené formě na jiných místech.
Například ačkoliv modul random
chybí,
náhodné číslo od 0 do 255 se dá získat pomocí:
>>> from os import urandom
>>> urandom(1)[0]
61
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:
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 –
můžeš si zkontrolovat, že Pin(0) u sebe má poznámku FLASH.
Teď na chvíli necháme programování a postavíme si elektrický obvod. Vezmi si modrou svítivou diodu (LED, „světýlko”) a nepájivé pole („hloupou destičku”). Zkusíme světýlko rozsvítit.
LED rozsvítíš tak, že ji připojíš ke zdroji napětí, například k baterce.
Jako zdroj napětí můžeme použít i náš modul.
Ten bere elektřinu přes USB a dává nám ji k dispozici
na některých svých „nožičkách”:
konkrétně plus na nožičce označené 3V
a mínus na nožičce označené G
.
Na tyhle nožičky musíš zapojit diodu.
Připojování diody má jeden háček: musíš ji zapojit správným směrem – plus na plus, mínus na mínus. Opačně dioda svítit nebude. Dobrá zpráva je, že když diodu otočíš špatně, nic se jí nestane.
Základní vlastnost diody je ta, že pustí elektrický proud jen jedním směrem. Svítící dioda – angl. Light Emitting Diode, LED – ještě k tomu navíc svítí.
Je potřeba rozpoznat rozdíl mezi nožičkami diody.
Katoda (-
) je ta kratší nožička.
Pouzdro diody je u katody trochu seříznuté
a vevnitř v pouzdře, když se pozorně podíváš, uvidíš
u katody větší plíšek.
Té druhé nožičce se říká anoda (+
).
Tak, teď víš, kam diodu zapojit: katodu (kratší nožičku)
na G
a anodu na 3V
.
Držení nožiček diody u nožiček modulu by ti nejspíš zaměstnalo obě ruce. Aby sis je uvolnila, použij nepájivé pole (angl. breadboard). Je v něm spousta dírek, do kterých se dají strkat dráty. V rámci každé poloviny destičky je každá řada dírek – tedy každá pětice – spojená dohromady. Když zapojíš drátky do stejné řady, spojíš je tím.
Zasuň modul do nepájivého pole. Pak připoj katodu
do dírky ve stejné řadě, kde je nožička
3V
modulu, a podobně anodu k G
.
Mělo by to vypadat jako na tomto obrázku:
Potom zapoj USB kabel. Dioda by se měla rozsvítit!
Zkus si, co se stane, když obě nožičky diody zapojíš ke G
.
Aby dioda svítila, musí být připojená na dvě místa,
mezi kterými je takzvaný potenciálový rozdíl — napětí.
Na nožičce G
je 0 voltů; na nožičce
3V
jsou 3,3 volty – je tedy mezi nimi rozdíl 3,3 V, přesně tolik,
kolik modrá LED potřebuje ke svícení.
Samotná hodnota napětí nedává smysl – například
říct, že je na jednom místě 3,3 V je nepřesné.
Hodnota ve voltech se vždycky musí k něčemu vztahovat;
vyjadřuje rozdíl mezi dvěma místy.
V elektronice používáme rozdíl oproti „zemi” – napětí
na nožičce G
. Stanovíme si, že tam je
0 voltů a ostatní napětí počítáme vzhledem k ní.
Na nožičce 3V
je tedy napětí 3,3 V vzhledem k zemi.
Proč jsme diodu na to, aby se rozsvítila,
připojili k modulu a ne jen k baterce?
Ten modul je trošku složitější zařízení než baterka a jedna důležitá věc,
kterou umí navíc, je nastavovat napětí na různých nožičkách.
Umí zařídit, aby se nožička chovala jednou jako 3V
a jindy jako G
.
Když připojíš diodu mezi G
a takovou
přepínatelnou nožičku, můžeš nastavit, kdy svítí a kdy ne.
Přepoj anodu diody z 3V3
na D5
. Katodu nech na G
.
Máš-li zapojeno, znovu se připoj k MicroPythonu a zadej následující kód:
from machine import Pin
pin = Pin(14, Pin.OUT)
pin.value(0)
pin.value(1)
Když objekt Pin vytvoříš s Pin.OUT
, MicroPython na něm bude nastavovat
napětí – buď 3,3 V (value(1)
) nebo 0 V (value(0)
).
A tak se dá s diodou blikat.
Číslování nožiček je bohužel dvojí – nožička
označená jako D5
má v procesoru přiřazené číslo 14.
Třída Pin
v MicroPythonu používá číslování procesoru.
Naštěstí máš tahák,
kde snadno dohledáš že D5
a Pin(14)
jsou dvě jména stejné nožičky.
Zvládneš napsat program, který zařídí, aby dioda
svítila když je zmáčknuté tlačítko FLASH
, jinak ne?
Nápověda: Můžeš pořád dokola zjišťovat stav tlačítka a nastavovat podle něj stav LED.
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.
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 led_podle_tlacitka.py
dej následující kód:
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
).
K pouštění programu použijeme ampy
, který jsi nainstalovala dříve.
Ke spuštění budeš potřebovat znát port:
picocom
, např. /dev/ttyUSB0
COM13
screen
, např. /dev/tty.usbmodem*
ampy
spusť následujícím příkazem, jen za PORT
doplň svůj port:
(venv)$ ampy -p PORT run led_podle_tlacitka.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.
Jedna z nevýhod „našeho” čipu ESP8266 je, že na svých nožičkách umí nastavovat jen dvě hodnoty – 3,3 V a zem, jedničku a nulu. Dioda tak buď svítí, nebo nesvítí – nedá se nastavit poloviční intenzita, nedá se plynule rozsvěcet nebo zhasínat.
Tuhle nevýhodu ale můžeme obejít s využitím dvou faktů. Ten první je, že diodám – na rozdíl od žárovek nebo zářivek – nevadí časté vypínání a zapínání. Opotřebovávají se spíš svícením a časem. Druhý je, že lidské oko nestačí zaznamenat pohyby a změny, které probíhají rychleji než zhruba za setinu vteřiny.
Pojďme tedy velice rychle blikat – a oblafnout tak naše oči a mozky!
from machine import Pin
from time import sleep
pin_diody = Pin(14, Pin.OUT)
while True:
pin_diody.value(0) # vypnout LED
sleep(2/100) # počkat dvě setiny vteřiny
pin_diody.value(1) # zapnout LED
sleep(1/100) # počkat jednu setinu vteřiny
Zkus si pohrát s hodnotami pro time.sleep
.
Takhle fungují prakticky všechna stmívatelná LED světla – rychlé blikání je ekonomičtější a přesnější než např. nastavování nižšího napětí.
Dokážeš napsat program, který diodu postupně, plynule rozsvítí?
Protože je takovéhle rychlé blikání užitečné ve spoustě různých situací, obsahuje MicroPython speciální funkci: umí blikat samostatně. Nastavíš, jak rychle má blikat a jak dlouho má trvat každé bliknutí, a MicroPython pak bude blikat automaticky, zatímco tvůj program se může věnovat něčemu jinému.
Téhle funkci se říká pulzně šířková modulace –
angl. Pulse Width Modulation, neboli PWM.
Z MicroPythonu jde tahle funkce ovládat pomocí třídy
machine.PWM
.
Každý objekt téhle třídy umí ovládat jednu nožičku
a dají se u něj nastavit dva parametry:
freq
– frekvence, tedy kolikrát za sekundu se LED rozsvítí a zase zhasne aduty
– anglicky duty cycle, česky střída, nastavuje „šířku pulzu”,
tedy jak dlouho bude dioda při každém bliknutí svítit.
Hodnota duty
může být od 0, kdy LED
nesvítí vůbec, do 1023, kdy svítí celou dobu.
Nastavíš-li duty=512
, bude dioda
svítit s poloviční intenzitou (512 = 1024/2).Nastavíš-li PWM(freq=50, duty=512)
, dioda bude blikat 50× za sekundu.
Vždycky jednu setinu vteřiny bude svítit a na jednu
setinu vteřiny zhasne.
from machine import Pin, PWM
from time import sleep
pin_diody = Pin(14, Pin.OUT)
pwm = PWM(pin_diody, freq=50, duty=512)
Zkus nastavit i nižší frekvenci, třeba 3 nebo 1, ať blikání vidíš přímo!
PWM se dá zrušit metodou pwm.deinit()
.
Jako s otvíráním souborů, je dobré po sobě uklidit –
i když zatím můžeš jednoduše restartovat celé zařízení.
Vezmi si další součástku – piezobudič, neboli „bzučítko”.
Tahle malá věc obsahuje speciální materiál, který se, když ho připojíš ke zdroji napětí, trošku roztáhne. Roztažením zatlačí na okolní vzduch a vytvoří tlakovou vlnu, která může doputovat až k tvým uším.
Zkus si to – když bzučítko připojíš na 3V
a G
(tentokrát je jedno kterým směrem), uslyšíš tiché lupnutí.
A podobné lupnutí uslyšíš když součástku zase odpojíš.
Co se stane, když budeš napětí připojovat a odpojovat, řekněme, 32× za vteřinu?
Nebo 65×?
Nebo některou z těchto frekvencí? Hz – Hertz – je jednotka frekvence; „49 Hz“ znamená „49× za sekundu“.
Nota | Frekvence |
---|---|
C1 | 32,70 Hz |
D | 36,71 Hz |
E | 41,20 Hz |
F | 43,65 Hz |
G | 49,00 Hz |
A | 55,00 Hz |
H | 61,74 Hz |
C2 | 65,41 Hz |
Naprogramuj písničku! Potřebuješ-li víc not, pusť si program, který vypočítá další frekvence.
Teď si vezmi dvě tlačítka a připoj je k modulu:
GND
vždycky na G
, VCC
vždycky na 3V
a
OUT
u jednoho tlačítka na D1
a u druhého na D2
.
Tlačítko funguje tak, že OUT spojí buď s VCC (5V) nebo GND, podle toho, jestli je tlačítko stisknuté. (A navíc to taky teda svítí, ale to je teď vedlejší.)
Zkus si, jestli se zvládneš MicroPythonu zeptat, jestli je tlačítko zapnuté. Mělo by to být podobné jako u příkladu s tlačítkem FLASH.
Zvládneš napsat program, který bude bzučet bzučítkem a přitom se jedním tlačítkem bude dát zvyšovat tón a druhým snižovat?
Program si (na svém počítači) ulož, ať se k němu můžeš vrátit.
Čas na další součástku! Tentokrát to bude servomotor.
Servomotor je součástka, která má v sobě zabudovaný ovladač, se kterým si naše zařízení může povídat jednoduchým „elektronickým jazykem” – protokolem. Motorku můžeš posílat impulzy a podle délky impulzu se servomotor natočí. Při krátkých impulzech se natočí víc na jednu stranu, při dlouhých na druhou. Impulzy musíš posílat neustále, jinak se servomotor vypne.
Na rozdíl od bzučítka, kde o výšce tónu rozhodovala
frekvence (freq
) – kolikrát za vteřinu
se ozve lupnutí – a LED, kde o intenzitě rozhodovala
střída (duty
) – poměr mezi dobou kdy
dioda svítí a kdy nesvítí, u servomotoru rozhoduje
tzv. šířka pulzu: jak dlouho se napětí udrží
na 3,3 V, než se přepne zpátky na 0 V.
V praxi to znamená, že můžeš nastavit freq
na 50 Hz, a duty
měnit cca od 35
(úplně vlevo) přes 77 (uprostřed) po 120 (úplně vpravo).
Dost ale teorie, pojďme si to vyzkoušet! Napřed musíš motorek zapojit:
G
,3V
aD4
.Nožička D4
odpovídá Pin(2)
, takže kód k otáčení motorku je:
from machine import Pin, PWM
from time import sleep
pin_motorku = Pin(2, Pin.OUT)
pwm = PWM(pin_motorku, freq=50, duty=77)
pwm.duty(35)
Zkus motorkem otáčet nastavováním duty
na 35 do 120.
Kdyby se náhodou stalo, že se modul restartuje a
konzole přestane fungovat, zkus ho odpojit a znovu
připojit. Kdyby to nepomohlo, motorek ti dneska
nebude fungovat. Za chvíli si řekneme proč; zatím (jsi-li na kurzu)
se přidej do dvojice k někomu, komu to funguje.
K tomu, aby se otočil motor, je potřeba mnohem víc energie, než k rozsvícení světýlka. Z USB z počítače té energie dostaneš docela málo, proto můžou být s motorkem problémy.
Jak to řešit, až si přestaneš hrát a budeš chtít motorkem otáčet „doopravdy”?
Elektronika, která je na našem modulu mimo malou destičku s „mozkem” má dva hlavní úkoly:
TX
a RX
).Když energie z USB přestane stačit, dá se koupit zařízení, které zvládne převádět komunikaci a napájení vyřešit z jiného zdroje 5 V. Kdybys to někdy zkoušela, příslušné zařízení koupíš pod názvem USB-TTL adapter a vypadá nejčastěji takhle:
K modulu pak tento převodník a zdroj napětí připojíš takto:
GND
na převodníku – G
na desceRX
na převodníku – TX
(!) na desceTX
na převodníku – RX
(!) na desce+5V
na zdroji napětí na VIN
na desceG
na descePozor, 5V nepřipojuj jinam než na VIN
!
Další důvod, proč ti servomotor někdy nefunguje dobře, je to, že je stavěný na 5 voltů, ne na 3,3 které poskytuje modul.
Když připojíš zařízení k menšímu napětí, než potřebuje, většinou buď nebude fungovat, nebo bude dělat „míň” než by mělo: LED bude míň svítit, reproduktor bude tišší, motorek se bude točit pomaleji nebo s menší silou.
Když naopak připojíš zařízení k většímu napětí, než na jaké je stavěno, nejspíš ho nadobro zničíš. Když připojíš červenou LED přímo na 3,3 V, přestane fungovat; když připojíš malý servomotorek na zdroj 24 V, může začít hořet. A ačkoli lidem malá napětí jako 5 V nevadí, když připojíš do zásuvky s 230 V sama sebe, můžeš umřít. Takže na velká napětí pozor!
My motorek připojujeme na malé napětí a zmenšený výkon nám příliš nevadí – dokud se to otáčí, víc rychlosti ani síly nepotřebujeme.
Až to ale potřebovat budeš – například až budeš servomotorkem pohánět ruku robota, která bude zvedat těžké náklady, budeš potřebovat dvě věci:
Kdybys to někdy potřebovala, ozvi se koučům – i po workshopu ti určitě rádi poradí nebo ti aspoň řeknou koho se zeptat!
Tak, dost teorie; vezmi si novou hračku! Tentokrát to bude LED pásek.
Na pásku máš 8 malých čtverečků. Každý z nich obsahuje docela hodně elektroniky: tři barevné LED (červenou, zelenou a modrou) a čip, který je umí ovládat pomocí informací, které dostane přes jediný drátek z modulu.
Takové pásky se prodávají po metrech a dají se nastříhat – mezi jednotlivými světýlky si všimni čárky, která naznačuje, kde máš střihnout. Energie z USB stačí zhruba na osm světýlek, proto jsi jich dostala tolik.
Tenhle LED pásek je, podobně jako servomotorek, stavěný na pět voltů. Na rozdíl od motorku, který se s 3,3 V trochu roztočil, se ale s nižším napětím ani nerozsvítí. Naštěstí ale potřebuje 5 V jen na napájení; řídící signál s informacemi o barvičkách může mít 3,3 V.
Pojďme pásek zapojit:
GND
pásku (bílý drátek) připoj na G
DI
(data in – zelený drátek) připoj na D4
+5V
(červený drátek) připoj:VU
, má-li tvoje destička tuhle nožičku,VIN
.Nožička VU
/VIN
poskytuje 5 voltů.
Pozor na ni: nepřipojuj na ni zařízení, které se s pěti volty nevyrovnají.
Máš-li zapojeno, můžeš začít programovat. „Jazyk”, kterým „mluví” tenhle LED pásek je trošku složitější než signál PWM, ale MicroPython obsahuje speciální knihovnu, která s páskem komunikovat umí. Vypadá to nějak takhle:
from machine import Pin from neopixel import NeoPixel POCET_LED = 8 pin = Pin(2, Pin.OUT) np = NeoPixel(pin, POCET_LED) np[0] = (255, 255, 255) np.write()
Co znamenají ta čísla (0
a 255
), na to už jistě přijdeš sama.
Jen při experimentování nezapomeň zavolat
np.write()
, tím se informace pošlou do LED pásku.
Zvládneš naprogramovat semafor?
{ "data": { "sessionMaterial": { "id": "session-material:2018/pyladies-brno-podzim:micropython:0", "title": "MicroPython", "html": "\n \n \n\n <h1>MicroPython na malém zařízení</h1>\n<div class=\"admonition note\"><p class=\"admonition-title\">Tahle sekce bohužel nejde jednoduše projít z domu.</p>\n<p>Využíváme speciální vybavení, které je potřeba nejdřív\nsehnat. Máš-li možnost se dostat na sraz, nebo\naspoň kontaktovat organizátory, doporučujeme shánět\nspíš tímto způsobem.\nPřípadně jde případný hardware objednat přes Internet,\ntypicky z čínských e-shopů.</p>\n</div><div class=\"admonition note\"><p>Materiály byly připraveny pro celodenní workshop;\nna kratší lekcích může být něco vynecháno.</p>\n</div><p><span class=\"figure float-right\"><a href=\"/2018/pyladies-brno-podzim/beginners/micropython/static/nodemcu-devkit.jpg\"><img src=\"/2018/pyladies-brno-podzim/beginners/micropython/static/nodemcu-devkit.jpg\" alt=\"LoLin NodeMCU v3 – Vývojová deska s čipem ESP8266\"></a></span></p>\n<p>Dnes budeme programovat malé zařízení –\ntak malé, že ho pohodlně schováš v ruce.\nKonkrétně budeme používat „chytrou destičku”, modul zvaný\n<em>NodeMCU Devkit</em>, která by měla ležet před tebou.\nNež ji vyndáš z obalu, měla by ses <em>vybít</em>:\ndotkni se něčeho kovového, co je spojeno se zemí,\ntřeba radiátoru nebo kovové části schránky nějakého\nspotřebiče, který je zapojený do zásuvky.\nTím se zbavíš statické elektřiny, která by mohla\nmalinké zařízení poškodit.\nPak přístroj vyndej z obalu. Snaž se ho držet za\nhrany a příliš se nedotýkat elektroniky a kovových\nčástí.</p>\n<div class=\"admonition note\"><p>Obal bude nejspíš roztržený, protože organizátoři\nna destičku před začátkem kurzu nainstalovali\nMicroPython.</p>\n</div><p>Teď, když destičku držíš v ruce, si\npojďme projít její základní součásti.</p>\n<p><br style=\"clear: both;\"></p>\n<p><span class=\"figure float-left\"><a href=\"/2018/pyladies-brno-podzim/beginners/micropython/static/nodemcu-popisky.svg\"><img src=\"/2018/pyladies-brno-podzim/beginners/micropython/static/nodemcu-popisky.svg\" alt=\"Obrázek desky NodeMCU DevKit\"></a></span></p>\n<p>Nejdůležitější část vývojové desky je v oplechované\nkrabičce s logem "Wi-Fi" a "FCC":\n<span class=\"part-green\">mikroprocesor ESP8266</span>.\nTo je „mozek” celého zařízení, který – když je\nsprávně naprogramován – umí provádět pythonní\npříkazy a programy.\nProcesor sedí na malé destičce, na které je ještě\n<span class=\"part-cyan\">anténa</span>, kterou\npřístroj může komunikovat s okolím.</p>\n<p>Tahle malá destička se dá použít i samostatně;\nvšechno ostatní, co kolem ní zabírá tolik místa,\nnám jen ulehčí hraní a umožní se zařízením\njednoduše komunikovat a krmit ho elektřinou.</p>\n<p>Komunikace a „krmení” se děje přes\n<span class=\"part-red\">μUSB konektor</span>,\ndo kterého zapojíš kabel ze svého počítače.\nKdyž je modul naprogramovaný, stačí ho místo do\npočítače zapojit do nabíječky či externího zdroje\n(powerbanky) a bude fungovat samostatně.</p>\n<p>Kolem USB konektoru jsou dvě tlačítka:\n<code class=\"part-orange\">RST</code>, kterým se destička restartuje\n(skoro jako kdybys ho odpojila a zase zapojila, což\nse hodí, když něco uděláš špatně a modul „zamrzne”),\na <code class=\"part-yellow\">FLASH</code>, o kterém si povíme později.</p>\n<p>Po stranách modulu jsou dvě řady\n<span class=\"part-blue\">„nožiček”</span>, na které\nse dá napojit celá řada nejrůznějších hraček.\nZkontroluj si, jestli jsou všechny nožičky rovné;\nkdyby byla některá ohnutá, tak ji (nejlépe s pomocí\nkouče) narovnej nebo si vezmi jinou destičku.</p>\n<p><br style=\"clear: both;\"></p>\n<h2>Instalace</h2>\n<p>Bohužel se dnes neobejdeme bez instalace. Musíš naučit\nsvůj počítač, aby si s destičkou povídal.</p>\n<p>Nejdřív si do virtuálního prostředí nainstaluj program Ampy od Adafruitu.\nTen budeme později používat na nahrávání kódu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">(env)$ </span>python -m pip install adafruit-ampy\n</pre></div><p>Pak propoj modul s počítačem přes USB kabel,\njako kdybys připojovala třeba mobil.</p>\n<div class=\"admonition note\"><p>Je potřeba použít kvalitní datový kabel.\nNekvalitní kabely (např. spousta kabelů k\nnabíječkám) jsou často nepoužitelné.</p>\n</div><p>Dál postupuj podle operačního systému na svém počítači.\nKdyby něco nefungovalo, poraď se s koučem.\nPůvodní (anglický) návod k této části je na\n<a href=\"http://docs.micropython.org/en/latest/pyboard/pyboard/tutorial/repl.html\">stránkách MicroPythonu</a>.</p>\n<h3>Linux</h3>\n<p>Na správně nastaveném počítači stačí zadat:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>picocom -b <span class=\"m\">115200</span> --flow n /dev/ttyUSB0\n</pre></div><p>Pokud příkaz neskončí s chybou, stiskni tlačítko <code>RST</code> na modulu.\nMěly by se nakonec objevit tři zobáčky, <code>>>></code>.</p>\n<p>Většina počítačů ale na komunikaci s malými zařízeními nastavená není.\nSkončí-li příkaz <code>picocom</code> s chybou,\noprav ji podle následujícího návodu a zkus to znova.\n(Možná bude potřeba vyřešit víc než jednu chybu.)</p>\n<ul>\n<li>Nemáš-li příkaz <code>picocom</code> nainstalovaný,\nje potřeba ho nainstalovat (např.\n<code>sudo dnf install picocom</code> nebo\n<code>sudo apt-get install picocom</code>).</li>\n<li>Pokud <code>picocom</code> skončil s chybou\n<code>No such file or directory</code>, pravděpodobně\nje potřeba k zařízení přistupovat přes jiný soubor.\nPoužij příkaz <code>dmesg | tail</code>, který vypíše něco jako:</li>\n</ul>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\"> $ </span>dmesg <span class=\"p\">|</span> tail\n<span class=\"go\"> [703169.886296] ch341 1-1.1:1.0: device disconnected</span>\n<span class=\"go\"> [703176.972781] usb 1-1.1: new full-speed USB device number 45 using ehci-pci</span>\n<span class=\"go\"> [703177.059448] usb 1-1.1: New USB device found, idVendor=1a86, idProduct=7523</span>\n<span class=\"go\"> [703177.059454] usb 1-1.1: New USB device strings: Mfr=0, Product=2, SerialNumber=0</span>\n<span class=\"go\"> [703177.059457] usb 1-1.1: Product: USB2.0-Serial</span>\n<span class=\"go\"> [703177.060474] ch341 1-1.1:1.0: ch341-uart converter detected</span>\n<span class=\"go\"> [703177.062781] usb 1-1.1: ch341-uart converter now attached to ttyUSB0</span>\n</pre></div><p>Máš-li místo <code>ttyUSB0</code> něco jiného, v příkazu <code>picocom</code> to použij místo\n <code>ttyUSB0</code>.</p>\n<ul>\n<li><p>Pokud <code>picocom</code> skončil s chybou <code>Permission denied</code>, potřebuješ získat\npřístup k souboru zařízení.\nTo znamená přidat se do příslušné skupiny:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>sudo usermod -a -G dialout <span class=\"k\">$(</span>whoami<span class=\"k\">)</span>\n</pre></div><p>Poté je potřeba se znovu přihlásit, třeba příkazem:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>su - <span class=\"k\">$(</span>whoami<span class=\"k\">)</span>\n</pre></div><p>Pro ověření spusť příkaz <code>groups</code>; v jeho výstupu by mělo být <code>dialout</code>.\nNapříklad:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>groups\n<span class=\"go\">kristyna lp wheel dialout mock</span>\n</pre></div><p>Kdyby to nefungovalo, na srazu ti může pomoci nějaký kouč.\nJestli procházíš materiály z domu a nepovedlo\nse ti přidat do skupiny, dá se to obejít tak,\nže místo <code>picocom</code> použiješ <code>sudo picocom</code>.</p>\n</li>\n</ul>\n<h3>Windows</h3>\n<p>MicroPython se přihlásí jako COM port. Otevři\nsprávce zařízení a zjisti, který COM port to je (kouč s tím pomůže).</p>\n<p>Nebylo-li zařízení nalezeno, je potřeba nainstalovat\n<em>driver</em>, který je ke stažení třeba\n<a href=\"http://kig.re/2014/12/31/how-to-use-arduino-nano-mini-pro-with-CH340G-on-mac-osx-yosemite.html\">z tohoto blogu</a>,\npřípadně z <a href=\"https://onedrive.live.com/?authkey=%21AKLO1lLajaeTmo4&id=182EF9BC3A8BDDA4%2166743&cid=182EF9BC3A8BDDA4\">materiálů pro Arduino workshop</a>.</p>\n<p>Pak si nainstaluj si program\n<a href=\"http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html\">PuTTY</a>\n(<code>putty.exe</code>) a spusť ho.\nV konfiguračním okýnku zaškrtni <em>Connection Type: Serial</em> a\ndo <em>Serial line:</em> zadej svůj COM port.\nPak přepni v seznamu vlevo na <em>Serial</em> a nastav <em>Speed</em> na <em>115200</em>\na <em>Flow Control</em> na <em>None</em>:</p>\n<p><span class=\"figure\"><a href=\"/2018/pyladies-brno-podzim/beginners/micropython/static/putty-config.jpg\"><img src=\"/2018/pyladies-brno-podzim/beginners/micropython/static/putty-config.jpg\" alt=\"Obrázek nastavení PuTTY\"></a></span></p>\n<p>Potom zpátky v kategorii <em>Session</em> můžeš nastavení uložit pro příště:\ndo políčka <em>Saved Sessions</em> zadej <em>MicroPython</em> a klikni OK.</p>\n<p>Nakonec klikni <em>Open</em>. Mělo by se otevřít\nokýnko podobné konzoli, kde se, když zmáčkneš\nna modulu <code>RST</code>, objeví nakonec tři zobáčky: <code>>>></code>.</p>\n<h3>macOS</h3>\n<p>V příkazové řádce zadej:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">$ </span>screen /dev/tty.usbmodem* <span class=\"m\">115200</span>\n</pre></div><p>a stiskni Enter.\nPak na modulu zmáčkni <code>RST</code>.\nMěly by se nakonec objevit tři zobáčky, <code>>>></code>.</p>\n<p>Nejde-li to, je možná potřeba nainstalovat driver. Ten se dá stáhnout\nz <a href=\"https://tzapu.com/ch340-ch341-serial-adapters-macos-sierra/\">tohoto blogu</a>.</p>\n<h2>MicroPython – taky Python</h2>\n<p>Tak jako máš na počítači nainstalovaný operační\nsystém, na vývojové desce je takzvaný <em>firmware</em>,\nprogram, který ovládá všechny ty drátky,\nčipy a světýlka, co v ní jsou.\nMy používáme firmware zvaný <em>MicroPython</em>,\nkterý navíc rozumí jazyku Python a umí provádět pythonní příkazy. Zkus si to!\nTři zobáčky, které vyskočily v minulém kroku, přišly\nze zařízení, které teď netrpělivě čeká na příkaz.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">>>> </span><span class=\"mi\">1</span><span class=\"o\">+</span><span class=\"mi\">1</span>\n<span class=\"go\">2</span>\n<span class=\"gp\">>>> </span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">'Hello World'</span><span class=\"p\">)</span>\n<span class=\"go\">Hello World</span>\n</pre></div><p>Téměř vše, co používáš v Pythonu na počítači,\numí MicroPython taky: čísla, řetězce, seznamy, třídy,\nvýjimky, moduly a tak dál.\nNěkteré detaily ale jsou trochu osekané, aby se všechno\nvešlo do extrémně malého prostoru.\nZkus si, jak se liší efekt následujících příkazů\nod „velkého” Pythonu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">>>> </span><span class=\"k\">print</span>\n<span class=\"gp\">>>> </span><span class=\"kn\">import</span> <span class=\"nn\">math</span>\n<span class=\"gp\">>>> </span><span class=\"n\">math</span><span class=\"o\">.</span><span class=\"n\">pi</span>\n</pre></div><p>Nejdůležitější věc, která je osekaná, je <em>standardní\nknihovna</em> – většina modulů, které na\npočítači můžeš naimportovat, v MicroPythonu chybí.\nU modulů jako <code>turtle</code> je to pochopitelné,\nale v rámci šetření místem chybí i moduly jako <code>random</code>.\nVětšinou to příliš nevadí – malá zařízení se používají\nna jiné věci než ty velké – ale je potřeba si na to\ndát pozor.</p>\n<p>Některé věci ze standardní knihovny se dají najít\nve zjednodušené formě na jiných místech.\nNapříklad ačkoliv modul <code>random</code> chybí,\nnáhodné číslo od 0 do 255 se dá získat pomocí:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">>>> </span><span class=\"kn\">from</span> <span class=\"nn\">os</span> <span class=\"kn\">import</span> <span class=\"n\">urandom</span>\n<span class=\"gp\">>>> </span><span class=\"n\">urandom</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"go\">61</span>\n</pre></div><h2>Vstup</h2>\n<p>MicroPython na malé destičce obsahuje některé\nmoduly, které jinde nenajdeš. Ten hlavní se jmenuje\n<code>machine</code> a zpřístupňuje základní funkce zařízení. Zkus si:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span>\n<span class=\"n\">pin</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">IN</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">pin</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">())</span>\n</pre></div><p>Zmáčkni a drž tlačítko <code>FLASH</code> vedle USB konektoru.\nPřitom pusť <code>print(pin.value())</code> znovu.\nJak se hodnota změní?</p>\n<p>Jak tomuhle kódu rozumět?\nTřída <code>Pin</code> ti umožňuje ovládat jednotlivé\n„nožičky”, kterými zařízení komunikuje s vnějším\nsvětem: buď na nich nastavovat napětí, nebo zkoumat\njestli na nich nějaké napětí je.</p>\n<p><code>Pin(0, Pin.IN)</code> vytvoří objekt třídy Pin,\nkterý bude načítat data z „nožičky” číslo 0.\n(<code>IN</code> znamená načítání – informace jdou <em>do</em> procesoru).\nFunkce <code>pin.value()</code> změří napětí na dané\n„nožičce” a vrátí buď 1 nebo 0 podle toho, jestli nějaké naměřila.</p>\n<p>No a „nožička” číslo 0 je připojená k tlačítku <code>FLASH</code>,\nkterým se tak dá ono napětí ovládat.\nInformace o tom, která nožička je kam připojená,\nmáš na <a href=\"https://pyvec.github.io/cheatsheets/micropython/nodemcu-cs.pdf\">taháku</a> –\nmůžeš si zkontrolovat, že Pin(0) u sebe má poznámku FLASH.</p>\n<h2>Obvod</h2>\n<p>Teď na chvíli necháme programování a postavíme si elektrický obvod.\nVezmi si modrou svítivou diodu (LED, „světýlko”) a\nnepájivé pole („hloupou destičku”).\nZkusíme světýlko rozsvítit.</p>\n<p>LED rozsvítíš tak, že ji připojíš ke <em>zdroji napětí</em>, například k baterce.</p>\n<p>Jako zdroj napětí můžeme použít i náš modul.\nTen bere elektřinu přes USB a dává nám ji k dispozici\nna některých svých „nožičkách”:\nkonkrétně plus na nožičce označené <code>3V</code>\na mínus na nožičce označené <code>G</code>.\nNa tyhle nožičky musíš zapojit diodu.</p>\n<p>Připojování diody má jeden háček:\nmusíš ji zapojit správným směrem – plus na plus, mínus na mínus.\nOpačně dioda svítit nebude. Dobrá zpráva je, že\nkdyž diodu otočíš špatně, nic se jí nestane.</p>\n<div class=\"admonition note\"><p>Základní vlastnost <em>diody</em> je ta, že pustí\nelektrický proud jen jedním směrem. Svítící dioda\n– <em>angl. Light Emitting Diode, LED</em> – ještě k\ntomu navíc svítí.</p>\n</div><p>Je potřeba rozpoznat rozdíl mezi nožičkami diody.\n<em>Katoda</em> (<code>-</code>) je ta kratší nožička.\nPouzdro diody je u katody trochu seříznuté\na vevnitř v pouzdře, když se pozorně podíváš, uvidíš\nu katody větší plíšek.\nTé druhé nožičce se říká anoda (<code>+</code>).</p>\n<p>Tak, teď víš, kam diodu zapojit: katodu (kratší nožičku)\nna <code>G</code> a anodu na <code>3V</code>.</p>\n<p>Držení nožiček diody u nožiček modulu by ti nejspíš\nzaměstnalo obě ruce. Aby sis je uvolnila, použij\n<em>nepájivé pole</em> (angl. <em>breadboard</em>).\nJe v něm spousta dírek, do kterých se dají strkat dráty.\nV rámci každé poloviny destičky je každá řada dírek –\ntedy každá pětice – spojená dohromady.\nKdyž zapojíš drátky do stejné řady, spojíš je tím.</p>\n<p>Zasuň modul do nepájivého pole. Pak připoj katodu\ndo dírky ve stejné řadě, kde je nožička\n<code>3V</code> modulu, a podobně anodu k <code>G</code>.\nMělo by to vypadat jako na tomto obrázku:</p>\n<p><span class=\"figure\"><a href=\"/2018/pyladies-brno-podzim/beginners/micropython/static/circuits/led_bb.svg\"><img src=\"/2018/pyladies-brno-podzim/beginners/micropython/static/circuits/led_bb.svg\" alt=\"diagram zapojení\"></a></span></p>\n<p>Potom zapoj USB kabel. Dioda by se měla rozsvítit!</p>\n<p>Zkus si, co se stane, když obě nožičky diody zapojíš ke <code>G</code>.</p>\n<p><span class=\"figure\"><a href=\"/2018/pyladies-brno-podzim/beginners/micropython/static/circuits/led_bb_off.svg\"><img src=\"/2018/pyladies-brno-podzim/beginners/micropython/static/circuits/led_bb_off.svg\" alt=\"diagram zapojení\"></a></span></p>\n<p>Aby dioda svítila, musí být připojená na dvě místa,\nmezi kterými je takzvaný <em>potenciálový rozdíl</em> — napětí.\nNa nožičce <code>G</code> je 0 voltů; na nožičce\n<code>3V</code> jsou 3,3 volty – je tedy mezi nimi rozdíl 3,3 V, přesně tolik,\nkolik modrá LED potřebuje ke svícení.</p>\n<div class=\"admonition note\"><p>Samotná hodnota napětí nedává smysl – například\nříct, že je na jednom místě 3,3 V je nepřesné.\nHodnota ve voltech se vždycky musí k něčemu vztahovat;\nvyjadřuje rozdíl mezi dvěma místy.\nV elektronice používáme rozdíl oproti „zemi” – napětí\nna nožičce <code>G</code>. Stanovíme si, že tam je\n0 voltů a ostatní napětí počítáme vzhledem k ní.\nNa nožičce <code>3V</code> je tedy napětí 3,3 V vzhledem k zemi.</p>\n</div><h2>Výstup</h2>\n<p>Proč jsme diodu na to, aby se rozsvítila,\npřipojili k modulu a ne jen k baterce?\nTen modul je trošku složitější zařízení než baterka a jedna důležitá věc,\nkterou umí navíc, je nastavovat napětí na různých nožičkách.\nUmí zařídit, aby se nožička chovala jednou jako <code>3V</code> a jindy jako <code>G</code>.\nKdyž připojíš diodu mezi <code>G</code> a takovou\npřepínatelnou nožičku, můžeš nastavit, kdy svítí a kdy ne.</p>\n<p>Přepoj anodu diody z <code>3V3</code> na <code>D5</code>. Katodu nech na <code>G</code>.</p>\n<p>Máš-li zapojeno, znovu se připoj k MicroPythonu a zadej následující kód:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span>\n<span class=\"n\">pin</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">OUT</span><span class=\"p\">)</span>\n<span class=\"n\">pin</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n<span class=\"n\">pin</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</pre></div><p>Když objekt Pin vytvoříš s <code>Pin.OUT</code>, MicroPython na něm bude nastavovat\nnapětí – buď 3,3 V (<code>value(1)</code>) nebo 0 V (<code>value(0)</code>).\nA tak se dá s diodou blikat.</p>\n<div class=\"admonition note\"><p>Číslování nožiček je bohužel dvojí – nožička\noznačená jako <code>D5</code> má v procesoru přiřazené číslo 14.\nTřída <code>Pin</code> v MicroPythonu používá číslování procesoru.\nNaštěstí máš <a href=\"https://pyvec.github.io/cheatsheets/micropython/nodemcu-cs.pdf\">tahák</a>,\nkde snadno dohledáš že <code>D5</code> a <code>Pin(14)</code> jsou dvě jména stejné nožičky.</p>\n</div><p>Zvládneš napsat program, který zařídí, aby dioda\nsvítila když je zmáčknuté tlačítko <code>FLASH</code>, jinak ne?</p>\n<div class=\"admonition note\"><p>Nápověda: Můžeš pořád dokola zjišťovat stav tlačítka\na nastavovat podle něj stav LED.</p>\n</div><div class=\"solution\" id=\"solution-0\">\n <h3>Řešení</h3>\n <div class=\"solution-cover\">\n <a href=\"/2018/pyladies-brno-podzim/beginners/micropython/index/solutions/0/\"><span class=\"link-text\">Ukázat řešení</span></a>\n </div>\n <div class=\"solution-body\" aria-hidden=\"true\">\n <div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span>\n<span class=\"n\">pin_diody</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">OUT</span><span class=\"p\">)</span>\n<span class=\"n\">pin_tlacitka</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">IN</span><span class=\"p\">)</span>\n<span class=\"k\">while</span> <span class=\"bp\">True</span><span class=\"p\">:</span>\n <span class=\"n\">pin_diody</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">1</span> <span class=\"o\">-</span> <span class=\"n\">pin_tlacitka</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">())</span>\n</pre></div>\n </div>\n</div><h2>Pouštění kódu ze souboru</h2>\n<p>Jak začneš psát trochu složitější programy,\nmohlo by se stát, že tě konzole MicroPythonu začne trochu štvát.\nŠpatně se v ní opravují chyby a automatické odsazování funguje jen většinou.\nPojďme se podívat, jak naštvání předejít.</p>\n<p>Doporučuji si větší kousky kódu – a určitě takové,\nve kterých je nějaký cyklus, podmínka či funkce –\npsát v textovém editoru a do modulu pak posílat celý soubor.</p>\n<p>Zkus si to. Do souboru <code>led_podle_tlacitka.py</code> dej následující kód:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">time</span> <span class=\"kn\">import</span> <span class=\"n\">sleep</span>\n<span class=\"n\">pin_diody</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">OUT</span><span class=\"p\">)</span>\n<span class=\"k\">while</span> <span class=\"bp\">True</span><span class=\"p\">:</span>\n <span class=\"n\">pin_diody</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n <span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n <span class=\"n\">pin_diody</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n <span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"o\">/</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n</pre></div><p>Potom zavři konzoli (<code>picocom</code>, PuTTY nebo <code>screen</code>).</p>\n<p>K pouštění programu použijeme <code>ampy</code>, který jsi nainstalovala dříve.\nKe spuštění budeš potřebovat znát port:</p>\n<ul>\n<li>Linux: port používáš v příkazu <code>picocom</code>, např. <code>/dev/ttyUSB0</code></li>\n<li>Windows: port používáš v PuTTY, např. <code>COM13</code></li>\n<li>macOS: port používáš v příkazu <code>screen</code>, např. <code>/dev/tty.usbmodem*</code></li>\n</ul>\n<p><code>ampy</code> spusť následujícím příkazem, jen za <code>PORT</code> doplň svůj port:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">(venv)$ </span>ampy -p PORT run led_podle_tlacitka.py\n</pre></div><p>Program by měl blikat diodou.\nVyužívá k tomu funkci <code>time.sleep()</code>, která počká daný počet vteřin –\ntedy <code>time.sleep(1/2)</code> zastaví program na půl sekundy.</p>\n<h2>Velice rychle blikat</h2>\n<p>Jedna z nevýhod „našeho” čipu ESP8266 je, že na svých\nnožičkách umí nastavovat jen dvě hodnoty – 3,3 V a zem, jedničku a nulu.\nDioda tak buď svítí, nebo nesvítí – nedá se\nnastavit poloviční intenzita, nedá se plynule rozsvěcet nebo zhasínat.</p>\n<p>Tuhle nevýhodu ale můžeme obejít s využitím dvou faktů.\nTen první je, že diodám – na rozdíl od žárovek nebo\nzářivek – nevadí časté vypínání a zapínání.\nOpotřebovávají se spíš svícením a časem.\nDruhý je, že lidské oko nestačí zaznamenat pohyby a\nzměny, které probíhají rychleji než zhruba za\nsetinu vteřiny.</p>\n<p>Pojďme tedy velice rychle blikat – a oblafnout tak naše oči a mozky!</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">time</span> <span class=\"kn\">import</span> <span class=\"n\">sleep</span>\n<span class=\"n\">pin_diody</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">OUT</span><span class=\"p\">)</span>\n<span class=\"k\">while</span> <span class=\"bp\">True</span><span class=\"p\">:</span>\n <span class=\"n\">pin_diody</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">)</span> <span class=\"c1\"># vypnout LED</span>\n <span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"o\">/</span><span class=\"mi\">100</span><span class=\"p\">)</span> <span class=\"c1\"># počkat dvě setiny vteřiny</span>\n <span class=\"n\">pin_diody</span><span class=\"o\">.</span><span class=\"n\">value</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span> <span class=\"c1\"># zapnout LED</span>\n <span class=\"n\">sleep</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"o\">/</span><span class=\"mi\">100</span><span class=\"p\">)</span> <span class=\"c1\"># počkat jednu setinu vteřiny</span>\n</pre></div><p>Zkus si pohrát s hodnotami pro <code>time.sleep</code>.</p>\n<div class=\"admonition note\"><p>Takhle fungují prakticky všechna stmívatelná LED\nsvětla – rychlé blikání je ekonomičtější a přesnější\nnež např. nastavování nižšího napětí.</p>\n</div><p>Dokážeš napsat program, který diodu postupně, plynule rozsvítí?</p>\n<!-- XXX: Solution? -->\n\n<p>Protože je takovéhle rychlé blikání užitečné ve spoustě\nrůzných situací, obsahuje MicroPython speciální funkci: umí blikat samostatně.\nNastavíš, jak rychle má blikat a jak dlouho má trvat\nkaždé bliknutí, a MicroPython pak bude blikat automaticky,\nzatímco tvůj program se může věnovat něčemu jinému.</p>\n<p>Téhle funkci se říká <em>pulzně šířková modulace</em> –\nangl. <em>Pulse Width Modulation</em>, neboli <em>PWM</em>.\nZ MicroPythonu jde tahle funkce ovládat pomocí třídy\n<code>machine.PWM</code>.\nKaždý objekt téhle třídy umí ovládat jednu nožičku\na dají se u něj nastavit dva parametry:</p>\n<ul>\n<li><code>freq</code> – frekvence, tedy kolikrát za sekundu se LED rozsvítí a zase zhasne a</li>\n<li><code>duty</code> – anglicky <em>duty cycle</em>, česky <em>střída</em>, nastavuje „šířku pulzu”,\ntedy jak dlouho bude dioda při každém bliknutí svítit.\nHodnota <code>duty</code> může být od 0, kdy LED\nnesvítí vůbec, do 1023, kdy svítí celou dobu.\nNastavíš-li <code>duty=512</code>, bude dioda\nsvítit s poloviční intenzitou (512 = 1024/2).</li>\n</ul>\n<p>Nastavíš-li <code>PWM(freq=50, duty=512)</code>, dioda bude blikat 50× za sekundu.\nVždycky jednu setinu vteřiny bude svítit a na jednu\nsetinu vteřiny zhasne.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span><span class=\"p\">,</span> <span class=\"n\">PWM</span>\n<span class=\"kn\">from</span> <span class=\"nn\">time</span> <span class=\"kn\">import</span> <span class=\"n\">sleep</span>\n\n<span class=\"n\">pin_diody</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">14</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">OUT</span><span class=\"p\">)</span>\n<span class=\"n\">pwm</span> <span class=\"o\">=</span> <span class=\"n\">PWM</span><span class=\"p\">(</span><span class=\"n\">pin_diody</span><span class=\"p\">,</span> <span class=\"n\">freq</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">duty</span><span class=\"o\">=</span><span class=\"mi\">512</span><span class=\"p\">)</span>\n</pre></div><p>Zkus nastavit i nižší frekvenci, třeba 3 nebo 1, ať blikání vidíš přímo!</p>\n<p>PWM se dá zrušit metodou <code>pwm.deinit()</code>.\nJako s otvíráním souborů, je dobré po sobě uklidit –\ni když zatím můžeš jednoduše restartovat celé zařízení.</p>\n<h2>Tóny a melodie</h2>\n<p>Vezmi si další součástku – piezobudič, neboli „bzučítko”.</p>\n<p>Tahle malá věc obsahuje speciální materiál, který se,\nkdyž ho připojíš ke zdroji napětí, trošku roztáhne.\nRoztažením zatlačí na okolní vzduch a vytvoří tlakovou\nvlnu, která může doputovat až k tvým uším.</p>\n<p>Zkus si to – když bzučítko připojíš na <code>3V</code>\na <code>G</code> (tentokrát je jedno kterým směrem), uslyšíš tiché lupnutí.\nA podobné lupnutí uslyšíš když součástku zase odpojíš.</p>\n<p>Co se stane, když budeš napětí připojovat a odpojovat, řekněme, 32× za vteřinu?</p>\n<p>Nebo 65×?</p>\n<p>Nebo některou z těchto frekvencí?\nHz – <a href=\"https://en.wikipedia.org/wiki/Hertz\">Hertz</a> – je jednotka frekvence;\n„49 Hz“ znamená „49× za sekundu“.</p>\n<table>\n<thead><tr>\n<th style=\"text-align:left\">Nota </th>\n<th style=\"text-align:right\">Frekvence</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align:left\">C1</td>\n<td style=\"text-align:right\">32,70 Hz</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">D</td>\n<td style=\"text-align:right\">36,71 Hz</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">E</td>\n<td style=\"text-align:right\">41,20 Hz</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">F</td>\n<td style=\"text-align:right\">43,65 Hz</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">G</td>\n<td style=\"text-align:right\">49,00 Hz</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">A</td>\n<td style=\"text-align:right\">55,00 Hz</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">H</td>\n<td style=\"text-align:right\">61,74 Hz</td>\n</tr>\n<tr>\n<td style=\"text-align:left\">C2</td>\n<td style=\"text-align:right\">65,41 Hz</td>\n</tr>\n</tbody>\n</table>\n<p>Naprogramuj písničku! Potřebuješ-li víc not, pusť si <a href=\"/2018/pyladies-brno-podzim/beginners/micropython/static/noty.py\">program</a>,\nkterý vypočítá další frekvence.</p>\n<h2>Další ovládání</h2>\n<p>Teď si vezmi dvě tlačítka a připoj je k modulu:\n<code>GND</code> vždycky na <code>G</code>, <code>VCC</code> vždycky na <code>3V</code> a\n<code>OUT</code> u jednoho tlačítka na <code>D1</code> a u druhého na <code>D2</code>.</p>\n<p>Tlačítko funguje tak, že OUT spojí buď s VCC (5V)\nnebo GND, podle toho, jestli je tlačítko stisknuté.\n(A navíc to taky teda svítí, ale to je teď vedlejší.)</p>\n<p>Zkus si, jestli se zvládneš MicroPythonu zeptat, jestli je tlačítko zapnuté.\nMělo by to být podobné jako u příkladu s tlačítkem FLASH.</p>\n<p>Zvládneš napsat program, který bude bzučet bzučítkem\na přitom se jedním tlačítkem bude dát zvyšovat tón a druhým snižovat?</p>\n<p>Program si (na svém počítači) ulož, ať se k němu můžeš vrátit.</p>\n<h2>Rotace</h2>\n<p>Čas na další součástku! Tentokrát to bude <em>servomotor</em>.</p>\n<p>Servomotor je součástka, která má v sobě zabudovaný\novladač, se kterým si naše zařízení může povídat\njednoduchým „elektronickým jazykem” – <em>protokolem</em>.\nMotorku můžeš posílat impulzy a podle délky impulzu\nse servomotor natočí.\nPři krátkých impulzech se natočí víc na jednu stranu,\npři dlouhých na druhou.\nImpulzy musíš posílat neustále, jinak se servomotor\nvypne.</p>\n<p>Na rozdíl od bzučítka, kde o výšce tónu rozhodovala\nfrekvence (<code>freq</code>) – kolikrát za vteřinu\nse ozve lupnutí – a LED, kde o intenzitě rozhodovala\nstřída (<code>duty</code>) – poměr mezi dobou kdy\ndioda svítí a kdy nesvítí, u servomotoru rozhoduje\ntzv. <em>šířka pulzu</em>: jak dlouho se napětí udrží\nna 3,3 V, než se přepne zpátky na 0 V.\n<!-- XXX: Actual typical pulse widths --></p>\n<p>V praxi to znamená, že můžeš nastavit <code>freq</code>\nna 50 Hz, a <code>duty</code> měnit cca od 35\n(úplně vlevo) přes 77 (uprostřed) po 120 (úplně vpravo).</p>\n<p>Dost ale teorie, pojďme si to vyzkoušet! Napřed musíš motorek zapojit:</p>\n<ul>\n<li>hnědý drát (zem) na <code>G</code>,</li>\n<li>červený drát (napájení) na <code>3V</code> a</li>\n<li>oranžový drát (data) na <code>D4</code>.</li>\n</ul>\n<p>Nožička <code>D4</code> odpovídá <code>Pin(2)</code>, takže kód k otáčení motorku je:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">from</span> <span class=\"nn\">machine</span> <span class=\"kn\">import</span> <span class=\"n\">Pin</span><span class=\"p\">,</span> <span class=\"n\">PWM</span>\n<span class=\"kn\">from</span> <span class=\"nn\">time</span> <span class=\"kn\">import</span> <span class=\"n\">sleep</span>\n\n<span class=\"n\">pin_motorku</span> <span class=\"o\">=</span> <span class=\"n\">Pin</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">Pin</span><span class=\"o\">.</span><span class=\"n\">OUT</span><span class=\"p\">)</span>\n<span class=\"n\">pwm</span> <span class=\"o\">=</span> <span class=\"n\">PWM</span><span class=\"p\">(</span><span class=\"n\">pin_motorku</span><span class=\"p\">,</span> <span class=\"n\">freq</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">duty</span><span class=\"o\">=</span><span class=\"mi\">77</span><span class=\"p\">)</span>\n<span class=\"n\">pwm</span><span class=\"o\">.</span><span class=\"n\">duty</span><span class=\"p\">(</span><span class=\"mi\">35</span><span class=\"p\">)</span>\n</pre></div><p>Zkus motorkem otáčet nastavováním <code>duty</code> na 35 do 120.\nKdyby se náhodou stalo, že se modul restartuje a\nkonzole přestane fungovat, zkus ho odpojit a znovu\npřipojit. Kdyby to nepomohlo, motorek ti dneska\nnebude fungovat. Za chvíli si řekneme proč; zatím (jsi-li na kurzu)\nse přidej do dvojice k někomu, komu to funguje.</p>\n<h2>Poznámka o napájení a napětí</h2>\n<p>K tomu, aby se otočil motor, je potřeba mnohem víc\nenergie, než k rozsvícení světýlka.\nZ USB z počítače té energie dostaneš docela málo,\nproto můžou být s motorkem problémy.</p>\n<p>Jak to řešit, až si přestaneš hrát a budeš chtít motorkem otáčet „doopravdy”?</p>\n<p>Elektronika, která je na našem modulu mimo\nmalou destičku s „mozkem” má dva hlavní úkoly:</p>\n<ul>\n<li>Převádět <em>komunikaci</em> z USB, která je\ncelkem složitě zakódovaná, na něco čemu\nmalé zařízení rozumí\n(konkrétně protokol <a href=\"https://en.wikipedia.org/wiki/UART\">UART</a> přes nožičky <code>TX</code> a <code>RX</code>).</li>\n<li>Převádět napětí 5 V, které poskytuje USB,\nna 3,3 V které potřebuje modul.</li>\n</ul>\n<p>Když energie z USB přestane stačit, dá se koupit\nzařízení, které zvládne převádět komunikaci\na napájení vyřešit z jiného zdroje 5 V.\nKdybys to někdy zkoušela, příslušné zařízení\nkoupíš pod názvem <em>USB-TTL adapter</em> a vypadá\nnejčastěji takhle:</p>\n<p><span class=\"figure\"><a href=\"/2018/pyladies-brno-podzim/beginners/micropython/static/usb-ttl.png\"><img src=\"/2018/pyladies-brno-podzim/beginners/micropython/static/usb-ttl.png\" alt=\"USB-TTL adapter\"></a></span></p>\n<p>K modulu pak tento převodník a zdroj napětí připojíš takto:</p>\n<p><!-- XXX: obrázek --></p>\n<ul>\n<li><code>GND</code> na převodníku – <code>G</code> na desce</li>\n<li><code>RX</code> na převodníku – <code>TX</code> (!) na desce</li>\n<li><code>TX</code> na převodníku – <code>RX</code> (!) na desce</li>\n<li><code>+5V</code> na zdroji napětí na <code>VIN</code> na desce</li>\n<li>Zem na zdroji napětí na <code>G</code> na desce</li>\n</ul>\n<p>Pozor, 5V nepřipojuj jinam než na <code>VIN</code>!</p>\n<h2>Napětí</h2>\n<p>Další důvod, proč ti servomotor někdy nefunguje dobře,\nje to, že je stavěný na 5 voltů, ne na 3,3 které\nposkytuje modul.</p>\n<p>Když připojíš zařízení k menšímu napětí, než\npotřebuje, většinou buď nebude fungovat, nebo bude\ndělat „míň” než by mělo: LED bude míň svítit,\nreproduktor bude tišší, motorek se bude točit pomaleji nebo s menší silou.</p>\n<p>Když naopak připojíš zařízení k <em>většímu</em> napětí,\nnež na jaké je stavěno, nejspíš ho nadobro zničíš.\nKdyž připojíš červenou LED přímo na 3,3 V, přestane fungovat;\nkdyž připojíš malý servomotorek na zdroj 24 V, může začít hořet.\nA ačkoli lidem malá napětí jako 5 V nevadí,\nkdyž připojíš do zásuvky s 230 V sama sebe, můžeš umřít.\nTakže na velká napětí pozor!</p>\n<p>My motorek připojujeme na malé napětí a zmenšený\nvýkon nám příliš nevadí – dokud se to\notáčí, víc rychlosti ani síly nepotřebujeme.</p>\n<p>Až to ale potřebovat budeš – například až budeš\nservomotorkem pohánět ruku robota, která bude zvedat\ntěžké náklady, budeš potřebovat dvě věci:</p>\n<ul>\n<li>Externí napájení – jako předtím bude motorek potřebovat zvláštní zdroj 5V.</li>\n<li>Na datový signál je potřeba použít <em>převodník úrovní</em>\n(angl. <em>logic level converter</em>),\nkterý převede třívoltový signál na pětivoltový.</li>\n</ul>\n<p>Kdybys to někdy potřebovala, ozvi se koučům – i po\nworkshopu ti určitě rádi poradí nebo ti aspoň řeknou\nkoho se zeptat!</p>\n<h2>Barevná světýlka</h2>\n<p>Tak, dost teorie; vezmi si novou hračku!\nTentokrát to bude LED pásek.</p>\n<p>Na pásku máš 8 malých čtverečků.\nKaždý z nich obsahuje docela hodně elektroniky:\ntři barevné LED (červenou, zelenou a modrou)\na čip, který je umí ovládat pomocí informací,\nkteré dostane přes jediný drátek z modulu.</p>\n<p>Takové pásky se prodávají po metrech a dají se\nnastříhat – mezi jednotlivými světýlky si všimni čárky,\nkterá naznačuje, kde máš střihnout.\nEnergie z USB stačí zhruba na osm světýlek, proto jsi jich dostala tolik.</p>\n<p>Tenhle LED pásek je, podobně jako servomotorek, stavěný\nna pět voltů. Na rozdíl od motorku, který se s 3,3 V\ntrochu roztočil, se ale s nižším napětím ani nerozsvítí.\nNaštěstí ale potřebuje 5 V jen na <em>napájení</em>;\nřídící signál s informacemi o barvičkách může mít 3,3 V.</p>\n<p>Pojďme pásek zapojit:</p>\n<ul>\n<li><code>GND</code> pásku (bílý drátek) připoj na <code>G</code></li>\n<li><code>DI</code> (<em>data in</em> – zelený drátek) připoj na <code>D4</code></li>\n<li><code>+5V</code> (červený drátek) připoj:<ul>\n<li>na <code>VU</code>, má-li tvoje destička tuhle nožičku,</li>\n<li>jinak na <code>VIN</code>.</li>\n</ul>\n</li>\n</ul>\n<p>Nožička <code>VU</code>/<code>VIN</code> poskytuje 5 voltů.\nPozor na ni: nepřipojuj na ni zařízení, které se s pěti volty nevyrovnají.</p>\n<p>Máš-li zapojeno, můžeš začít programovat.\n„Jazyk”, kterým „mluví” tenhle LED pásek je trošku\nsložitější než signál PWM, ale MicroPython obsahuje\nspeciální knihovnu, která s páskem komunikovat umí.\nVypadá to nějak takhle:</p>\n<pre>from machine import Pin\nfrom neopixel import NeoPixel\n\nPOCET_LED = 8\npin = Pin(2, Pin.OUT)\nnp = NeoPixel(pin, POCET_LED)\nnp<span class=\"highlight-nocolor\">[0]</span> = (<span class=\"highlight-red\">255</span>, <span class=\"highlight-green\">255</span>, <span class=\"highlight-blue\">255</span>)\nnp.write()\n</pre><p>Co znamenají ta čísla (<code>0</code> a <code>255</code>), na to už jistě přijdeš sama.\nJen při experimentování nezapomeň zavolat\n<code>np.write()</code>, tím se informace pošlou do LED pásku.</p>\n<p>Zvládneš naprogramovat semafor?</p>\n\n\n " } } }