Python SDKで、BLEを使いたいです。



  • Python SDKで、BLEを使いたいと考えております。
    obnizを起動後、nRF Connectとペアリングし、ReadとWriteをすることはできています。

    目標としては、obnizで取得したセンサーデータをBLE経由で、スマホアプリに送信することです。
    送信タイミングとしては、取得したセンサー値が更新された時ですので、Notifyを使おうとしております。

    Propertyを確認したところ、Read, Writeのみ表示されました。

    どのようにNotifyを有効にすれば良いのかわからないので、ご教示いただけますと幸いです。

    SDKとしては、こちらをForkして使用しております。
    https://github.com/obniz/obniz-python-sdk

    私の作成しているコードです。
    ble.py を実行しております。
    https://github.com/NaotoFujihiro/obniz-python-sdk



  • @Naoto-Fujihiro さん

    obniz-python-sdkではまだBLE機能を整備中でして、不備が多々見られると思います。コードを拝見したところ、以下を修正することでNotifyを有効にできるようでした。

    ble.py

    async def onconnect(obniz):
        obniz.display.clear()
        obniz.display.print("Hello, World!")
    
        new_service = obniz.ble.service({
            'uuid': '555a0001-0aaa-467a-9538-01f0652c74e8'
        })
        new_characteristic = obniz.ble.characteristic({
            'uuid': '555a0003-0aaa-467a-9538-01f0652c74e8',
            'properties': ['write', 'read', 'notify'], # propertiesの設定を追加してください
            'data': [0x00, 0x64],
            'descriptors': [{
                'uuid': '2902',
                'data': [0x00, 0x00],
            }]
        })
    
        new_service.add_characteristic(new_characteristic)
        obniz.ble.peripheral.add_service(new_service)
    

    また、obniz/obniz/libs/embeds/ble/ble_characteristic.py内のBleCharacteristicクラスに次のメソッドを追加してください。

    def to_json(self):
            obj = super().to_json()
            if (len(self.properties) > 0):
                obj["properties"] = self.properties
            
            if (len(self.permissions) > 0):
                obj["permissions"] = self.permissions
    
            return obj
    

    これにより、obnizに設定内容が正しく送信されます。
    BLE機能の整備中ですみませんが、よろしくお願いします。


Log in to reply
 

SUGGESTED TOPICS