bluetooth — matalan tason Bluetooth¶
Tämä moduuli tarjoaa rajapinnan sisäänrakennettuun Bluetooth-ohjaimeen. Se tukee Bluetooth Low Energy (BLE) -tekniikkaa Central-, Peripheral-, Broadcaster- ja Observer-rooleissa sekä GATT-palvelinta ja -asiakasta ja yhteyspohjaisia L2CAP-kanavia. Laite voi toimia useassa roolissa samanaikaisesti. Myös pariutusta (pairing) ja sidontaa (bonding) tuetaan.
Tämä rajapinta on tarkoitettu vastaamaan matalan tason Bluetooth-protokollaa ja tarjoamaan rakennuspalikoita korkeamman tason abstraktioille, kuten tietyille laitetyypeille.
Vihje
Suosi useimmissa sovelluksissa korkeamman tason aioble-kirjastoa, joka tarjoaa asyncio-pohjaisen kääreen tämän moduulin ympärille. Katso aioble — Asynkroninen BLE.
class BLE¶
- class bluetooth.BLE¶
Palauttaa BLE-singleton-olion.
Konfigurointi
- active(active: bool | None = None, /) bool¶
Vaihtaa valinnaisesti BLE-radion aktiivisen tilan ja palauttaa nykyisen tilan.
Radio on aktivoitava ennen tämän luokan muiden metodien käyttöä.
- config(param: str, /) Any¶
- config(*, **kwargs: Any) None
Hae tai aseta BLE-rajapinnan konfigurointiarvoja. Arvon hakemiseksi parametrin nimi on annettava lainausmerkeissä merkkijonona, ja vain yksi parametri kysytään kerrallaan. Arvojen asettamiseen käytetään avainsanasyntaksia, ja yksi tai useampi parametri voidaan asettaa kerrallaan.
Tällä hetkellä tuettuja arvoja ovat:
'mac': Tällä hetkellä käytössä oleva osoite, joka riippuu nykyisestä osoitetilasta. Tämä palauttaa monikon(addr_type, addr).Katso
gap_scansaadaksesi lisätietoja osoitetyypistä.Tätä voidaan kysyä vain, kun rajapinta on parhaillaan aktiivinen.
'addr_mode': Asettaa osoitetilan. Arvot ovat:Arvo
Nimi
Toiminta
0x00PUBLIC
Käytä ohjaimen julkista osoitetta.
0x01RANDOM
Käytä generoitua staattista osoitetta.
0x02RPA
Käytä ratkaistavissa olevia yksityisiä osoitteita.
0x03NRPA
Käytä ei-ratkaistavissa olevia yksityisiä osoitteita.
Oletuksena rajapinta käyttää PUBLIC-osoitetta, jos sellainen on saatavilla, muutoin se käyttää RANDOM-osoitetta.
'gap_name': Hae/aseta GAP-laitenimi, jota käyttää Generic Access -palvelu (UUID0x1800), Device Name -ominaisuus (UUID0x2a00). Tämä voidaan asettaa milloin tahansa ja muuttaa useita kertoja.'rxbuf': Hae/aseta sisäisen puskurin koko tavuina, jota käytetään saapuvien tapahtumien tallentamiseen. Tämä puskuri on globaali koko BLE-ajurille ja käsittelee siten saapuvan datan kaikille tapahtumille, mukaan lukien kaikki ominaisuudet. Tämän kasvattaminen mahdollistaa purskeisen saapuvan datan (esimerkiksi skannaustulosten) paremman käsittelyn sekä suurempien ominaisuusarvojen vastaanottamisen.'mtu': Hae/aseta MTU, jota käytetään ATT MTU -vaihdon aikana. Tuloksena oleva MTU on tämän ja etälaitteen MTU:n pienempi arvo. ATT MTU -vaihto ei tapahdu automaattisesti (ellei etälaite käynnistä sitä), ja se on käynnistettävä manuaalisesti metodillagattc_exchange_mtu. Käytä_IRQ_MTU_EXCHANGED-tapahtumaa saadaksesi tietyn yhteyden MTU:n selville.'bond': Asettaa, otetaanko sidonta käyttöön pariutuksen aikana. Kun käytössä, pariutuspyynnöt asettavat ”bond”-lipun ja avaimet tallennetaan molempiin laitteisiin.'mitm': Asettaa, vaaditaanko MITM-suojaus pariutukseen.'io': Asettaa tämän laitteen I/O-ominaisuudet.Käytettävissä olevat vaihtoehdot ovat:
Vakio
Arvo
Ominaisuus
_IO_CAPABILITY_DISPLAY_ONLY0
Vain näyttö
_IO_CAPABILITY_DISPLAY_YESNO1
Näyttö kyllä/ei-syötteellä
_IO_CAPABILITY_KEYBOARD_ONLY2
Vain näppäimistö
_IO_CAPABILITY_NO_INPUT_OUTPUT3
Ei syöttöä eikä tulostusta
_IO_CAPABILITY_KEYBOARD_DISPLAY4
Näppäimistö ja näyttö
'le_secure': Asettaa, vaaditaanko ”LE Secure” -pariutus. Oletus on epätosi (eli sallii ”Legacy Pairing” -pariutuksen).
Tapahtumien käsittely
- irq(handler: Callable[[int, Tuple], Any | None], /) None¶
Rekisteröi takaisinkutsun BLE-pinon tapahtumille. handler ottaa kaksi argumenttia,
event(joka on jokin alla olevista koodeista) jadata(joka on tapahtumakohtainen arvojen monikko).Huomautus: Tarpeettomien varausten estämiseksi optimointina monikoiden
addr-,adv_data-,char_data-,notify_data- jauuid-tietueet ovat vain luettavissa olevia memoryview-ilmentymiä, jotka osoittavatbluetooth-moduulin sisäiseen rengaspuskuriin, ja ne ovat voimassa vain IRQ-käsittelijäfunktion suorituksen aikana. Jos ohjelmasi tarvitsee tallentaa jonkin näistä arvoista käytettäväksi IRQ-käsittelijän palaamisen jälkeen (esim. tallentamalla sen luokan ilmentymään tai globaaliin muuttujaan), sen on otettava kopio datasta joko käyttämälläbytes()taibluetooth.UUID(), näin:connected_addr = bytes(addr) # equivalently: adv_data, char_data, or notify_data matched_uuid = bluetooth.UUID(uuid)
Esimerkiksi skannaustuloksen IRQ-käsittelijä saattaa tarkastaa
adv_data-tiedon päättääkseen, onko kyseessä oikea laite, ja vasta sitten kopioida osoitedatan käytettäväksi muualla ohjelmassa. Ja tulostaaksesi dataa IRQ-käsittelijän sisältä tarvitaanprint(bytes(addr)).Käsittelijä yleensä haarautuu tapahtumakoodin perusteella ja purkaa tapahtumakohtaisen hyötykuormamonikon:
def bt_irq(event, data): if event == _IRQ_CENTRAL_CONNECT: conn_handle, addr_type, addr = data ... elif event == _IRQ_SCAN_RESULT: addr_type, addr, adv_type, rssi, adv_data = data ...
Jokainen tapahtumakoodi, sen toimittama hyötykuorma ja lyhyt kuvaus on lueteltu alla. Tapahtumissa, joiden
status-kenttä mainitaan,statuson0onnistuessa ja toteutuskohtainen nollasta poikkeava arvo epäonnistuessa.Vakio
Arvo
Tapahtuma
Hyötykuormamonikko
_IRQ_CENTRAL_CONNECT1
Central on yhdistänyt tähän peripheraaliin.
(conn_handle, addr_type, addr)_IRQ_CENTRAL_DISCONNECT2
Central on katkaissut yhteyden tähän peripheraaliin.
(conn_handle, addr_type, addr)_IRQ_GATTS_WRITE3
Yhdistetty asiakas on kirjoittanut paikalliseen ominaisuuteen tai kuvaajaan. Käytä metodia
gatts_readnoutaaksesi uuden arvon.(conn_handle, attr_handle)_IRQ_GATTS_READ_REQUEST4
Yhdistetty asiakas on antanut lukupyynnön. Palauta nollasta poikkeava virhekoodi alla olevasta taulukosta evätäksesi luvun, tai
0/Nonehyväksyäksesi sen.(conn_handle, attr_handle)_IRQ_SCAN_RESULT5
Aktiivisen skannauksen aikana vastaanotettiin yksittäinen mainospaketti.
(addr_type, addr, adv_type, rssi, adv_data)_IRQ_SCAN_DONE6
Nykyinen skannaus on päättynyt joko siksi, että konfiguroitu kesto kului umpeen, tai koska kutsuttiin
gap_scan(None).()_IRQ_PERIPHERAL_CONNECT7
Aiemmin annettu
gap_connecton onnistunut.(conn_handle, addr_type, addr)_IRQ_PERIPHERAL_DISCONNECT8
Yhdistetty peripheraali on katkaissut yhteyden.
(conn_handle, addr_type, addr)_IRQ_GATTC_SERVICE_RESULT9
Metodi
gattc_discover_serviceslöysi yhden palvelun.(conn_handle, start_handle, end_handle, uuid)_IRQ_GATTC_SERVICE_DONE10
Palveluiden haku on päättynyt.
(conn_handle, status)_IRQ_GATTC_CHARACTERISTIC_RESULT11
Metodi
gattc_discover_characteristicslöysi yhden ominaisuuden.(conn_handle, end_handle, value_handle, properties, uuid)_IRQ_GATTC_CHARACTERISTIC_DONE12
Ominaisuuksien haku on päättynyt.
(conn_handle, status)_IRQ_GATTC_DESCRIPTOR_RESULT13
Metodi
gattc_discover_descriptorslöysi yhden kuvaajan.(conn_handle, dsc_handle, uuid)_IRQ_GATTC_DESCRIPTOR_DONE14
Kuvaajien haku on päättynyt.
(conn_handle, status)_IRQ_GATTC_READ_RESULT15
Aiemmin annettu
gattc_readon palauttanut dataa.(conn_handle, value_handle, char_data)_IRQ_GATTC_READ_DONE16
Aiemmin annettu
gattc_readon päättynyt.(conn_handle, value_handle, status)_IRQ_GATTC_WRITE_DONE17
Aiemmin annettu
gattc_writeon kuitattu.(conn_handle, value_handle, status)_IRQ_GATTC_NOTIFY18
Etäpalvelin on lähettänyt (kuittaamattoman) ilmoituksen.
(conn_handle, value_handle, notify_data)_IRQ_GATTC_INDICATE19
Etäpalvelin on lähettänyt (kuitatun) ilmaisun.
(conn_handle, value_handle, notify_data)_IRQ_GATTS_INDICATE_DONE20
Aiemmin lähetetty ilmaisu on kuitattu asiakkaan toimesta (tai aikakatkaistu).
(conn_handle, value_handle, status)_IRQ_MTU_EXCHANGED21
ATT MTU -vaihto on valmistunut (kumman tahansa osapuolen käynnistämänä).
(conn_handle, mtu)_IRQ_L2CAP_ACCEPT22
Etälaite on pyytänyt L2CAP-yhteyttä PSM:llä, jota tämä laite kuuntelee. Palauta nollasta poikkeava kokonaisluku hylätäksesi, tai
0/Nonehyväksyäksesi.(conn_handle, cid, psm, our_mtu, peer_mtu)_IRQ_L2CAP_CONNECT23
L2CAP-kanava on nyt muodostettu joko hyväksymällä saapuva pyyntö tai saattamalla loppuun lähtevä
l2cap_connect.(conn_handle, cid, psm, our_mtu, peer_mtu)_IRQ_L2CAP_DISCONNECT24
L2CAP-kanavan yhteys on katkaistu.
statuson0puhtaalle katkaisulle, tai nollasta poikkeava, jos lähtevä yhteysyritys epäonnistui.(conn_handle, cid, psm, status)_IRQ_L2CAP_RECV25
L2CAP-kanavalle on saapunut dataa. Kutsu metodia
l2cap_recvintolukeaksesi sen.(conn_handle, cid)_IRQ_L2CAP_SEND_READY26
Aiempi
l2cap_send, joka palauttiFalse, on tyhjentynyt ja kanava on jälleen valmis. Nollasta poikkeavastatustarkoittaa, että lähetyspuskuri ylivuoti ja sovelluksen on lähetettävä data uudelleen.(conn_handle, cid, status)_IRQ_CONNECTION_UPDATE27
Etälaite on päivittänyt yhteysparametrit (väli, viive, valvonnan aikakatkaisu).
(conn_handle, conn_interval, conn_latency, supervision_timeout, status)_IRQ_ENCRYPTION_UPDATE28
Yhteyden salaustila on muuttunut, tyypillisesti pariutuksen tai sidonnan valmistumisen jälkeen.
(conn_handle, encrypted, authenticated, bonded, key_size)_IRQ_GET_SECRET29
Pino pyytää tallennettua sidontasalaisuutta. Jos
keyonNone, palauta tyypinsec_typeindex:nnen tallennettu arvo; muutoin palauta annettuun(sec_type, key)-pariin liittyvä arvo. PalautaNone, jos mitään ei ole tallennettu.(sec_type, index, key)_IRQ_SET_SECRET30
Pino pyytää sovellusta tallentamaan sidontasalaisuuden pysyvästi. Palauta
True, kun se on tallennettu.(sec_type, key, value)_IRQ_PASSKEY_ACTION31
Salasanatoiminto vaaditaan osana pariutusta. Vastaa käyttämällä metodia
gap_passkey; katso mahdolliset toiminnot alla olevasta salasanatoimintotaulukosta.(conn_handle, action, passkey)_IRQ_GATTS_READ_REQUEST-tapahtumalle käytettävissä olevat paluukoodit ovat:Vakio
Arvo
Merkitys
_GATTS_NO_ERROR0x00Hyväksy luku.
_GATTS_ERROR_READ_NOT_PERMITTED0x02Lukua ei sallittu.
_GATTS_ERROR_WRITE_NOT_PERMITTED0x03Kirjoitusta ei sallittu.
_GATTS_ERROR_INSUFFICIENT_AUTHENTICATION0x05Asiakasta ei ole todennettu.
_GATTS_ERROR_INSUFFICIENT_AUTHORIZATION0x08Asiakkaalla ei ole valtuutusta.
_GATTS_ERROR_INSUFFICIENT_ENCRYPTION0x0fYhteyttä ei ole salattu.
_IRQ_PASSKEY_ACTION-tapahtumalle käytettävissä olevat toiminnot ovat:Vakio
Arvo
Merkitys
_PASSKEY_ACTION_NONE0
Toimintoa ei vaadita.
_PASSKEY_ACTION_INPUT2
Kehota käyttäjää syöttämään etälaitteessa näytetty salasana.
_PASSKEY_ACTION_DISPLAY3
Näytä 6-numeroinen salasana, jonka etälaite syöttää.
_PASSKEY_ACTION_NUMERIC_COMPARISON4
Vahvista, että salasana vastaa etälaitteessa näytettyä.
Tilan säästämiseksi laiteohjelmistossa näitä vakioita ei ole sisällytetty
bluetooth-moduuliin. Lisää ohjelmaasi yllä olevista luetteloista ne, joita tarvitset.
Broadcaster-rooli (mainostaja)
- gap_advertise(interval_us: int | None, adv_data: bytes | None = None, *, resp_data: bytes | None = None, connectable: bool = True) None¶
Aloittaa mainostamisen määritetyllä välillä (mikrosekunteina). Tämä väli pyöristetään alaspäin lähimpään 625 us:iin. Lopettaaksesi mainostamisen aseta interval_us arvoon
None.adv_data ja resp_data voivat olla mitä tahansa puskuriprotokollan toteuttavaa tyyppiä (esim.
bytes,bytearray,str). adv_data sisältyy kaikkiin lähetyksiin, ja resp_data lähetetään vastauksena aktiiviseen skannaukseen.Huomautus: jos adv_data (tai resp_data) on
None, niin edelliseengap_advertise-kutsuun annettua dataa käytetään uudelleen. Tämä mahdollistaa mainostajan jatkavan mainostamista pelkällägap_advertise(interval_us)-kutsulla. Tyhjentääksesi mainoshyötykuorman anna tyhjäbytes, elib''.
Observer-rooli (skanneri)
- gap_scan(duration_ms: int | None, interval_us: int = 1280000, window_us: int = 11250, active: bool = False, /) None¶
Suorittaa skannausoperaation, joka kestää määritetyn ajan (millisekunteina).
Skannataksesi loputtomasti aseta duration_ms arvoon
0.Lopettaaksesi skannauksen aseta duration_ms arvoon
None.Käytä interval_us- ja window_us-arvoja konfiguroidaksesi valinnaisesti pulssisuhteen. Skanneri toimii window_us mikrosekuntia jokaista interval_us mikrosekuntia kohti yhteensä duration_ms millisekunnin ajan. Oletusväli ja -ikkuna ovat vastaavasti 1,28 sekuntia ja 11,25 millisekuntia (taustaskannaus).
Jokaiselle skannaustulokselle nostetaan
_IRQ_SCAN_RESULT-tapahtuma, jonka tapahtumadata on(addr_type, addr, adv_type, rssi, adv_data).addr_type-arvot ilmaisevat julkiset tai satunnaiset osoitteet:Arvo
Nimi
Merkitys
0x00PUBLIC
Julkinen laiteosoite.
0x01RANDOM
Satunnainen osoite (joko staattinen, RPA tai NRPA; tyyppi on koodattu itse osoitteeseen).
adv_type-arvot vastaavat Bluetooth-spesifikaatiota:Arvo
Nimi
Merkitys
0x00ADV_IND
Yhdistettävä ja skannattava suuntaamaton mainostus.
0x01ADV_DIRECT_IND
Yhdistettävä suunnattu mainostus.
0x02ADV_SCAN_IND
Skannattava suuntaamaton mainostus.
0x03ADV_NONCONN_IND
Ei-yhdistettävä suuntaamaton mainostus.
0x04SCAN_RSP
Skannausvastaus.
activevoidaan asettaa arvoonTrue, jos haluat vastaanottaa skannausvastauksia tuloksissa.Kun skannaus pysäytetään (joko keston päättymisen vuoksi tai kun se pysäytetään nimenomaisesti), nostetaan
_IRQ_SCAN_DONE-tapahtuma.
Central-rooli
Central-laite voi yhdistää peripheraaleihin, jotka se on löytänyt observer-roolin avulla (katso
gap_scan) tai tunnetulla osoitteella.- gap_connect(addr_type: int | None, addr: bytes | None = None, scan_duration_ms: int = 2000, min_conn_interval_us: int | None = None, max_conn_interval_us: int | None = None, /) None¶
Yhdistä peripheraaliin.
Katso
gap_scansaadaksesi lisätietoja osoitetyypeistä.Peruuttaaksesi käynnissä olevan yhteysyrityksen ajoissa kutsu
gap_connect(None).Onnistuessa nostetaan
_IRQ_PERIPHERAL_CONNECT-tapahtuma. Jos yhteysyritys peruutetaan, nostetaan_IRQ_PERIPHERAL_DISCONNECT-tapahtuma.Laite odottaa enintään scan_duration_ms ajan vastaanottaakseen mainoshyötykuorman laitteelta.
Yhteysväli voidaan konfiguroida mikrosekunteina käyttämällä joko yhtä tai molempia arvoista min_conn_interval_us ja max_conn_interval_us. Muutoin valitaan oletusväli, tyypillisesti 30000:n ja 50000:n mikrosekunnin väliltä. Lyhyempi väli kasvattaa läpäisykykyä virrankulutuksen kustannuksella.
Peripheral-rooli
Peripheraalilaitteen odotetaan lähettävän yhdistettäviä mainoksia (katso
gap_advertise). Se toimii yleensä GATT-palvelimena rekisteröityään ensin palvelut ja ominaisuudet metodillagatts_register_services.Kun central yhdistää, nostetaan
_IRQ_CENTRAL_CONNECT-tapahtuma.Central- ja Peripheral-roolit
- gap_disconnect(conn_handle: int, /) bool¶
Katkaise määritetty yhteyskahva. Tämä voi olla joko central, joka on yhdistänyt tähän laitteeseen (jos toimii peripheraalina), tai peripheraali, johon tämä laite oli aiemmin yhdistänyt (jos toimii centralina).
Onnistuessa nostetaan
_IRQ_PERIPHERAL_DISCONNECT- tai_IRQ_CENTRAL_DISCONNECT-tapahtuma.Palauttaa
False, jos yhteyskahva ei ollut yhdistettynä, ja muutoinTrue.
GATT-palvelin
GATT-palvelimella on joukko rekisteröityjä palveluja. Kukin palvelu voi sisältää ominaisuuksia, joilla kullakin on arvo. Ominaisuudet voivat myös sisältää kuvaajia, joilla itsellään on arvoja.
Nämä arvot tallennetaan paikallisesti, ja niitä käytetään niiden ”arvokahvalla”, joka generoidaan palvelun rekisteröinnin aikana. Etäasiakaslaite voi myös lukea niitä tai kirjoittaa niihin. Lisäksi palvelin voi ”ilmoittaa” ominaisuuden yhdistetylle asiakkaalle yhteyskahvan kautta.
Joko central- tai peripheral-roolissa oleva laite voi toimia GATT-palvelimena, mutta useimmissa tapauksissa on yleisempää, että peripheraalilaite toimii palvelimena.
Ominaisuuksilla ja kuvaajilla on oletusarvoinen enimmäiskoko 20 tavua (oletusarvoinen 23 tavun ATT MTU vähennettynä 3 tavun ATT-otsakkeella; suurempi neuvoteltu MTU ei itsessään nosta tätä rajaa). Mikä tahansa asiakkaan niihin kirjoittama katkaistaan tähän pituuteen. Mikä tahansa paikallinen kirjoitus kuitenkin kasvattaa enimmäiskokoa, joten jos haluat sallia suurempia kirjoituksia asiakkaalta tiettyyn ominaisuuteen, käytä metodia
gatts_writerekisteröinnin jälkeen. Esim.gatts_write(char_handle, bytes(100)).- gatts_register_services(services_definition: Sequence[Sequence], /) Sequence[Sequence[int]]¶
Konfiguroi palvelimen määritetyillä palveluilla korvaten kaikki olemassa olevat palvelut.
services_definition on lista palveluista, jossa kukin palvelu on kaksialkioinen monikko, joka sisältää UUID:n ja listan ominaisuuksista.
Kukin ominaisuus on kaksi- tai kolmialkioinen monikko, joka sisältää UUID:n, flags-arvon ja valinnaisesti listan kuvaajista.
Kukin kuvaaja on kaksialkioinen monikko, joka sisältää UUID:n ja flags-arvon.
flags on alla määriteltyjen lippujen bitti-OR-yhdistelmä. Nämä asettavat sekä ominaisuuden (tai kuvaajan) toiminnan että turvallisuus- ja yksityisyysvaatimukset.
Paluuarvo on lista (yksi alkio palvelua kohti) monikoista (kukin alkio on arvokahva). Ominaisuus- ja kuvaajakahvat litistetään samaan monikkoon siinä järjestyksessä, jossa ne on määritelty.
Seuraava esimerkki rekisteröi kaksi palvelua (Heart Rate ja Nordic UART):
bt = bluetooth.BLE() bt.active(True) # Heart Rate service: one Heart Rate Measurement characteristic. HR_SERVICE = ( bluetooth.UUID(0x180D), ( (bluetooth.UUID(0x2A37), bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY), ), ) # Nordic UART service: a TX characteristic the client subscribes # to for notifications, and an RX characteristic it writes to. UART_SERVICE = ( bluetooth.UUID('6E400001-B5A3-F393-E0A9-E50E24DCCA9E'), ( (bluetooth.UUID('6E400003-B5A3-F393-E0A9-E50E24DCCA9E'), bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY), (bluetooth.UUID('6E400002-B5A3-F393-E0A9-E50E24DCCA9E'), bluetooth.FLAG_WRITE), ), ) ((hr,), (tx, rx)) = bt.gatts_register_services( (HR_SERVICE, UART_SERVICE), )
Kolmea arvokahvaa (
hr,tx,rx) voidaan käyttää metodiengatts_read,gatts_write,gatts_notifyjagatts_indicatekanssa.Huomautus: Mainostaminen on lopetettava ennen palvelujen rekisteröintiä.
Ominaisuuksille ja kuvaajille käytettävissä olevat liput ovat:
Vakio
Arvo
Merkitys
_FLAG_BROADCAST0x0001Ominaisuus voidaan lähettää (broadcast).
_FLAG_READ0x0002Asiakas voi lukea arvon.
_FLAG_WRITE_NO_RESPONSE0x0004Asiakas voi kirjoittaa odottamatta vastausta.
_FLAG_WRITE0x0008Asiakas voi kirjoittaa kuitatulla vastauksella.
_FLAG_NOTIFY0x0010Palvelin voi lähettää ilmoituksia (kuittaamattomia).
_FLAG_INDICATE0x0020Palvelin voi lähettää ilmaisuja (kuitattuja).
_FLAG_AUTHENTICATED_SIGNED_WRITE0x0040Asiakas voi tehdä allekirjoitettuja kirjoituksia.
_FLAG_AUX_WRITE0x0100Laajennetut ominaisuudet: jonotetut/luotettavat kirjoitukset ovat sallittuja.
_FLAG_READ_ENCRYPTED0x0200Luku vaatii salatun yhteyden.
_FLAG_READ_AUTHENTICATED0x0400Luku vaatii todennetun (MITM-suojatun) yhteyden.
_FLAG_READ_AUTHORIZED0x0800Luku vaatii sovellustason valtuutuksen.
_FLAG_WRITE_ENCRYPTED0x1000Kirjoitus vaatii salatun yhteyden.
_FLAG_WRITE_AUTHENTICATED0x2000Kirjoitus vaatii todennetun (MITM-suojatun) yhteyden.
_FLAG_WRITE_AUTHORIZED0x4000Kirjoitus vaatii sovellustason valtuutuksen.
Kuten yllä olevien tapahtumavakioiden kohdalla, näitä lippuja ei tarjoa
bluetooth-moduuli; kopioi tarvitsemasi ohjelmaasi.
- gatts_read(value_handle: int, /) bytes¶
Lukee tämän kahvan paikallisen arvon (jonka on joko kirjoittanut
gatts_writetai etäasiakas).
- gatts_write(value_handle: int, data: bytes, send_update: bool = False, /) None¶
Kirjoittaa tämän kahvan paikallisen arvon, jonka asiakas voi lukea.
Jos send_update on
True, niin kaikille tilanneille asiakkaille ilmoitetaan (tai ilmaistaan, riippuen siitä, mihin he ovat tilanneet ja mitä operaatioita ominaisuus tukee) tästä kirjoituksesta.
- gatts_notify(conn_handle: int, value_handle: int, data: bytes | None = None, /) None¶
Lähettää ilmoituspyynnön yhdistetylle asiakkaalle.
Jos data on
None(oletus), niin lähetetään nykyinen paikallinen arvo (kuten asetettu metodillagatts_write).Muutoin, jos data ei ole
None, niin kyseinen arvo lähetetään asiakkaalle osana ilmoitusta. Paikallista arvoa ei muuteta.Huomautus: Ilmoitus lähetetään riippumatta asiakkaan tilaustilasta tähän ominaisuuteen.
- gatts_indicate(conn_handle: int, value_handle: int, data: bytes | None = None, /) None¶
Lähettää ilmaisupyynnön yhdistetylle asiakkaalle.
Jos data on
None(oletus), niin lähetetään nykyinen paikallinen arvo (kuten asetettu metodillagatts_write).Muutoin, jos data ei ole
None, niin kyseinen arvo lähetetään asiakkaalle osana ilmaisua. Paikallista arvoa ei muuteta.Kuittauksen (tai epäonnistumisen, esim. aikakatkaisun) yhteydessä nostetaan
_IRQ_GATTS_INDICATE_DONE-tapahtuma.Huomautus: Ilmaisu lähetetään riippumatta asiakkaan tilaustilasta tähän ominaisuuteen.
- gatts_set_buffer(value_handle: int, len: int, append: bool = False, /) None¶
Asettaa arvon sisäisen puskurin koon tavuina. Tämä rajoittaa suurinta mahdollista vastaanotettavaa kirjoitusta. Oletus on 20 tavua (oletusarvoinen 23 tavun ATT MTU vähennettynä 3 tavun ATT-otsakkeella).
append-arvon asettaminen arvoon
Truesaa kaikki etäkirjoitukset lisäämään nykyiseen arvoon sen korvaamisen sijaan. Tällä tavoin voidaan puskuroida enintään len tavua. Kun käytät metodiagatts_read, arvo tyhjennetään lukemisen jälkeen. Tämä ominaisuus on hyödyllinen toteutettaessa esimerkiksi Nordic UART Service -palvelua.
GATT-asiakas
GATT-asiakas voi löytää ja lukea/kirjoittaa ominaisuuksia etä-GATT-palvelimella.
On yleisempää, että central-roolissa oleva laite toimii GATT-asiakkaana, mutta on myös mahdollista, että peripheraali toimii asiakkaana selvittääkseen tietoja siihen yhdistäneestä centralista (esim. lukeakseen laitenimen laitetietopalvelusta).
- gattc_discover_services(conn_handle: int, uuid: UUID | None = None, /) None¶
Kysele yhdistetyltä palvelimelta sen palveluja.
Määritä valinnaisesti palvelun uuid kysellaksesi vain kyseistä palvelua.
Jokaiselle löydetylle palvelulle nostetaan
_IRQ_GATTC_SERVICE_RESULT-tapahtuma, jota seuraa_IRQ_GATTC_SERVICE_DONEvalmistuessa.
- gattc_discover_characteristics(conn_handle: int, start_handle: int, end_handle: int, uuid: UUID | None = None, /) None¶
Kysele yhdistetyltä palvelimelta ominaisuuksia määritetyltä väliltä.
Määritä valinnaisesti ominaisuuden uuid kysellaksesi vain kyseistä ominaisuutta.
Argumenttien
start_handle=1jaend_handle=0xffffantaminen kattaa koko GATT-attribuuttikahvavälin, joten tämä yhdistelmä käytännössä etsii etälaitteen jokaisen palvelun.Jokaiselle löydetylle ominaisuudelle nostetaan
_IRQ_GATTC_CHARACTERISTIC_RESULT-tapahtuma, jota seuraa_IRQ_GATTC_CHARACTERISTIC_DONEvalmistuessa.
- gattc_discover_descriptors(conn_handle: int, start_handle: int, end_handle: int, /) None¶
Kysele yhdistetyltä palvelimelta kuvaajia määritetyltä väliltä.
Jokaiselle löydetylle kuvaajalle nostetaan
_IRQ_GATTC_DESCRIPTOR_RESULT-tapahtuma, jota seuraa_IRQ_GATTC_DESCRIPTOR_DONEvalmistuessa.
- gattc_read(conn_handle: int, value_handle: int, /) None¶
Anna etäluku yhdistetylle palvelimelle määritetylle ominaisuus- tai kuvaajakahvalle.
Kun arvo on saatavilla, nostetaan
_IRQ_GATTC_READ_RESULT-tapahtuma, jota seuraa_IRQ_GATTC_READ_DONEvalmistuessa.
- gattc_write(conn_handle: int, value_handle: int, data: bytes, mode: int = 0, /) None¶
Anna etäkirjoitus yhdistetylle palvelimelle määritetylle ominaisuus- tai kuvaajakahvalle.
Argumentti mode määrittää kirjoitustoiminnan, ja tällä hetkellä tuetut arvot ovat:
mode=0(oletus) on kirjoitus ilman vastausta: kirjoitus lähetetään etäpalvelimelle, mutta vahvistusta ei palauteta eikä tapahtumaa nosteta.mode=1on kirjoitus vastauksella: etäpalvelinta pyydetään lähettämään vastaus/kuittaus siitä, että se vastaanotti datan.
Jos etäpalvelimelta vastaanotetaan vastaus, nostetaan
_IRQ_GATTC_WRITE_DONE-tapahtuma.
- gattc_exchange_mtu(conn_handle: int, /) None¶
Käynnistä MTU-vaihto yhdistetyn palvelimen kanssa käyttäen
BLE.config(mtu=value)-asetuksella määritettyä ensisijaista MTU:ta._IRQ_MTU_EXCHANGED-tapahtuma nostetaan, kun MTU-vaihto valmistuu.MTU-vaihdon käynnistää tyypillisesti central; NimBLE tukee molempia rooleja.
L2CAP-yhteyspohjaiset kanavat
Tämä ominaisuus mahdollistaa socketin kaltaisen datanvaihdon kahden BLE-laitteen välillä. Kun laitteet on yhdistetty GAP:n kautta, kumpi tahansa laite voi kuunnella toisen yhdistämistä numeerisella PSM:llä (Protocol/Service Multiplexer).
Vain yksi L2CAP-kanava voi olla aktiivinen kerrallaan (eli et voi yhdistää kuunnellessasi).
Aktiiviset L2CAP-kanavat tunnistetaan yhteyskahvasta, jolla ne muodostettiin, ja CID:stä (kanavan tunniste).
Yhteyspohjaisissa kanavissa on sisäänrakennettu luottoperusteinen vuonohjaus. Toisin kuin ATT:ssä, jossa laitteet neuvottelevat jaetun MTU:n, sekä kuunteleva että yhdistävä laite asettavat kumpikin itsenäisen MTU:n, joka rajoittaa enimmäismäärää käsittelemätöntä dataa, jonka etälaite voi lähettää ennen kuin se on täysin kulutettu metodissa
l2cap_recvinto.- l2cap_listen(psm: int, mtu: int, /) None¶
Aloita saapuvien L2CAP-kanavapyyntöjen kuuntelu määritetyllä psm:llä paikallisen MTU:n ollessa asetettuna arvoon mtu.
Kun etälaite käynnistää yhteyden, nostetaan
_IRQ_L2CAP_ACCEPT-tapahtuma, joka antaa kuuntelevalle palvelimelle mahdollisuuden hylätä saapuva yhteys (palauttamalla nollasta poikkeavan kokonaisluvun).Kun yhteys on hyväksytty, nostetaan
_IRQ_L2CAP_CONNECT-tapahtuma, jonka avulla palvelin voi saada kanavan tunnisteen (CID) sekä paikallisen ja etäisen MTU:n.Huomautus: Tällä hetkellä kuuntelua ei ole mahdollista lopettaa.
- l2cap_connect(conn_handle: int, psm: int, mtu: int, /) None¶
Yhdistä kuuntelevaan vertaiseen määritetyllä psm:llä paikallisen MTU:n ollessa asetettuna arvoon mtu.
Onnistuneen yhteyden yhteydessä nostetaan
_IRQ_L2CAP_CONNECT-tapahtuma, jonka avulla asiakas voi saada CID:n sekä paikallisen ja etäisen (vertaisen) MTU:n.Epäonnistunut yhteys nostaa
_IRQ_L2CAP_DISCONNECT-tapahtuman, jolla on nollasta poikkeava status.
- l2cap_disconnect(conn_handle: int, cid: int, /) None¶
Katkaise aktiivinen L2CAP-kanava, jolla on määritetty conn_handle ja cid.
- l2cap_send(conn_handle: int, cid: int, buf: bytes, /) bool¶
Lähetä määritetty buf (jonka on tuettava puskuriprotokollaa) L2CAP-kanavalla, joka tunnistetaan conn_handle- ja cid-arvoista.
Puskurin on täytettävä molemmat rajat: se ei saa ylittää etäistä (vertaisen) MTU:ta eikä paikallisen MTU:n kaksinkertaista määrää.
Tämä palauttaa
False, jos kanava on nyt ”jumissa”, mikä tarkoittaa, että metodial2cap_sendei saa kutsua uudelleen ennen kuin_IRQ_L2CAP_SEND_READY-tapahtuma on vastaanotettu (mikä tapahtuu, kun etälaite myöntää lisää luottoja, tyypillisesti sen jälkeen kun se on vastaanottanut ja käsitellyt datan).
- l2cap_recvinto(conn_handle: int, cid: int, buf: Any | None, /) int¶
Vastaanota dataa määritetystä conn_handle- ja cid-arvosta annettuun buf-puskuriin (jonka on tuettava puskuriprotokollaa, esim. bytearray tai memoryview).
Palauttaa kanavalta luettujen tavujen määrän.
Jos buf on
None, palauttaa saatavilla olevien tavujen määrän.Huomautus:
_IRQ_L2CAP_RECV-tapahtuman vastaanottamisen jälkeen sovelluksen tulisi jatkaa metodinl2cap_recvintokutsumista, kunnes vastaanottopuskurissa ei ole enempää tavuja saatavilla (tyypillisesti etäisen (vertaisen) MTU:n kokoon asti).Kunnes vastaanottopuskuri on tyhjä, etälaitteelle ei myönnetä lisää kanavaluottoja eikä se voi lähettää enempää dataa.
Pariutus ja sidonta
Pariutus mahdollistaa yhteyden salaamisen ja todentamisen salaisuuksien vaihdon kautta (valinnaisella MITM-suojauksella salasanatodennuksen avulla).
Sidonta on prosessi, jossa nuo salaisuudet tallennetaan haihtumattomaan muistiin. Sidottuna laite kykenee ratkaisemaan ratkaistavissa olevan yksityisen osoitteen (RPA) toiselta laitteelta tallennetun identiteetin ratkaisuavaimen (IRK) perusteella. Tukeakseen sidontaa sovelluksen on toteutettava
_IRQ_GET_SECRET- ja_IRQ_SET_SECRET-tapahtumat.- gap_pair(conn_handle: int, /) None¶
Käynnistä pariutus etälaitteen kanssa.
Ennen tämän kutsumista varmista, että konfigurointivaihtoehdot
io,mitm,le_securejabondon asetettu (metodinconfigkautta).Onnistuneen pariutuksen yhteydessä nostetaan
_IRQ_ENCRYPTION_UPDATE-tapahtuma.
- gap_passkey(conn_handle: int, action: int, passkey: int, /) None¶
Vastaa
_IRQ_PASSKEY_ACTION-tapahtumaan määritetylle conn_handle- ja action-arvolle. passkey-arvon merkitys riippuu action-arvosta (joka puolestaan riippuu konfiguroidusta I/O-ominaisuudesta):Toiminto
Vaadittu passkey-vastaus
_PASSKEY_ACTION_INPUTSalasana, jonka käyttäjä lukee etälaitteesta.
_PASSKEY_ACTION_DISPLAYPaikallisesti generoitu satunnainen 6-numeroinen salasana, joka näytetään käyttäjälle.
_PASSKEY_ACTION_NUMERIC_COMPARISON1hyväksyäksesi_IRQ_PASSKEY_ACTION-tapahtumassa näytetyn salasanan, tai0peruuttaaksesi pariutuksen.
class UUID¶
- class bluetooth.UUID(value: int | bytes | str, /)¶
Luo UUID-ilmentymän määritetyllä
value-arvolla. Bluetooth käyttää kolmea UUID-leveyttä;UUIDhyväksyy minkä tahansa niistä:UUID-leveys
Hyväksytyt
value-tyypitEsimerkki
16-bittinen
inttai 2-tavuinen puskuri (little-endian)UUID(0x2908)taiUUID(b'\x08\x29')32-bittinen
4-tavuinen puskuri (little-endian)
UUID(b'\x08\x29\x00\x00')128-bittinen
16-tavuinen puskuri tai yhdysviivoin eroteltu merkkijono
UUID('6E400001-B5A3-F393-E0A9-E50E24DCCA9E')16- ja 32-bittiset UUID:t ovat tyypillisesti SIG:n myöntämiä tunnisteita (katso Bluetoothin myönnetyt numerot); 128-bittiset UUID:t ovat normaalisti valmistajan määrittelemiä.