SILICON LABS 21Q2 Bluetooth Features Lab
Laboratorní příručka funkcí Bluetooth 21Q2
Tento laboratorní manuál vás provede některými novými funkcemi Bluetooth SDK, které byly představeny mezi vydáním 20Q4 a 21Q2. V této laboratoři vytvoříme NCP example a napsat hostitelský software v jazyce Python. Pomocí nové dynamické funkce GATT také vytvoříme databázi GATT z hostitelského softwaru namísto použití konfigurátoru GATT. Konečně funkce LE Power Control je prezentována rozšířením hostitelského softwaru.
Předpoklady
K dokončení tohoto cvičení budete potřebovat následující:
- Dva Thunderboard BG22 nebo dva WSTK s libovolnou radiovou deskou EFR32BG/EFR32MG nebo jejich kombinací
- Nainstalované Simplicity Studio 5 s Gecko SDK v3.2 včetně Bluetooth SDKv3.2
- Počítač, na kterém je nainstalován Python v3.6 nebo novější
Blikání cílových zařízení pro funkci NCP
- Připojte své dvě rádiové desky a otevřete Simplicity Studio 5
- Vyberte jednu z rádiových desek na kartě Debug Adapters
- Nastavte Preferred SDK na v3.2.0 na Overview kartu Spouštěče view
- Otevřete Example karta Projekty a ukázky
- Najděte nové demo Bluetooth – NCP.
- Kliknutím na Run flashnete cílový obrázek NCP na hrací plochu.
(Poznámka: na rozdíl od Bluetooth – NCP Empty tento projekt neobsahuje předpřipravenou databázi GATT, ale má povolené dynamické GATT API, což je předpoklad pro další části)
- Opakujte stejné kroky pro další desku rádia.
Vytvoření serverové aplikace Bluetooth v Pythonu
Začínáme
- Balíček pybgapi poskytuje možnost vydávat příkazy BGAPI směrem k cílovému zařízení z PC pomocí programovacího jazyka Python. Chcete-li nainstalovat tento balíček, zadejte do příkazového řádku následující: pip install pybgapi Další informace o balíčku naleznete na adrese https://pypi.org/project/pybgapi/
- Vyhledejte nejnovější definici BGAPI file pod
- C:\SiliconLabs\SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.2.0\protocol\bluetooth\api\sl_bt.xapi a zkopírujte jej do své pracovní složky.
- Otevřete python bash (zadejte python v CLI)
- Importujte knihovnu bgapi pomocí následujícího příkazu: >>> import bgapi
- Najděte číslo COM portu (např. COM49) jedné z vašich rádiových desek. Měli byste hledat „JLink CDC UART Port“ ve Správci zařízení nebo ve své oblíbené terminálové aplikaci.
- Připojte se k vaší rádiové desce:
- >>> připojení = bgapi.SerialConnector('COM49')
- Inicializujte knihovnu pybgapi pro tento uzel:
- >>> uzel = bgapi.BGLib(spojení,'sl_bt.xapi')
- Otevřete komunikaci BGAPI směrem k tomuto uzlu:
- >>> node.open()
- Zkontrolujte, zda můžete komunikovat s deskou pomocí příkazu system_hello(). Měli byste dostat odpověď system_hello:
- >>> node.bt.system.hello()
- bt_rsp_system_hello(výsledek=0)
- >>> node.bt.system.hello()
- Resetujte svůj uzel pomocí následujícího příkazu:
- node.bt.system.reset(0)
- Nyní byste měli získat událost system_boot. Chcete-li načíst nejnovější událost, použijte následující příkaz:
- evt = node.get_events(max_events=1)
- tisknout (evt)
- [bt_evt_system_boot(major=3, minor=2, patch=0, build=774, bootloader=17563648, hw=1, hash=1181938724)]
Budování databáze GATT
- Cílová aplikace Bluetooth – NCP neobsahuje předem vytvořenou databázi GATT. Zde vytvoříme databázi z kódu. Nejprve spusťte relaci pro vytváření databáze:
- >>> session = node.bt.gattdb.new_session().session
- Přidejte do databáze GATT novou službu. Zde přidáme službu Generic Access přijatou společností Bluetooth SIG. Toto je primární služba (0x0) bez nastavených příznaků (0x0) a s 16bitovým UUID (0x1800).
- service = node.bt.gattdb.add_service(session, 0, 0, bytes.fromhex(“0018”)).service
- Přidejte do služby novou charakteristiku. Zde přidáme charakteristiku Device Name ke službě Generic Access s vlastností READ (0x2), bez bezpečnostních požadavků (0x0), bez příznaků (0x0), 16bit UUID (0x2a00), proměnnou délkou (0x2), maximální délkou 20 a s počáteční hodnotou „PyBGAPI
Example":
- >>> char = node.bt.gattdb.add_uuid16_characteristic(session, service, 2, 0, 0, bytes.fromhex('002a'), 2,
- 20, bajtů('PyBGAPI Example','utf-8′)).charakteristický
- 3.15 Aktivujte novou službu:
- >>> node.bt.gattdb.start_service(session,service)
- bt_rsp_gattdb_start_service(výsledek=0)
- Aktivujte novou charakteristiku:
- >>> node.bt.gattdb.start_characteristic(session, char)
- bt_rsp_gattdb_start_characteristic(výsledek=0)
- >>> node.bt.gattdb.start_characteristic(session, char)
- Uložte změny a zavřete relaci úprav databáze:
- >>> node.bt.gattdb.commit(session)
- bt_rsp_gattdb_commit(výsledek=0)
Připojování k serveru
- 3.18 Nyní, když máme název zařízení v databázi GATT, můžeme začít inzerovat. Zásobník automaticky propaguje zařízení s názvem definovaným v databázi GATT:
- >>> inzerent_set = node.bt.advertiser.create_set().handle
- >>> node.bt.advertiser.start(advertiser_set, 2, 2)
- bt_rsp_advertiser_start(výsledek=0)
- Spusťte na svém telefonu EFR Connect a najděte své zařízení inzerující jako „PyBGAPI Example ”
- Můžete se připojit k zařízení a objevit jeho databázi GATT, která má nyní charakteristiku Název zařízení
Poznámka: pokud chcete velmi rychlé example aniž byste se museli obtěžovat s databází GATT, stále můžete flashovat Bluetooth – NCP Empty example na vaši desku, která má základní předpřipravenou databázi GATT. V tomto případě vše, co musíte udělat na straně hostitele, je:
- >>> import bgapi
- >>> připojení = bgapi.SerialConnector('COM49')
- >>> uzel = bgapi.BGLib(spojení,'sl_bt.xapi')
- >>> node.open()
- >>> inzerent_set = node.bt.advertiser.create_set().handle
- >>> node.bt.advertiser.start(advertiser_set, 2, 2)
- bt_rsp_advertiser_start(výsledek=0)
Vytvoření klientské aplikace Bluetooth v Pythonu
- Vytvoření klienta je složitější než implementace serveru. Proto napíšeme python skript. Otevřete svůj oblíbený textový editor a vytvořte nový file, říkejme tomu client.py
- Importujte následující položky:
- Stejně jako v případě serveru se k uzlu připojíme přes UART. Zde použijte číslo COM portu vaší druhé desky:
- Odtud bude naše aplikace řízena událostmi. Kdykoli je zásobníkem vygenerována událost Bluetooth, událost zpracujeme a aplikaci posuneme vpřed:
- Definujme funkci event handler a přidejme handler pro událost system_boot, kde začneme skenovat periferní zařízení. Všimněte si, že tato funkce by měla být definována před smyčkou while (a po definici proměnné uzlu).
- Po spuštění skeneru bude uzel přijímat zprávy o skenování. Přidejme obslužnou rutinu události pro zprávy o skenování v rámci funkce sl_bt_on_event(). Pokud je nalezena zpráva o skenování s inzerovaným názvem zařízení „PyBGAPI Example“, klient otevře připojení k tomuto zařízení:
- Jakmile dosáhnete tohoto bodu, stojí za to zkontrolovat, zda váš klient najde server. Ujistěte se, že jste spustili reklamu na druhém zařízení, poté uložte client.py a spusťte jej z příkazového řádku. Měli byste vidět něco takového:
- Klient musí objevit služby a vlastnosti na serveru. Zde objevíme službu Generic Access a charakteristiku Device Name a nakonec přečteme hodnotu charakteristiky Device Name. Nahraďte svou aktuální funkci sl_bt_on_event() následujícím kódem:
- Uložte client.py a spusťte jej z příkazového řádku. Měli byste vidět něco takového:
Přidání funkce LE Power Control
Bliká cílová zařízení
LE Power Control není povoleno v Bluetooth example projekty ve výchozím nastavení. Chcete-li přidat tuto funkci, musí být nainstalována softwarová komponenta Bluetooth > Funkce > PowerControl.
- Otevřete spouštěč view z Simplicity Studio 5.
- Vyberte jedno ze svých zařízení na kartě Debug Adapters. Ujistěte se, že preferovaná sada SDK je v3.2.
- Otevřete Example Projects & Demos a najděte Bluetooth – NCP Empty example. Stisknutím [Vytvořit] vytvořte projekt. (Tentokrát nechceme budovat databázi GATT, takže použijeme NCP Empty, která má výchozí.)
- Otevřete záložku GATT Configurator, vyberte charakteristiku Device Name a přepište „Silabs Example“ počáteční hodnota s „PyBGAPI Example“ (aby klient server rozpoznal). Přepište také délku hodnoty 15.
- Stiskněte ctrl-s pro uložení databáze.
- V konfigurátoru projektu otevřete kartu Softwarové komponenty.
- Najděte softwarovou komponentu Bluetooth > Funkce > PowerControl a klikněte na [Instalovat]
- Kliknutím na ozubené kolečko vedle softwarové komponenty PowerControl zkontrolujte horní a dolní hranici zlatého rozsahu. Nastavte spodní limit pro 1M
- PHY na -45 (místo -60). I když v praxi tato hodnota není optimální, povede to k většímu nastavení Tx výkonu, což je dobré pro demonstrační účely.
- Ve verzi SDK 3.2.0 je pro správné nastavení zlatého rozsahu nutné použít malé řešení: otevřete soubor sl_bluetooth.c file najdete ve složce /autogen vašeho projektu a přesuňte sl_bt_init_power_control(); volání funkce PŘED sl_bt_init_stack(&config);
- Sestavte projekt a flashujte jej na nástěnku.
- Pokud jsou vaše dvě desky stejného typu, flashujte stejný obrázek také na druhé desce. Pokud je vaše druhá deska jiná deska, opakujte výše uvedené kroky pro druhou desku.
Spuštění serveru a klienta
- Nyní znovu otevřete bash Pythonu, připojte se ke své první desce a začněte inzerovat
- Upravte svou klientskou aplikaci tak, aby se po přečtení názvu zařízení neukončila. Najděte následující řádky a vložte je do komentáře:
- Uložte a spusťte svou klientskou aplikaci
- py .\client.py
- Umístěte své dvě desky daleko a pak je pomalu přibližujte k sobě. Nyní byste měli vidět, že zásobník začíná snižovat úroveň výkonu z výchozích 8 dBm až na -3 dBm (což je ve výchozím nastavení minimální výkon Tx):
Dokumenty / zdroje
![]() |
SILICON LABS 21Q2 Bluetooth Features Lab [pdfNávod k obsluze 21Q2, Laboratoř funkcí Bluetooth, Laboratoř funkcí Bluetooth 21Q2, Laboratoř funkcí, Laboratoř |