ubluepy — Bluetooth LE periferija i centralni uređaj¶
Modul ubluepy je naslijeđeni Bluetooth LE API koji se isporučuje s MicroPython nRF portom. Labavo je modeliran prema Linux bluepy Python biblioteci i smješten je izravno na vrh Nordic SoftDevicea — ne postoji prenosivi back-end, pa je modul dostupan samo na Nordic ciljnim uređajima (Arduino Nano 33 BLE Sense u OpenMV ponudi). Noviji bluetooth / aioble API-ji nisu omogućeni u ovoj verziji, pa je ubluepy jedini način upravljanja radijem na čipu.
Dostupni skup značajki ovisi o SoftDeviceu koji je ugrađeni program (firmware) zapisao u flash memoriju:
s140 (Nano 33 BLE Sense) — obje uloge: periferija i centralni uređaj (skener). To je ono što OpenMV ugrađeni program (firmware) isporučuje.
s132 — i periferija i centralni uređaj.
s110 — samo periferija; metode skenera / povezivanja isključene su iz kompilacije.
Primjer periferije¶
Oglašavanje kao Bluetooth LE periferija s jednom uslugom za očitavanje okoline i obavještavanje o karakteristici temperature pri svakom upisu u njezin Client Characteristic Configuration Descriptor (CCCD):
from ubluepy import Service, Characteristic, UUID, Peripheral, constants
from machine import LED
notif_enabled = False
def event_handler(event_id, handle, data):
global notif_enabled
if event_id == constants.EVT_GAP_CONNECTED:
LED("LED_GREEN").on()
elif event_id == constants.EVT_GAP_DISCONNECTED:
LED("LED_GREEN").off()
periph.advertise(device_name="Nano 33", services=[svc])
elif event_id == constants.EVT_GATTS_WRITE:
notif_enabled = bool(data[0])
svc = Service(UUID("181A")) # Environmental Sensing
char = Characteristic(UUID("2A6E"),
props=Characteristic.PROP_NOTIFY | Characteristic.PROP_READ,
attrs=Characteristic.ATTR_CCCD)
svc.addCharacteristic(char)
periph = Peripheral()
periph.addService(svc)
periph.setConnectionHandler(event_handler)
periph.advertise(device_name="Nano 33", services=[svc])
Primjer centralnog uređaja¶
Skeniranje obližnjih uređaja koji se oglašavaju tijekom 100 ms i dekodiranje podataka oglašavanja svakog ScanEntry
from ubluepy import Scanner, constants
s = Scanner()
for entry in s.scan(100):
print(entry.addr(), entry.rssi(), "dBm")
for ad_type, name, value in entry.getScanData():
print(" ", ad_type, name, bytes(value))
Sadržaj modula¶
Klase¶
- class ubluepy.UUID(value)¶
Konstruira 16-bitni ili 128-bitni Bluetooth UUID.
valueJedno od:
int— 16-bitni numerički UUID (UUID(0x180A)).6-znakovni
"0xXXXX"string — 16-bitni UUID, npr.UUID("0x181A").36-znakovni
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"string — potpuni 128-bitni UUID. Dio specifičan za proizvođača registrira se sa SoftDeviceom prilikom konstrukcije.Druga instanca
UUID— izvodi kopiranje.
Bilo koja druga duljina podiže
ValueError("Invalid UUID string length").
- class ubluepy.Service(uuid: UUID, type: int = Service.PRIMARY)¶
Definira GATT uslugu koja će biti registrirana sa SoftDeviceom kada se doda u
Peripheral.uuidInstanca
UUID. Prosljeđivanje objekta koji nije UUID podižeValueError.typeIli
Service.PRIMARY(zadano) iliService.SECONDARY. Druge vrijednosti podižuValueError.
- addCharacteristic(characteristic: Characteristic) None¶
Registrira
Characteristicu uslugu. GATT identifikator karakteristike dodjeljuje se tijekom ovog poziva.
- getCharacteristic(uuid: UUID) Characteristic | None¶
Traži prethodno dodanu
Characteristicpo UUID-u. Vraća instancu karakteristike iliNoneako nema podudaranja.
- class ubluepy.Characteristic(uuid: UUID, *, props: int = PROP_READ | PROP_WRITE, attrs: int = 0)¶
Definira GATT karakteristiku. Dodajte je u
ServicepomoćuService.addCharacteristic()prije nego što nadređenaPeripheralpočne oglašavanje.uuidInstanca
UUID.props(samo ključna riječ)Bitovna maska jedne ili više
Characteristic.PROP_*vrijednosti koje opisuju koje operacije karakteristika podržava.attrs(samo ključna riječ)Bitovna maska dodatnih GATT atributa. Koristite
Characteristic.ATTR_CCCDza pridruživanje Client Characteristic Configuration Descriptora — potreban je da biPROP_NOTIFY/PROP_INDICATEkarakteristike radile.
- read() bytearray¶
Samo uloga centralnog uređaja. Čita vrijednost karakteristike s povezanog ravnopravnog uređaja. Vraća
bytearrays najnovijom vrijednošću. Na periferiji ovo nema učinka i vraćaNone.
- write(data, *, with_response: bool = False) None¶
Upisuje u karakteristiku.
Na periferiji, ako je
PROP_NOTIFYpostavljen u svojstvima karakteristike, vrijednost se šalje kao GATT obavijest povezanom centralnom uređaju; u suprotnom se ažurira lokalna vrijednost atributa.Na centralnom uređaju, vrijednost se upisuje u udaljeni ravnopravni uređaj. Postavite
with_response=Trueza izdavanje zahtjeva za upis i čekanje potvrde ravnopravnog uređaja umjesto naredbe za upis.
dataje bilo koji objekt koji podržava buffer protokol (bytes,bytearray,memoryview).
- class ubluepy.Descriptor(uuid: UUID)¶
Stub klasa za predstavljanje GATT deskriptora. Trenutna implementacija pohranjuje samo UUID i ne izlaže nijednu metodu — pružena je radi buduće kompatibilnosti s budućim revizijama modula.
- class ubluepy.Peripheral¶
Lokalni Bluetooth LE uređaj. Ista se klasa koristi za uloge periferije i centralnog uređaja; uloga se odabire prema tome koje metode pozivate (
advertise()odabire periferiju,connect()odabire centralni uređaj).- addService(service: Service) None¶
Registrira
Service(i sve njezine prethodno dodane karakteristike) na lokalni GATT poslužitelj.
- getServices() list¶
Vraća popis usluga trenutno registriranih s ovom
Peripheral.
- advertise(*, device_name: str | None = None, services: list | None = None, data: bytes | None = None, connectable: bool = True) None¶
Pokreće oglašavanje u ulozi periferije.
device_namePotpuno lokalno ime oglašavano u GAP korisnom opterećenju.
servicesPopis instanci
Servicekoje treba oglasiti. UUID svake usluge uključen je u oglas.dataOpcionalno sirovo korisno opterećenje oglasa (
bytes/bytearray) pridruženo automatski generiranom zaglavlju. Koristite ovo za korisna opterećenja specifična za proizvođača ili beacon, poput Eddystonea.connectableKada je
True(zadano), oglašava se kao uređaj na koji se može povezati i registrira GAP / GATTS rukovatelje događajima tako da se konfiguriranisetConnectionHandler()povratni poziv aktivira pri povezivanju, prekidu veze i upisima u CCCD. Kada jeFalse, oglašava se kao beacon — ne pridružuju se rukovatelji i s uređajem se nije moguće povezati.
- setConnectionHandler(func) None¶
Registrira povratni poziv koji se poziva za GAP i GATTS događaje. Povratni poziv poziva se kao
func(event_id, conn_handle, data)gdje jeevent_idjedna od vrijednosticonstants.EVT_GAP_CONNECTED,constants.EVT_GAP_DISCONNECTEDiliconstants.EVT_GATTS_WRITE,conn_handleje SoftDeviceov identifikator veze (ili identifikator atributa za GATTS upise), adataje sirovo korisno opterećenje događaja kaobytearray(iliNoneza povezivanje / prekid veze).
- setNotificationHandler(func) None¶
Registrira povratni poziv za događaje obavijesti primljene u ulozi centralnog uređaja.
- withDelegate(delegate: DefaultDelegate) None¶
Pridružuje instancu
DefaultDelegateza primanje dekodiranih GATT događaja.
- connect(addr, *, addr_type: int = constants.ADDR_TYPE_PUBLIC) None¶
Samo uloga centralnog uređaja. Povezuje se s ravnopravnim uređajem na zadanoj adresi i sinkrono otkriva njegove primarne usluge i karakteristike. Blokira dok se veza ne uspostavi i otkrivanje ne dovrši; otkrivene usluge zatim su dostupne putem
getServices().addrAdresa ravnopravnog uređaja kao 17-znakovni
"xx:xx:xx:xx:xx:xx"string (npr. preuzeta izScanEntry.addr()).addr_type(samo ključna riječ)Ili
constants.ADDR_TYPE_PUBLIC(zadano) iliconstants.ADDR_TYPE_RANDOM_STATIC.
- class ubluepy.Scanner¶
GAP promatrač za otkrivanje obližnjih uređaja koji se oglašavaju. Dostupan je samo kada je ugrađeni program (firmware) izgrađen s SoftDeviceom koji podržava centralni uređaj (s132 / s140).
- class ubluepy.ScanEntry¶
Pojedinačni izvještaj oglasa koji je zabilježio
Scanner.scan(). Instance vraća skener — ne postoji javni konstruktor.- addr_type() int¶
Vraća tip adrese ravnopravnog uređaja (
constants.ADDR_TYPE_PUBLICiliconstants.ADDR_TYPE_RANDOM_STATIC).
- getScanData() list¶
Dekodira korisno opterećenje oglasa u popis
(ad_type, description, value)n-torki.ad_typeje numerički bajt AD tipa (pogledajteconstants.ad_types),descriptionje ime odgovarajuće konstante kao string (iliNoneako je tip nepoznat), avalueje tijelo AD zapisa kaobytearray.
- class ubluepy.DefaultDelegate¶
Bazna klasa za objekte koji se prosljeđuju metodi
Peripheral.withDelegate(). Naslijedite je i nadjačajtehandleConnection()/handleNotification()za reagiranje na GATT događaje.
Konstante¶
Atribut constants modula je imenski prostor koji sadrži GAP/GATT identifikatore događaja, vrijednosti tipova adresa i ugniježđeni imenski prostor ad_types.
- constants.EVT_GAP_CONNECTED: int¶
Vrijednost
event_idrukovatelja vezomPeripheralza GAP povezivanje (16).
- constants.EVT_GAP_DISCONNECTED: int¶
Vrijednost
event_idrukovatelja vezomPeripheralza GAP prekid veze (17).
- constants.EVT_GATTS_WRITE: int¶
Vrijednost
event_idrukovatelja vezomPeripheralza upis u lokalni GATT atribut, uključujući upise u CCCD koji omogućuju/onemogućuju obavijesti (80).
- constants.UUID_CCCD: int¶
Standardni Bluetooth UUID za Client Characteristic Configuration Descriptor (
0x2902).
- constants.ad_types: type¶
Imenski prostor konstanti AD tipova podataka oglašavanja iz Bluetooth Core Specification Supplementa. Svako ime mapira se na odgovarajući 1-bajtni AD tip:
Ime
Vrijednost
AD_TYPE_FLAGS0x01AD_TYPE_16BIT_SERVICE_UUID_MORE_AVAILABLE0x02AD_TYPE_16BIT_SERVICE_UUID_COMPLETE0x03AD_TYPE_32BIT_SERVICE_UUID_MORE_AVAILABLE0x04AD_TYPE_32BIT_SERVICE_UUID_COMPLETE0x05AD_TYPE_128BIT_SERVICE_UUID_MORE_AVAILABLE0x06AD_TYPE_128BIT_SERVICE_UUID_COMPLETE0x07AD_TYPE_SHORT_LOCAL_NAME0x08AD_TYPE_COMPLETE_LOCAL_NAME0x09AD_TYPE_TX_POWER_LEVEL0x0AAD_TYPE_CLASS_OF_DEVICE0x0DAD_TYPE_SIMPLE_PAIRING_HASH_C0x0EAD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R0x0FAD_TYPE_SECURITY_MANAGER_TK_VALUE0x10AD_TYPE_SECURITY_MANAGER_OOB_FLAGS0x11AD_TYPE_SLAVE_CONNECTION_INTERVAL_RANGE0x12AD_TYPE_SOLICITED_SERVICE_UUIDS_16BIT0x14AD_TYPE_SOLICITED_SERVICE_UUIDS_128BIT0x15AD_TYPE_SERVICE_DATA0x16AD_TYPE_PUBLIC_TARGET_ADDRESS0x17AD_TYPE_RANDOM_TARGET_ADDRESS0x18AD_TYPE_APPEARANCE0x19AD_TYPE_ADVERTISING_INTERVAL0x1AAD_TYPE_LE_BLUETOOTH_DEVICE_ADDRESS0x1BAD_TYPE_LE_ROLE0x1CAD_TYPE_SIMPLE_PAIRING_HASH_C2560x1DAD_TYPE_SIMPLE_PAIRING_RANDOMIZER_R2560x1EAD_TYPE_SERVICE_DATA_32BIT_UUID0x20AD_TYPE_SERVICE_DATA_128BIT_UUID0x21AD_TYPE_URI0x24AD_TYPE_3D_INFORMATION_DATA0x3DAD_TYPE_MANUFACTURER_SPECIFIC_DATA0xFF