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