V tomto tutorialu si ukážeme, jak se instaluje Python knihovna pro Rainbow HAT a její funkce.
Potřebný hardware
– Rainbow HAT
– Raspberry Pi
– MicroSD karta
– napájecí zdroj
Potřebný software
– OS Raspbian
Získané dovednosti
– Instalace a použití Rainbow HAT (Python) knihovny
Instalace software
💡 Doporučujeme použít nejaktuálnější vydání OS Raspbian, na které se soustředí i veškerá softwarová podpora.
1. Otevřete nový terminál a vložte následující příkaz, odpovídejte ‚y‘ pro ano nebo ‚n‘ pro ne:
curl https://get.pimoroni.com/rainbowhat | bash
Tímto příkazem si stáhnete a zároveň spustíte instalátor, který vaše Raspberry Pi nastaví a připraví na použití s Rainbow HAT.
💡 Po skončení instalace doporučujeme restart systému (
sudo reboot
), aby se uložily a načetly všechny úpravy nastavení.
Použití software
1. Otevřete systémový terminál a spusťte Python terminál:
sudo python
2. V Python terminálu importujte knihovnu Rainbow HAT:
import rainbowhat as rh
Všimněte si parametru as rh
. To nás ušetří od psaní dlouhého rainbowhat
při každém použití knihovny. Píšeme krátce rh
.
Rainbow
Rainbow (bez dovětku HAT) je pruh sedmi RGB LED pixelů (APA102) na Rainbow HAT, které mohou být řízeny individuálně z knihovny Rainbow HAT. Jak je v Pythonu konvencí, sedm pixelů je číslováno od 0
do 6
a seřazeno z prava do leva.
- Pixel
0
je úplně napravo - Pixel
6
je úplně nalevo.
Existují dvě metody řízení pixelů – set_pixel
a set_all
.
set_pixel
umožňuje ovládání barvy jednotlivých pixelů.set_all
je pro nastavení jedné barvy všech pixelů najednou.
1. Začneme rozsvícením prvního pixelu na červeno.
Funkce set_pixel
vyžaduje čtyři parametry:
- číslo pixelu
- hodnota červeného odstínu (0-255)
- hodnota zeleného odstínu (0-255)
- hodnota modrého odstínu (0-255)
Po nastavení všech hodnot musíte navíc zavolat funkci show
, která aktualizuje pixely na nově nastavené barvy.
rh.rainbow.set_pixel(0, 255, 0, 0)
rh.rainbow.show()
Všimněte si, že jsme před každou funkcí napsali navíc rh.rainbow
. Tím programu říkáme, že tyto funkce najde v modulu rainbow
v knihovně rh
.

2. Pojďme náš červený pixel rozhýbat, ať běhá ze strany na stranu. Použijeme smyčky while
a for
.
import time
while True:
for pixel in range(7):
rh.rainbow.clear()
rh.rainbow.set_pixel(pixel, 255, 0, 0)
rh.rainbow.show()
time.sleep(0.1)
💡 Pro ukončení programu stiskněte CTRL + C.
Použili jsme dvě nové funkce – time.sleep(0.1)
a rh.rainbow.clear()
.
time.sleep(0.1)
vyvolá krátkou 0,1s pauzu mezi posunem přeskočením na další pixel, čímž určuje rychlost animace. Snižte hodnotu v závorce a animace se zrychlí, zvyšte hodnotu v závorce a animace se zpomalí.rh.rainbow.clear()
zhasne každý rozsvícený pixel. Voláme ji na začátku každé smyčkyfor
, aby vždy svítil jen jeden pixel.
3. Nyní použijeme funkci set_all
pro rozsvícení všech pixelů najednou a zařídíme, aby měnily barvu.
💡 Protože funkce
set_all
ovládá všechny pixely najednou, nemusíme zadávat číslo pixelu, stačí hodnota RGB.
Pro přecházení mezi barvami duhy využijeme HSV schéma barev a jednotlivé barvy převedeme do RGB. HSV schéma je výhodnější, protože H představuje odstín, a tedy i pozici na barevném kole. Jednoduchým „otáčením“ hodnoty H tak projdeme všechny barvy.
import colorsys
import time
rh.rainbow.clear()
while True:
for i in range(101):
h = i / 100.0
r, g, b = [int(c * 255) for c in colorsys.hsv_to_rgb(h, 1.0, 1.0)]
rh.rainbow.set_all(r, g, b)
rh.rainbow.show()
time.sleep(0.02)
💡 Pro ukončení programu stiskněte CTRL + C.
Tohle je už trochu složitější program, takže si ho vysvětlíme podrobně, krok po kroku.
import colorsys
importuje novou knihovnucolorsys
která obsahuje funkcihsv_to_rgb
, jejíž pomocí o kus dále konvertuje HSV barvu na RGB barvu.while True
je smyčka, která běží stále dokolafor
je smyčka, ve které probíhá změna barev.0
a1
je na HSV kole jedna a tatáž souřadnice. Stačí jeden průchod od0
k1
. Používáme číselný rozsah od0
do100
, který vzápětí dělíme 100 (h = i / 100.0
), abychom získali potřebné zlomky jedné.r, g, b = [int(c * 255) for c in colorsys.hsv_to_rgb(h, 1.0, 1.0)]
převádí vygenerované HSV barvy na RGB barvy.- Protože funkce
hsv_to_rgb
akceptuje RGB hodnoty, každé převedené desetinné číslo násobíme 255 a převádíme zpět na integer (int(c * 255)
). - List comprehension (
[function(x) for x in y]
) provádí stejnou operaci nad několika objekty zároveň a vrací list. - unpacking (
r, g, b =
) přiřazuje výsledky z listu našim třem proměnnýmr
,g
ab
. set_all
nastaví vygenerovanou RGB barvu na všech pixelech.show
zobrazení změny s malým zpožděním 0,02 s, takže celá duha proběhne jednou za 2 vteřiny (0,02 s x 100 barev = 2 s).

14segmentový displej
14segmentový displej umožňuje, narozdíl od běžnějšího 7segmentového displeje, zobrazovat jak čísla, tak i velká písmena. Pro zobrazování desetinných čárek jsou mezi znaky i extra desetinné tečky. Mimo zobrazení textu a čísel je podporována i většina běžně používaných speciálních znaků jako @ apod.
Funkce pro řízení 14segmentového displeje najdeme pod modulem display
v importované knihovně rh
, píšeme rh.display.název_funkce
.
1. Vyzkoušíme funkci print_str
pro zobrazení jednoduchého textu.
rh.display.print_str('AHOY')
rh.display.show()
print_str
předá znaky textové řetězce AHOY 14segmentovému displeji.show
zobrazí nově zadané znaky, podobně jakoshow
u rainbow pixelů.

2. Vyzkoušíme funkci print_float
pro zobrazení desetinného čísla uvnitř smyčky while
, která bude přičítat 0.01, čímž vytvoří dojem stopek.
i = 0.0
while i < 999.9:
rh.display.clear()
rh.display.print_float(i)
rh.display.show()
i += 0.01
💡 Pro ukončení programu stiskněte CTRL + C.
i = 0.0
je proměnná s naší počáteční hodnotou „stopek“.rh.display.clear()
vyčistí displej od předchozích znaků.print_float
předá znaky desetinného čísla včetně čárky 14segmentovému displeji.show
zobrazí nově zadané znaky.i += 0.01
zvýší hodnotu proměnnéi
o0.01
.- Smyčka skončí po dosažení hodnoty
999.9
.
3. Vyzkoušíme funkci set_decimal
pro zobrazení/skrytí desetinné tečky.
rh.display.clear()
rh.display.set_decimal(0, True)
rh.display.show()
set_decimal
přijímá dva argumenty – pozici desetinné tečky, kterou chcete řídit, aTrue
neboFalse
podle toho, zda ji chcete zapnout nebo vypnout.- Desetinné tečky jsou číslované od 0 do 3 z leva do prava.
Dotyková tlačítka a LED
Rainbow HAT má tři kapacitní dotyková tlačítka označená A, B a C, a nad každým jednu barevnou LED. Při událostech stisk a uvolnění tlačítka lze pomocí Python decorator volat nějaké funkce. Zapisuje se nad definici funkce, kterou chceme volat. Funkce bude volána automaticky při spuštění události definované v Python decorator a lze takto předat i nějaká data. LED nejsou „pevně“ spojeny s nejbližším tlačítkem, můžeme je ovládat nezávisle.
1. Spojíme LED nad tlačítkem A s dotykovým tlačítkem A, aby se po jeho stisku rozsvítila.
@rh.touch.A.press()
def touch_a(channel):
print('Button A pressed')
rh.lights.rgb(1, 0, 0)
@rh.touch.A.release()
def release_a(channel):
print('Button A released')
rh.lights.rgb(0, 0, 0)
@rh.touch.A.press()
je Python decorator, který nadepsanou funkcitouch_a
spustí v okamžiku stisknutí tlačítka.@rh.touch.A.release()
je Python decorator, který nadepsanou funkcirelease_a
spustí v okamžiku ukončení stisku tlačítka.rh.lights.rgb(1, 0, 0)
rozsvítí první LED a zbývající dvě zhasne. Každý argument odpovídá jedné ze tří LED. Hodnota1
danou LED rozsvítí, hodnota0
danou LED zhasne.

Teplota a tlak
Vestavěný Senzor BMP280 měří teplotu a tlak. Funkce pro řízení měření teploty a tlaku najdeme pod modulem weather
v importované knihovně rh
, píšeme rh.weather.název_funkce
.
1. Spustíme měření teploty [°C] a tlaku [Pa]:
while True:
t = rh.weather.temperature()
p = rh.weather.pressure()
print(t, p)
time.sleep(0.5)
💡 Pro ukončení programu stiskněte CTRL + C.
💡 Pro převod tlaku z Pa na používanější hPa můžeme naměřenou hodnotu vydělit 100.
t = rh.weather.temperature()
měří teplotu [°C] a naměřenou hodnotu ukládá do proměnnét
.p = rh.weather.pressure()
měří tlak [Pa] a naměřenou hodnotu ukládá do proměnnép
print(t, p)
zobrazí naměřené hodnoty v textovém výstupu programu.time.sleep(0.5)
zastavuje program na půl vteřiny, protože častější měření nepotřebujeme.
2. Pomocí funkce print_float
zobrazíme naměřenou teplotu na vestavěném displeji.
while True:
t = rh.weather.temperature()
rh.display.clear()
rh.display.print_float(t)
rh.display.show()
time.sleep(0.5)
💡 Pro ukončení programu stiskněte CTRL + C.

Piezo bzučák
Piezo bzučák dokáže přehrávat tóny o specifických frekvencích a midi čísla tónů. Funkce pro ovládání piezo bzučáku najdeme pod modulem buzzer
v importované knihovně rh
, píšeme rh.buzzer.název_funkce
.
1. Zkusíme si přehrát jednu frekvenci, konkrétně 261 Hz, což je jinak také střední C.
rh.buzzer.note(261, 1)
rh.buzzer.note(261, 1)
akceptuje dva parametry – frekvenci [Hz] a délku [s]. V našem příkladu bude bzučák po dobu jedné vteřiny „bzučet“ na frekvenci 261 Hz (střední C).
2. Zkusíme si přehrát střední C jako midi tón. Střední C má číslo 60.
rh.buzzer.midi_note(60, 1)
rh.buzzer.midi_note(261, 1)
akceptuje dva parametry – midi číslo tónu [Hz] a délku [s]. V našem příkladu bude bzučák opět po dobu jedné vteřiny „bzučet“ střední C (261 Hz).
3. Když už umíme přehrát jeden tón, můžeme zkusit složit několik tónů do seznamu a s krátkými pauzami si je pomocí smyčky přehrát.
song = [68, 68, 68, 69, 70, 70, 69, 70, 71, 72]
for note in song:
rh.buzzer.midi_note(note, 0.5)
time.sleep(1)
for note in song:
projde postupně seznamsong
a každý jeho prvek dosadí do proměnnénote
.rh.buzzer.midi_note(note, 0.5)
přehraje tón z proměnnénote
. Přehrávat se bude 0,5 vteřiny.time.sleep(1)
zastaví program na 1 vteřinu, čímž vytvoří vteřinovou pauzu mezi každým tónem.
Tóny které jsme použili mají všechny stejnou délku, což pro melodií není ideální. Chtělo by to vylepšit, aby melodie zněla správně. Napadne Vás jak a uhádnete, co je to za melodii?
Raspberry Pi
Raspberry Pi je nízkonákladový minipočítač velikosti kreditní karty, který byl vyvinut nadací Raspberry Pi Foundation ve Velké Británii. Raspberry Pi se snaží propagovat studium počítačových věd a programování ve školách formou zábavy. Raspberry Pi je to nejlepší pro všechny vývojáře a bastlíře, navíc u něj můžete očekávat skvělou softwarovou podporu!
