Tutorial 2
V předchozím tutorial 1 jsme se seznámili s úplnými základy Pythonu. V tomto druhém pokračování už budeme potřebovat ESP32. Předpokládáme, že již máte na svém ESP nainstalovaný Micropython.
ESP32 - DoIt nebo ESP32board
REPL
Už jsme si ukázali CTRL-C
, pro zastavení běhu programu v ESP. Pro komunikaci přes Terminál se používá takzvaný REPL.
Výčet nejpoužívanějších zkratek pro práci s REPLem
- CTRL-C (přerušení běžícího programu)
- CTRL-D (soft reset ESP)
- CTRL-E (přepínání "paste mode")
Rozsvítíme LED diodu?
Na velké části ESP modulů máme k dispozici vestavěnou svítivou diodu na PINU 2. (Což vychází nejspíš z nepsané dohody původem z Arduina) Nejjednodušší, jak nastavit hodnotu value()
na pinu Pin
je následující způsob:
>>> from machine import Pin
>>> led = Pin(2, Pin.OUT)
>>> led.value(1)
(Změnou stavu / hodnoty (value) z 0
na 1
se rozsvítí LED dioda)
Třídu Pin
jsme rozšířili o další metody, které by mohla mít LED dioda a vznikla tak třída Led
v adreasáři components
. Není to nic světoborného, ale u složitějších rozšíření se hodí vědět, jak na to. Každopádně se nám použití trochu zjednoduší:
>>> from components.led import Led
>>> led = Led(2)
>>> led.value(1) # není potřeba Pin.OUT - je obsaženo ve třídě Led
>>> led.blink() # nová metoda
>>> led.toggle()
Popis třídy Led 🡒 components/led A zdrojový kód knihovny 🡒 github//components/led
Teplota u procesoru
>>> import esp32
>>> esp32.raw_temperature()
127
Hallova sonda - magnetického pole
>>> import esp32
>>> esp32.hall_sensor()
129 # cca standard hodnota
>>> esp32.hall_sensor()
976 # po přiložení magnetu
Ostatní metody knihovny ESP32 v originální anglické dokumentaci 🡒 library/esp32
Piezzo
Pro další pokus je vhodné mít už kromě modulu i nějakou možnost připojid další LED diodu nebo například malý piezzo "pípák":
from components.buzzer import Buzzer
piezzo = Buzzer(18)
piezzo.beep()
# napřímo přes octopus():
beep()
# základní pípnutí (1000,50) > 1kHz na 50ms
beep(440,500)
# komorní a 440Hz na 0.5s
>>> from components.buzzer import notes
>>> Notes.A4
440
#k dispozici jsou tóny C3-C7
>>> buzzer.play_tone(Notes.A4) # = tone(440)
Víceřádkové programy - funkce, podmínky a cykly
Opakování a shrnutí.
Obyčejná sekvence příkazů
Zatím jsme používali terminál a většinou nám stačil jeden příkaz nebo postupná sekvence příkazů na několika málo řádcích:
>>> from machine import Pin
>>> led = Pin(2, Pin.OUT)
>>> led.value(1)
Už jsem se o tom zmínili několikrát a už byste to mohli mít i zažité. Po odeslání (ENTRem) mikrokontrolér příkazy na řádku vykoná
a opět nám oznámí své další očekávání pro nové pokyny promptem >>>
.
Končí-li však řádek dvojtečkou :
, Python to vyhodnotí jako "blok" a vyzve nás pro pokračování třemi tečkami ...
:
Funkce
Funkce v Pythonu je spíše podprogram, přesněji "metoda", jakou se dají zpracovat různé vstupní veličiny. Podrobněji na 🡒 naucse.python.cz/../functions A stáhněte si také 🡒 tahák s užitečnými funkcemi
Definování vlastní funkce - def
Vlastní funkce je "podprogram", který si vytvoříme sami pro opakující se bloky kódu nebo pro zpřehlednění rozsáhlejších programů.
Podle příkazu def
a dvojtečky :
na konci řádku pozná Python, že uživatel definuje svou vlastní funkci, třeba pro součet dvou vstupních čísel:
>>> def suma(x, y):
... return x + y
>>> suma(1, 2)
3
Ani v příkazovém řádku/promptu >>>
nezapomínejte na odsazení. Po ...
je nutno udělat TAB nebo "pár mezer" (doporučeno 4).
Podmínka
Program - to ale není jen obyčejná posloupnost příkazů. Často se používá podmíněné větvení - což znamená, že na základě vyhodnocení nějakého výrazu se program může chovat různým způsobem a může i pokračovat různým "směrem".
Opět se používá stejná konstrukce s dvojtečkou za výrazem podmínky if
:
>>> cislo = 10
>>> if cislo < 0:
... print("cislo je zaporne")
...
>>>
Více podrobností na 🡒 naucse.python.cz/../comparisons (porovnávání) 🡒 naucse.python.cz/../expressions (vyhodnocování výrazů)
Cyklus while nebo for
Dvojtečka je i ve while
cyklu:
>>> cislo = 0
>>> while cislo < 2:
... print(cislo)
... cislo = cislo + 1
...
0
1
2
>>>
Podobně pak i for
cyklus:
>>> for cislo in range(6):
... print(cislo, end="")
...
012345>>>
Více na 🡒 naucse.python.cz/../while (cyklus while)
Inspirace u jiných 🡒 mithru/MicroPython-Examples.