SILICON LABS 21Q2 Laboratorija Bluetooth funkcija
Bluetooth 21Q2 Features Lab Manual
Ovaj laboratorijski priručnik vodi vas kroz neke od novih Bluetooth SDK funkcija koje su predstavljene između 20Q4 i 21Q2 izdanja. U ovoj laboratoriji ćemo kreirati NCP example i napisati host softver na jeziku Python. Koristeći novu dinamičku GATT funkciju, takođe ćemo izgraditi GATT bazu podataka iz host softvera umesto da koristimo GATT konfigurator. Konačno, funkcija LE Power Control je predstavljena proširenjem host softvera.![]()
Preduvjeti
Da biste završili ovaj laboratorij, trebat će vam sljedeće:
- Dva Thunderboard BG22 ili dva WSTK sa bilo kojom radio pločom EFR32BG/EFR32MG ili kombinacijom ovih
- Instaliran Simplicity Studio 5, sa Gecko SDK v3.2 uključujući Bluetooth SDKv3.2
- Računar na kojem je instaliran Python v3.6 ili noviji
Treptanje ciljnih uređaja za NCP funkcionalnost
- Pričvrstite svoje dvije radio ploče i otvorite Simplicity Studio 5
- Odaberite jednu od radio ploča na kartici Debug Adapters
- Postavite Preferred SDK na v3.2.0 na Overview karticu pokretača view
- Otvorite Example Projekti i demonstracije kartica
- Pronađite novi Bluetooth – NCP demo.
- Kliknite na Pokreni da bljesnete NCP ciljnu sliku na ploču.

(Napomena: za razliku od Bluetooth – NCP Empty, ovaj projekat ne uključuje unaprijed izgrađenu GATT bazu podataka, ali ima omogućen dinamički GATT API, što je preduvjet za sljedeće odjeljke)
- Ponovite iste korake za drugu radio ploču.
Kreiranje Bluetooth serverske aplikacije u Pythonu
Getting Started
- Paket pybgapi pruža mogućnost izdavanja BGAPI komandi prema ciljnom uređaju sa računara koristeći programski jezik Python. Da biste instalirali ovaj paket u komandnu liniju upišite sljedeće: pip install pybgapi Za dalje informacije o paketu posjetite https://pypi.org/project/pybgapi/
- Pronađite najnoviju BGAPI definiciju file ispod
- C:\SiliconLabs\SimplicityStudio\v5\developer\sdks\gecko_sdk_suite\v3.2.0\protocol\bluetooth\api\sl_bt.xapi i kopirajte ga u svoj radni folder.
- Otvorite python bash (upišite python u CLI)
- Uvezite bgapi biblioteku sa sljedećom naredbom: >>> import bgapi
- Pronađite broj COM porta (npr. COM49) jedne od vaših radio ploča. Trebali biste potražiti “JLink CDC UART port” u upravitelju uređaja ili u svojoj omiljenoj terminalskoj aplikaciji.

- Povežite se na vašu radio ploču:
- >>> konekcija = bgapi.SerialConnector('COM49')
- Inicijalizirajte pybgapi biblioteku za ovaj čvor:
- >>> čvor = bgapi.BGLib(veza,'sl_bt.xapi')
- Otvorite BGAPI komunikaciju prema ovom čvoru:
- >>> node.open()
- Provjerite možete li komunicirati s pločom, koristeći naredbu system_hello(). Trebali biste dobiti system_hello odgovor:
- >>> node.bt.system.hello()
- bt_rsp_system_hello(rezultat=0)
- >>> node.bt.system.hello()
- Resetirajte svoj čvor sljedećom naredbom:
- node.bt.system.reset(0)
- Sada biste trebali dobiti događaj system_boot. Za preuzimanje najnovijeg događaja koristite sljedeću naredbu:
- evt = node.get_events(max_events=1)
- print(evt)
- [bt_evt_system_boot(major=3, minor=2, patch=0, build=774, bootloader=17563648, hw=1, hash=1181938724)]
Izgradnja GATT baze podataka
- Bluetooth – NCP ciljna aplikacija ne uključuje unaprijed izgrađenu GATT bazu podataka. Ovdje ćemo izgraditi bazu podataka iz koda. Prvo započnite sesiju za izgradnju baze podataka:
- >>> sesija = node.bt.gattdb.new_session().session
- Dodajte novu uslugu u GATT bazu podataka. Ovdje ćemo dodati uslugu generičkog pristupa koju je usvojio Bluetooth SIG. Ovo je primarna usluga (0x0) bez postavljenih oznaka (0x0) i sa 16-bitnim UUID-om (0x1800).
- service = node.bt.gattdb.add_service(session, 0, 0, bytes.fromhex(“0018”)).service
- Dodajte novu karakteristiku usluzi. Ovdje ćemo dodati karakteristiku naziva uređaja u uslugu generičkog pristupa sa svojstvom READ (0x2), bez sigurnosnih zahtjeva (0x0), bez zastavica (0x0), 16-bitni UUID (0x2a00), varijabilnu dužinu (0x2), maksimalnu dužinu od 20 i sa početnom vrijednošću “PyBGAPI
Example”:
- >>> char = node.bt.gattdb.add_uuid16_characteristic(session, service, 2, 0, 0, bytes.fromhex('002a'), 2,
- 20, bajtova('PyBGAPI Example','utf-8′)).
- 3.15 Aktivirajte novu uslugu:
- >>> node.bt.gattdb.start_service(session,service)
- bt_rsp_gattdb_start_service(rezultat=0)
- Aktivirajte novu karakteristiku:
- >>> node.bt.gattdb.start_characteristic(session, char)
- bt_rsp_gattdb_start_characteristic(rezultat=0)
- >>> node.bt.gattdb.start_characteristic(session, char)
- Sačuvajte promjene i zatvorite sesiju uređivanja baze podataka:
- >>> node.bt.gattdb.commit(session)
- bt_rsp_gattdb_commit(rezultat=0)
Povezivanje sa serverom
- 3.18 Sada kada imamo naziv uređaja u GATT bazi podataka, možemo početi oglašavati. Stack će automatski reklamirati uređaj sa imenom definiranim u njegovoj GATT bazi podataka:
- >>> advertiser_set = node.bt.advertiser.create_set().handle
- >>> node.bt.advertiser.start(advertiser_set, 2, 2)
- bt_rsp_advertiser_start(rezultat=0)
- Pokrenite EFR Connect na svom telefonu i pronađite svoj uređaj koji se reklamira kao „PyBGAPI Example ”
- Možete se povezati s uređajem i otkriti njegovu GATT bazu podataka koja sada ima karakteristiku naziva uređaja
Napomena: ako želite vrlo brzu bivšuampbez mučenja sa GATT bazom podataka, i dalje možete flešovati Bluetooth – NCP Empty example do vaše ploče, koja ima osnovnu unaprijed izgrađenu GATT bazu podataka. U ovom slučaju sve što trebate učiniti na strani domaćina je:
- >>> import bgapi
- >>> konekcija = bgapi.SerialConnector('COM49')
- >>> čvor = bgapi.BGLib(veza,'sl_bt.xapi')
- >>> node.open()
- >>> advertiser_set = node.bt.advertiser.create_set().handle
- >>> node.bt.advertiser.start(advertiser_set, 2, 2)
- bt_rsp_advertiser_start(rezultat=0)
Kreiranje Bluetooth klijentske aplikacije u Pythonu
- Kreiranje klijenta je komplikovanije od implementacije servera. Stoga ćemo napisati python skriptu. Otvorite svoj omiljeni uređivač teksta i kreirajte novi file, nazovimo ga client.py
- Uvezite sljedeće:

- Kao iu slučaju servera, na čvor ćemo se povezati preko UART-a. Ovdje koristite broj COM porta vaše druge ploče:

- Odavde će naša aplikacija biti vođena događajima. Kad god stek generira Bluetooth događaj, mi ćemo obraditi događaj i pokrenuti aplikaciju naprijed:

- Hajde da definišemo funkciju rukovaoca događajima i dodamo rukovalac za događaj system_boot, gde ćemo započeti skeniranje perifernih uređaja. Imajte na umu da ovu funkciju treba definirati prije while petlje (i nakon definicije varijable čvora).

- Kada se skener pokrene, čvor će primati izvještaje o skeniranju. Dodajmo obrađivač događaja za izvještaje o skeniranju unutar funkcije sl_bt_on_event(). Ako se pronađe izvještaj o skeniranju s oglašenim nazivom uređaja „PyBGAPI Example”, klijent će otvoriti vezu prema tom uređaju:

- Kada dođete do ove tačke, vredi proveriti da li je vaš klijent pronašao server. Uvjerite se da ste pokrenuli oglas na drugom uređaju, zatim sačuvajte client.py i pokrenite ga iz komandne linije. Trebali biste vidjeti nešto ovako:

- Klijent mora otkriti usluge i karakteristike na serveru. Ovdje ćemo otkriti uslugu generičkog pristupa i karakteristiku naziva uređaja i na kraju pročitati vrijednost karakteristike naziva uređaja. Zamijenite svoju trenutnu sl_bt_on_event() funkciju sa sljedećim kodom:

- Sačuvajte client.py i pokrenite ga iz komandne linije. Trebali biste vidjeti nešto ovako:

Dodavanje LE funkcije kontrole napajanja
Treptanje ciljnih uređaja
LE kontrola napajanja nije omogućena u Bluetooth example projekte po defaultu. Da biste dodali ovu funkciju, softverska komponenta Bluetooth > Funkcija > PowerControl mora biti instalirana.
- Otvorite pokretač view Simplicity Studio 5.
- Odaberite jedan od svojih uređaja na kartici Debug Adapters. Provjerite je li preferirani SDK v3.2.
- Otvorite Exampu kartici Projekti i demonstracije i pronađite Bluetooth – NCP Empty example. Pritisnite [Kreiraj] da kreirate projekat. (Ovaj put ne želimo da gradimo GATT bazu podataka, pa koristimo NCP Empty, koji ima podrazumevani.)
- Otvorite karticu GATT Configurator, odaberite karakteristiku naziva uređaja i prepišite “Silabs Example” početna vrijednost sa “PyBGAPI Example” (tako da će klijent prepoznati server). Također zamenite dužinu vrijednosti sa 15.
- Pritisnite ctrl-s da sačuvate bazu podataka.
- U Konfiguratoru projekta otvorite karticu Softverske komponente.
- Pronađite softversku komponentu Bluetooth > Funkcija > PowerControl i kliknite na [Instaliraj]

- Kliknite na zupčanik pored PowerControlsoftware komponente da provjerite gornju i donju granicu zlatnog raspona. Postavite donju granicu za 1M
- PHY na -45 (umjesto -60). Iako u praksi ova vrijednost nije optimalna, rezultirat će više podešavanja Tx snage, što je dobro za potrebe demonstracije.
- U SDK verziji 3.2.0, potrebno je primijeniti malo rješenje za pravilno postavljanje zlatnog raspona: otvorite sl_bluetooth.c file pronaći u /autogen folderu vašeg projekta i premjestiti sl_bt_init_power_control(); poziv funkcije PRIJE sl_bt_init_stack(&config);

- Napravite projekat i flešujte ga na svoju ploču.
- Ako su vaše dvije ploče istog tipa, prebacite istu sliku i na drugu ploču. Ako je vaša druga ploča druga ploča, ponovite gore navedene korake za drugu ploču.
Pokretanje servera i klijenta
- Sada opet, otvorite Python bash, povežite se na svoju prvu ploču i počnite oglašavati

- Izmijenite svoju klijentsku aplikaciju tako da ne izlazi nakon čitanja naziva uređaja. Pronađite sljedeće redove i stavite ih u komentar:

- Sačuvajte i pokrenite svoju klijentsku aplikaciju
- py .\client.py
- Postavite svoje dvije ploče daleko, a zatim ih polako približavajte jednu drugoj. Sada biste trebali vidjeti da stek počinje da smanjuje svoj nivo snage sa zadanih 8dBm na -3dBm (što je minimalna Tx snaga po defaultu):

Dokumenti / Resursi
![]() |
SILICON LABS 21Q2 Laboratorija Bluetooth funkcija [pdfUputstvo za upotrebu 21Q2, Laboratorija Bluetooth funkcija, 21Q2 Laboratorija Bluetooth funkcija, Laboratorija funkcija, Laboratorija |


