ubluepy — Bluetooth LE -oheislaite ja -keskuslaite¶
ubluepy-moduuli on vanha Bluetooth LE -rajapinta, joka toimitetaan MicroPythonin nRF-sovituksen mukana. Se on löyhästi mallinnettu Linuxin bluepy-Python-kirjaston pohjalta ja sijaitsee suoraan Nordic SoftDevicen päällä — siirrettävää taustaosaa ei ole, joten moduuli on saatavilla vain Nordic-kohteilla (OpenMV:n valikoimassa Arduino Nano 33 BLE Sense). Uudemmat bluetooth- / aioble-rajapinnat eivät ole käytössä tässä koonnoksessa, joten ubluepy on ainoa tapa ohjata sirulla olevaa radiota.
Käytettävissä oleva ominaisuusjoukko riippuu laiteohjelmiston flash-muistiin ohjelmoimasta SoftDevicestä:
s140 (Nano 33 BLE Sense) — sekä oheislaite- että keskuslaiteroolit (skannaaja). Tämän OpenMV-laiteohjelmisto toimittaa.
s132 — sekä oheislaite että keskuslaite.
s110 — vain oheislaite; skannaus- ja yhteysmetodit on käännetty pois.
Oheislaite-esimerkki¶
Mainosta laitetta Bluetooth LE -oheislaitteena yhdellä ympäristönmittauspalvelulla ja ilmoita lämpötilaominaisuus jokaisella kirjoituksella sen Client Characteristic Configuration Descriptoriin (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])
Keskuslaite-esimerkki¶
Skannaa lähellä olevia mainostavia laitteita 100 ms:n ajan ja pura kunkin ScanEntry-kohteen mainostiedot:
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))
Moduulin sisältö¶
Luokat¶
- class ubluepy.UUID(value)¶
Rakenna 16- tai 128-bittinen Bluetooth-UUID.
valueYksi seuraavista:
int— 16-bittinen numeerinen UUID (UUID(0x180A)).6-merkkinen
"0xXXXX"-merkkijono — 16-bittinen UUID, esim.UUID("0x181A").36-merkkinen
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"-merkkijono — täysi 128-bittinen UUID. Toimittajakohtainen osa rekisteröidään SoftDeviceen rakennuksen yhteydessä.Toinen
UUID-instanssi — tekee kopion.
Mikä tahansa muu pituus aiheuttaa
ValueError("Invalid UUID string length").
- class ubluepy.Service(uuid: UUID, type: int = Service.PRIMARY)¶
Määritä GATT-palvelu, joka rekisteröidään SoftDeviceen, kun se lisätään
Peripheral-laitteeseen.uuidUUID-instanssi. Muun kuin UUID-objektin välittäminen aiheuttaaValueError-virheen.typeJoko
Service.PRIMARY(oletus) taiService.SECONDARY. Muut arvot aiheuttavatValueError-virheen.
- addCharacteristic(characteristic: Characteristic) None¶
Rekisteröi
Characteristicpalveluun. Ominaisuuden GATT-kahva määritetään tämän kutsun aikana.
- getCharacteristic(uuid: UUID) Characteristic | None¶
Hae aiemmin lisätty
CharacteristicUUID:n perusteella. Palauttaa ominaisuusinstanssin, taiNone, jos vastaavuutta ei löydy.
- class ubluepy.Characteristic(uuid: UUID, *, props: int = PROP_READ | PROP_WRITE, attrs: int = 0)¶
Määritä GATT-ominaisuus. Lisää se
Service-palveluun metodillaService.addCharacteristic()ennen kuin emo-Peripheralalkaa mainostaa.uuidUUID-instanssi.props(vain avainsanana)Bittimaski yhdestä tai useammasta
Characteristic.PROP_*-arvosta, joka kuvaa, mitä toimintoja ominaisuus tukee.attrs(vain avainsanana)Bittimaski lisä-GATT-attribuuteista. Käytä
Characteristic.ATTR_CCCD-arvoa liittääksesi Client Characteristic Configuration Descriptorin — vaaditaan, jottaPROP_NOTIFY- /PROP_INDICATE-ominaisuudet toimivat.
- read() bytearray¶
Vain keskuslaiteroolissa. Lue ominaisuuden arvo yhdistetyltä vertaislaitteelta. Palauttaa
bytearray-objektin, jossa on uusin arvo. Oheislaitteessa tämä ei tee mitään ja palauttaaNone.
- write(data, *, with_response: bool = False) None¶
Kirjoita ominaisuuteen.
Oheislaitteessa, jos
PROP_NOTIFYon asetettu ominaisuuden ominaisuuksiin, arvo lähetetään GATT-ilmoituksena yhdistetylle keskuslaitteelle; muutoin paikallisen attribuutin arvo päivitetään.Keskuslaitteessa arvo kirjoitetaan etävertaislaitteelle. Aseta
with_response=Truelähettääksesi kirjoituspyynnön ja odottaaksesi vertaislaitteen kuittausta kirjoituskomennon sijaan.
dataon mikä tahansa puskuriprotokollaa noudattava objekti (bytes,bytearray,memoryview).
- class ubluepy.Descriptor(uuid: UUID)¶
Tynkäluokka GATT-kuvaajien esittämiseen. Nykyinen toteutus tallentaa vain UUID:n eikä tarjoa metodeja — se on tarjolla yhteensopivuuden vuoksi moduulin tulevien versioiden kanssa.
- class ubluepy.Peripheral¶
Paikallinen Bluetooth LE -laite. Samaa luokkaa käytetään sekä oheislaite- että keskuslaiterooleihin; rooli valitaan sillä, mitä metodeja kutsut (
advertise()valitsee oheislaitteen,connect()valitsee keskuslaitteen).- addService(service: Service) None¶
Rekisteröi
Service(ja kaikki sen aiemmin lisätyt ominaisuudet) paikalliseen GATT-palvelimeen.
- getServices() list¶
Palauttaa luettelon palveluista, jotka on tällä hetkellä rekisteröity tähän
Peripheral-laitteeseen.
- advertise(*, device_name: str | None = None, services: list | None = None, data: bytes | None = None, connectable: bool = True) None¶
Aloita mainostaminen oheislaiteroolissa.
device_nameTäydellinen paikallinen nimi, joka mainostetaan GAP-hyötykuormassa.
servicesLuettelo mainostettavista
Service-instansseista. Kunkin palvelun UUID sisällytetään mainokseen.dataValinnainen raaka mainoshyötykuorma (
bytes/bytearray), joka liitetään automaattisesti luodun otsikon perään. Käytä tätä toimittajakohtaisiin tai majakkahyötykuormiin, kuten Eddystoneen.connectableKun
True(oletus), mainostaa yhdistettävänä laitteena ja rekisteröi GAP- / GATTS-tapahtumankäsittelijät, jotta määritettysetConnectionHandler()-takaisinkutsu laukeaa yhdistettäessä, yhteyttä katkaistaessa ja CCCD-kirjoituksissa. KunFalse, mainostaa majakkana — käsittelijöitä ei liitetä eikä laitteeseen voi muodostaa yhteyttä.
- setConnectionHandler(func) None¶
Rekisteröi takaisinkutsu, joka kutsutaan GAP- ja GATTS-tapahtumissa. Takaisinkutsua kutsutaan muodossa
func(event_id, conn_handle, data), jossaevent_idon yksi arvoistaconstants.EVT_GAP_CONNECTED,constants.EVT_GAP_DISCONNECTEDtaiconstants.EVT_GATTS_WRITE,conn_handleon SoftDevicen yhteyskahva (tai attribuuttikahva GATTS-kirjoituksissa), jadataon raaka tapahtumahyötykuormabytearray-objektina (taiNoneyhdistettäessä / yhteyttä katkaistaessa).
- setNotificationHandler(func) None¶
Rekisteröi takaisinkutsu keskuslaiteroolissa vastaanotetuille ilmoitustapahtumille.
- withDelegate(delegate: DefaultDelegate) None¶
Liitä
DefaultDelegate-instanssi vastaanottamaan puretut GATT-tapahtumat.
- connect(addr, *, addr_type: int = constants.ADDR_TYPE_PUBLIC) None¶
Vain keskuslaiteroolissa. Muodosta yhteys annetulla osoitteella varustettuun vertaislaitteeseen ja löydä synkronisesti sen ensisijaiset palvelut ja ominaisuudet. Estää suorituksen, kunnes yhteys on muodostettu ja löytäminen on valmis; löydetyt palvelut ovat sen jälkeen saatavilla
getServices()-metodin kautta.addrVertaislaitteen osoite 17-merkkisenä
"xx:xx:xx:xx:xx:xx"-merkkijonona (esim.ScanEntry.addr()-metodista otettuna).addr_type(vain avainsanana)Joko
constants.ADDR_TYPE_PUBLIC(oletus) taiconstants.ADDR_TYPE_RANDOM_STATIC.
- class ubluepy.Scanner¶
GAP-tarkkailija lähellä olevien mainostavien laitteiden löytämiseen. Saatavilla vain, kun laiteohjelmisto on koottu keskuslaitetukea sisältävää SoftDeviceä vasten (s132 / s140).
- class ubluepy.ScanEntry¶
Yksittäinen mainosraportti, jonka
Scanner.scan()on tallentanut. Instanssit palautetaan skannaajalta — julkista konstruktoria ei ole.- addr_type() int¶
Palauttaa vertaislaitteen osoitetyypin (
constants.ADDR_TYPE_PUBLICtaiconstants.ADDR_TYPE_RANDOM_STATIC).
- getScanData() list¶
Pura mainoshyötykuorma luetteloksi
(ad_type, description, value)-monikoita.ad_typeon numeerinen AD-tyyppitavu (katsoconstants.ad_types),descriptionon vastaavan vakion nimi merkkijonona (taiNone, jos tyyppi on tuntematon), javalueon AD-tietueen runkobytearray-objektina.
- class ubluepy.DefaultDelegate¶
Kantaluokka objekteille, jotka välitetään
Peripheral.withDelegate()-metodille. Periytä siitä ja korvaahandleConnection()/handleNotification()reagoidaksesi GATT-tapahtumiin.
Vakiot¶
Moduulin constants-attribuutti on nimiavaruus, joka sisältää GAP/GATT-tapahtumatunnisteet, osoitetyyppiarvot ja sisäkkäisen ad_types-nimiavaruuden.
- constants.EVT_GAP_CONNECTED: int¶
Peripheral-yhteyskäsittelijänevent_id-arvo GAP-yhdistämiselle (16).
- constants.EVT_GAP_DISCONNECTED: int¶
Peripheral-yhteyskäsittelijänevent_id-arvo GAP-katkaisulle (17).
- constants.EVT_GATTS_WRITE: int¶
Peripheral-yhteyskäsittelijänevent_id-arvo kirjoitukselle paikalliseen GATT-attribuuttiin, mukaan lukien kirjoitukset CCCD:hen, jotka ottavat ilmoitukset käyttöön / pois käytöstä (80).
- constants.UUID_CCCD: int¶
Bluetooth-standardin UUID Client Characteristic Configuration Descriptorille (
0x2902).
- constants.ad_types: type¶
Mainostietojen AD-tyyppivakioiden nimiavaruus Bluetooth Core Specification Supplement -määrityksestä. Kukin nimi vastaa kyseistä 1-tavuista AD-tyyppiä:
Nimi
Arvo
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