Použití python knihovny pro ovládání tuneru FM
Pro ovládání tuneru z python-u je možné již nyní využít knihovnu pro jazyk python. Jak jí inicializovat a pracovat s ní popisuje tento článek.
Předpoklady
Pro použití knihovny je nezbytná přítomnost python modulů “RPi.GPIO” a “smbus.SMBus”. V základní instalaci Raspbian-u je první již přítomen, jak nainstalovat a zprovoznit druhý popisuje článek Zprovoznění tuneru na čisté instalaci Raspbian-u.
Pro kontrolu, zda jsou moduly přítomny a dokáží se k periferiím připojit, stačí spustit v terminálu konzoli pythonu
1 2 3 |
sudo python |
a zadat do ní příkazy
1 2 3 4 5 |
from smbus import SMBus from RPi import GPIO SMBus(1) |
pokud se po “odentrování” nevypíše žádný “ImportError” ani “IOError”, vše funguje. Konzoli je možné opustit příkazem “quit()”.
Použití
Naklonujte si přes git repozitář s knihovnou nebo si ho stáhněte jako zip.
Pro ovládání tuneru příkazy spusťte ve složce s knihovnou konzoli pythonu
1 2 3 |
sudo python |
Příkaz “sudo” je zde nezbytný, protože python potřebuje práva root-a pro přístup k I2C sběrnici a I/O pinům. Pokud již pracujete pod uživatelem “root”, vynechte příkaz “sudo”.
Nejprve je nutné importovat knihovnu, proto do konzole zadejte
1 2 3 |
from Board import Board |
a následně inicializujte novou instanci přes
1 2 3 |
B = Board(gpio_en, gpio_stby, i2cbus = None, gpio_mode_bcm = False) |
kde nahraďte:
- “gpio_en” číslem GPIO pinu, na který je připojen pin “EN” tuneru
- “gpio_stby” číslem GPIO pinu, na který je připojen pin “ST-BY” tuneru
- “i2cbus” číslem I2C sběrnice, ke které je tuner připojen (u nových RasPI je to sběrnice 1, u starších 0 – model B v1)
- “gpio_mode_bcm” – nastavte na “True”, pokud jste čísla pinů výše zadali coby skutečné GPIO piny procesoru – pokud jste použili číslování dle pinů GPIO lišty (dle dokumentace RPi.GPIO modulu, sekce “Pin numbering”), je možné tento parametr zcela vynechat, “False” je výchozí hodnotou
Pro vytvoření instance s použitím číslování GPIO lišty, pinu 11 pro “EN”, 12 pro “ST-BY” na novějších RasPI (s použitím I2C sběrnice 1) tedy zadejte příkaz
1 2 3 |
B = Board(11, 12, 1) |
Konkrétně u RasPI B v2 (nikoliv RasPI 2 B !) je na GPIO lištu na pin 11 vyveden z procesoru GPIO17, na pin 12 pak GPIO18 a I2C na GPIO liště je 1 – s použitím číslování GPIO dle procesoru je tedy příkaz výše u této verze RasPI ekvivalentní s příkazem
1 2 3 |
B = Board(17, 18, 1, True) |
Nyní již můžeme používat metody, které knihovna nabízí. Každá metoda vždy vrací aktuální nastavení. Pokud jen chcete zjistit aktuální nastavení, zavolejte metodu bez parametrů (příp. s hodnotou “None” u parametrů, které měnit nechcete). Nicméně, vrácení aktuálního nastavení je u všech metod zatím pouze softwarové.
Pro zapnutí napájení do desky slouží příkaz
1 2 3 |
B.power(True) |
Následně je třeba naladit tuner, zvýšit hlasitost DSP a zapnout koncový zesilovač příkazy
1 2 3 4 5 |
B.TUNER.tune(frekvence_v_MHz 30.4 - 108.1) B.DSP.volume(hlasitost_v_krocích 0 - 63) B.mute(False) |
Jak můžete vidět, je odděleno (od verze v0.2) ovládání jednotlivých částí desky – samotná instance “Board” může ovládat napájení a koncový zesilovač. Dále pak poskytuje ve svých proměnných DSP a TUNER instance tříd zodpovědných za ovládání těchto částí desky.
Naladění na 95.0 MHz s úrovní hlasitosti 25 tedy zajistí příkazy
1 2 3 4 5 |
B.TUNER.tune(95) B.DSP.volume(25) B.mute(False) |
Všechny instance si udržují aktuální nastavení desky / částí, které ovládají. Toto nastavení se posílá při každém zapnutí desky. Je tedy možné nastavit parametry ještě před zapnutím a po zapnutí mít již vše nastavené. Jedinou výjimkou je ovládání koncového zesilovače – tento je po zapnutí vždy vypnut a je nutného ho zapnout příkazem “B.mute(False)”.
Stejně tak jednoduše je s pomocí knihovny možné ovládat všechny možnosti, které deska nabízí, s výjimkou pokročilejší práce s tunerem. Tato se teprve připravuje a ačkoliv se jednotlivé posílané byty sestavují z instančních proměnných, není k nim přístup přes jednoduché metody, které by zajistily jejich platné kombinace. Aktuálně se chová, jako když má pevně dané následující byty:
- “0x7A 0x01” pro TEA6825
- “freq-low freq-high 0x37 0x00” pro TEA6810
DSP je možné ovládat kompletně přes jednoduché instanční metody.
Všechny dostupné metody:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# Board power(on = None) reset() mute(on = None) # DSP volume(vol = None, dB = False) balance(left = None, right = None, dB = False) input(input = None, loudness = None, gain = None, dB = False) bass(level = None, dB = False) treble(level = None, dB = False) # TUNER tune(freq = None) |
Některé metody přijímají parametr “dB” – tyto ovládají hlasitost, zisk, apod. Pokud tento parametr není předaný nebo má hodnotu “False”, metody přijímají a vrací nastavení v krocích. Krok 0 vždy znamená nejnižší hlasitost, žádný zisk nebo střed rozsahu pro hloubky či výšky, apod. Počet kroků je počtem možných kombinací, které čipy přijímají. Pro zjištění krajních mezí je možné vypnout koncový zesilovač nebo i celou desku a nastavit velmi vysokou/nízkou hodnotu. Metody tyto hodnoty omezují do možného rozsahu, nastaví a coby aktuální nastavení tedy vrátí nejvyšší/nejnižší možnou hodnotu. Pokud má parametr “dB” hodnotu “True”, metoda přijímá a vrací nastavení v decibelech dle hodnot v datasheet-ech čipů.
Pro podrobnější informace o metodách je ve zdrojovém kódu u každé malý komentář, co dělá a jaké parametry přijímá.
Pro ukončení konzole pythonu použijte příkaz
1 2 3 |
quit() |
Tím dojde i k vypnutí desky s tunerem (resp. k tomuto dojde ve chvíli, kdy python maže vytvořenou instanci “B”).