Začínáme s Rainbow HAT

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:

  1. číslo pixelu
  2. hodnota červeného odstínu (0-255)
  3. hodnota zeleného odstínu (0-255)
  4. 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čky for, 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 knihovnu colorsys která obsahuje funkci hsv_to_rgb, jejíž pomocí o kus dále konvertuje HSV barvu na RGB barvu.
  • while True je smyčka, která běží stále dokola
  • for je smyčka, ve které probíhá změna barev.
  • 0 a 1 je na HSV kole jedna a tatáž souřadnice. Stačí jeden průchod od 0 k 1. Používáme číselný rozsah od 0 do 100, 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ým r, g a b.
  • 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ě jako show 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 o 0.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, a True nebo False 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 funkci touch_a spustí v okamžiku stisknutí tlačítka.
  • @rh.touch.A.release() je Python decorator, který nadepsanou funkci release_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. Hodnota 1 danou LED rozsvítí, hodnota 0 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ě seznam song 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?

Rainbow HAT

Rainbow HAT má celou plejádu čidel, vstupů a zobrazovačů pro práci s Android Things(TM).

Rainbow HAT

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!

Raspberry Pi

Napájení a zdroje

Nejlepší napájení a zdroje pro Vaše jednodeskové počítače.

Napájení a zdroje

Paměťové karty

Vyberte si si vhodnou kartu, na kterou umístíte operační systém pro své zařízení.

Paměťové karty

Komentáře