ubluepy — Bluetooth LE çevre birimi (peripheral) ve merkez (central)¶
ubluepy modülü, MicroPython nRF uyarlaması ile birlikte gelen eski Bluetooth LE API’sidir. Linux bluepy Python kütüphanesi temel alınarak gevşek bir şekilde modellenmiştir ve doğrudan Nordic SoftDevice üzerine oturur — taşınabilir bir arka uç yoktur, dolayısıyla modül yalnızca Nordic hedeflerinde (OpenMV ürün yelpazesinde Arduino Nano 33 BLE Sense) kullanılabilir. Daha yeni bluetooth / aioble API’leri bu derlemede etkinleştirilmemiştir, bu nedenle yonga üzerindeki radyoyu sürmenin tek yolu ubluepy modülüdür.
Kullanılabilir özellik kümesi, aygıt yazılımı (firmware) tarafından flash belleğe yazılan SoftDevice’a bağlıdır:
s140 (Nano 33 BLE Sense) — hem çevre birimi (peripheral) hem de merkez (tarayıcı) rolleri. OpenMV aygıt yazılımının (firmware) içerdiği budur.
s132 — hem çevre birimi hem de merkez.
s110 — yalnızca çevre birimi; tarayıcı / bağlanma metotları derleme dışı bırakılır.
Çevre birimi örneği¶
Tek bir çevresel algılama hizmetiyle Bluetooth LE çevre birimi olarak yayın yapın ve Client Characteristic Configuration Descriptor (CCCD) öğesine yapılan her yazma işleminde bir sıcaklık karakteristiğine bildirim gönderin:
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])
Merkez örneği¶
100 ms boyunca yakındaki yayın yapan cihazları tarayın ve her ScanEntry öğesinin reklam verisini çözün:
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))
Modül içeriği¶
Sınıflar¶
- class ubluepy.UUID(value)¶
16 bitlik veya 128 bitlik bir Bluetooth UUID oluşturur.
valueŞunlardan biri:
int— 16 bitlik sayısal bir UUID (UUID(0x180A)).6 karakterlik
"0xXXXX"dizesi — 16 bitlik bir UUID, örn.UUID("0x181A").36 karakterlik
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"dizesi — tam 128 bitlik bir UUID. Üreticiye özel kısım, oluşturma sırasında SoftDevice’a kaydedilir.Başka bir
UUIDörneği — bir kopya gerçekleştirir.
Başka herhangi bir uzunluk
ValueError("Invalid UUID string length")hatasını yükseltir.
- class ubluepy.Service(uuid: UUID, type: int = Service.PRIMARY)¶
Bir
Peripheralöğesine eklendiğinde SoftDevice’a kaydedilecek bir GATT hizmeti tanımlar.uuidBir
UUIDörneği. UUID olmayan bir nesne geçirmekValueErrorhatasını yükseltir.typeService.PRIMARY(varsayılan) veyaService.SECONDARYöğelerinden biri. Diğer değerlerValueErrorhatasını yükseltir.
- addCharacteristic(characteristic: Characteristic) None¶
Hizmete bir
Characteristickaydeder. Karakteristiğin GATT tutamacı (handle) bu çağrı sırasında atanır.
- getCharacteristic(uuid: UUID) Characteristic | None¶
Daha önce eklenmiş bir
Characteristicöğesini UUID’ye göre arar. Karakteristik örneğini, eşleşme bulunamazsaNonedöndürür.
- class ubluepy.Characteristic(uuid: UUID, *, props: int = PROP_READ | PROP_WRITE, attrs: int = 0)¶
Bir GATT karakteristiği tanımlar. Üst
Peripheralöğesi yayına başlamadan önceService.addCharacteristic()ile birServiceöğesine ekleyin.uuidBir
UUIDörneği.props(yalnızca anahtar sözcük)Karakteristiğin hangi işlemleri desteklediğini açıklayan bir veya daha fazla
Characteristic.PROP_*değerinden oluşan bit maskesi.attrs(yalnızca anahtar sözcük)Ek GATT özniteliklerinin bit maskesi. Bir Client Characteristic Configuration Descriptor eklemek için
Characteristic.ATTR_CCCDkullanın —PROP_NOTIFY/PROP_INDICATEkarakteristiklerinin çalışması için gereklidir.
- read() bytearray¶
Yalnızca merkez rolü. Karakteristiğin değerini bağlı eşten okur. En son değeri içeren bir
bytearraydöndürür. Bir çevre biriminde bu işlemsizdir (no-op) veNonedöndürür.
- write(data, *, with_response: bool = False) None¶
Karakteristiğe yazar.
Bir çevre biriminde, karakteristiğin özelliklerinde
PROP_NOTIFYayarlanmışsa değer, bağlı merkeze bir GATT bildirimi olarak gönderilir; aksi takdirde yerel öznitelik değeri güncellenir.Bir merkezde, değer uzaktaki eşe yazılır. Bir yazma komutu yerine bir yazma isteği göndermek ve eşin onayını beklemek için
with_response=Trueayarlayın.
data, herhangi bir arabellek protokolü nesnesidir (bytes,bytearray,memoryview).
- class ubluepy.Descriptor(uuid: UUID)¶
GATT tanımlayıcılarını temsil etmek için iskelet sınıfı. Mevcut uygulama yalnızca UUID’yi saklar ve hiçbir metot sunmaz — modülün gelecekteki sürümleriyle ileriye dönük uyumluluk için sağlanmıştır.
- class ubluepy.Peripheral¶
Yerel Bluetooth LE cihazı. Hem çevre birimi hem de merkez rolleri için aynı sınıf kullanılır; rol, çağırdığınız metotlara göre seçilir (
advertise()çevre birimini,connect()merkezi seçer).- addService(service: Service) None¶
Yerel GATT sunucusuna bir
Service(ve daha önce eklenmiş tüm karakteristikleri) kaydeder.
- getServices() list¶
Bu
Peripheralöğesine şu anda kayıtlı olan hizmetlerin listesini döndürür.
- advertise(*, device_name: str | None = None, services: list | None = None, data: bytes | None = None, connectable: bool = True) None¶
Çevre birimi rolünde yayına başlar.
device_nameGAP yükünde yayınlanan tam yerel ad.
servicesYayınlanacak
Serviceörneklerinin listesi. Her hizmetin UUID’si reklama dahil edilir.dataOtomatik oluşturulan başlığa eklenen isteğe bağlı ham reklam yükü (
bytes/bytearray). Bunu Eddystone gibi üreticiye özel veya işaret (beacon) yükleri için kullanın.connectableTrue(varsayılan) olduğunda, bağlanılabilir bir cihaz olarak yayın yapar ve GAP / GATTS olay işleyicilerini kaydeder; böylece yapılandırılmışsetConnectionHandler()geri çağırması (callback) bağlantı, bağlantı kesme ve CCCD yazma işlemlerinde tetiklenir.Falseolduğunda, bir işaret (beacon) olarak yayın yapar — hiçbir işleyici eklenmez ve cihaza bağlanılamaz.
- setConnectionHandler(func) None¶
GAP ve GATTS olaylarında çağrılan bir geri çağırma (callback) kaydeder. Geri çağırma
func(event_id, conn_handle, data)olarak çağrılır; buradaevent_id,constants.EVT_GAP_CONNECTED,constants.EVT_GAP_DISCONNECTEDveyaconstants.EVT_GATTS_WRITEdeğerlerinden biridir,conn_handle, SoftDevice bağlantı tutamacıdır (veya GATTS yazmaları için öznitelik tutamacı) vedata, ham olay yükünün birbytearrayhalidir (veya bağlantı / bağlantı kesme içinNone).
- setNotificationHandler(func) None¶
Merkez rolünde alınan bildirim olayları için bir geri çağırma (callback) kaydeder.
- withDelegate(delegate: DefaultDelegate) None¶
Çözülmüş GATT olaylarını almak için bir
DefaultDelegateörneği ekler.
- connect(addr, *, addr_type: int = constants.ADDR_TYPE_PUBLIC) None¶
Yalnızca merkez rolü. Verilen adrese sahip eşe bağlanır ve birincil hizmetlerini ve karakteristiklerini eşzamanlı olarak keşfeder. Bağlantı kurulana ve keşif tamamlanana kadar bloke eder; keşfedilen hizmetler daha sonra
getServices()aracılığıyla kullanılabilir.addr17 karakterlik
"xx:xx:xx:xx:xx:xx"dizesi olarak eş adresi (örn.ScanEntry.addr()öğesinden alınan).addr_type(yalnızca anahtar sözcük)constants.ADDR_TYPE_PUBLIC(varsayılan) veyaconstants.ADDR_TYPE_RANDOM_STATICöğelerinden biri.
- class ubluepy.Scanner¶
Yakındaki yayın yapan cihazları keşfetmek için GAP gözlemcisi. Yalnızca aygıt yazılımı (firmware) merkez desteği olan bir SoftDevice’a (s132 / s140) karşı derlendiğinde kullanılabilir.
- class ubluepy.ScanEntry¶
Scanner.scan()tarafından yakalanan tek bir reklam raporu. Örnekler tarayıcıdan döndürülür — genel bir oluşturucu (constructor) yoktur.- addr_type() int¶
Eş adresi türünü döndürür (
constants.ADDR_TYPE_PUBLICveyaconstants.ADDR_TYPE_RANDOM_STATIC).
- getScanData() list¶
Reklam yükünü bir
(ad_type, description, value)demetleri listesine çözer.ad_type, sayısal AD türü baytıdır (bkz.constants.ad_types),description, eşleşen sabitin adını bir dize olarak verir (veya tür bilinmiyorsaNone) vevalue, AD kaydının gövdesini birbytearrayolarak verir.
- class ubluepy.DefaultDelegate¶
Peripheral.withDelegate()öğesine geçirilen nesneler için temel sınıf. GATT olaylarına tepki vermek için bu sınıftan türetin vehandleConnection()/handleNotification()metotlarını geçersiz kılın.
Sabitler¶
Modülün constants özniteliği, GAP/GATT olay tanımlayıcıları, adres türü değerleri ve iç içe geçmiş ad_types ad alanını içeren bir ad alanıdır.
- constants.EVT_GAP_CONNECTED: int¶
GAP bağlantısı için
Peripheralbağlantı işleyicisievent_iddeğeri (16).
- constants.EVT_GAP_DISCONNECTED: int¶
GAP bağlantı kesilmesi için
Peripheralbağlantı işleyicisievent_iddeğeri (17).
- constants.EVT_GATTS_WRITE: int¶
Bildirimleri etkinleştiren/devre dışı bırakan bir CCCD’ye yapılan yazmalar dahil olmak üzere, yerel bir GATT özniteliğine yapılan bir yazma için
Peripheralbağlantı işleyicisievent_iddeğeri (80).
- constants.UUID_CCCD: int¶
Client Characteristic Configuration Descriptor için standart Bluetooth UUID’si (
0x2902).
- constants.ad_types: type¶
Bluetooth Core Specification Supplement kaynağından gelen reklam verisi AD türü sabitlerinin ad alanı. Her ad, karşılık gelen 1 baytlık AD türüyle eşleşir:
Ad
Değer
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