首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过蓝牙将MES事件发送到micro: python中的位

如何通过蓝牙将MES事件发送到micro: python中的位
EN

Stack Overflow用户
提问于 2021-02-08 21:21:06
回答 1查看 195关注 0票数 1

我正在尝试将事件从我的Raspberry Pi发送到我的Python代码中的微:位,以控制Kitronik Servo:Lite板。

我已经证明了用Kitronik示例代码和Kitronik android游戏垫应用程序可以控制Servo:Lite板。在我的python代码中,我可以成功地将Pi连接到微:bit,如下所示:

代码语言:javascript
复制
from bluezero import microbit
ubit = microbit.Microbit(adapter_addr='xx:xx:xx:xx:xx:xx',
                     device_addr='yy:yy:yy:yy:yy:yy')
my_text = 'Hello, world'
ubit.connect()

Kitronik发布的安卓应用程序让MES事件控制Servo:Lite板。如何从我的python代码中发送这些?

EN

回答 1

Stack Overflow用户

发布于 2021-02-09 07:55:21

Bluezero库不支持microbit模块中的消息事件服务(MES)。

Bluezero的目标是简单易用,作为BLE的介绍。我不需要使用MES服务,所以没有花时间使用来自微:位蓝牙配置文件的信息来构建一个初学者友好的API。

我的理解是,在您的应用程序中,在连接时,Python代码应该读取MicroBit Requirements特性(UUID:E95DB84C-251D-470A-A062-FA1922DFA9A8)

然后通过Client Event特性发送命令(UUID:E95D5404-251D-470A-A062-FA1922DFA9A8)

正如您将在微:位蓝牙配置文件文档中看到的那样,事件是数字。其中一些数字可以从:https://lancaster-university.github.io/microbit-docs/ble/event-service/#microbit-code-for-the-buggy-controller获得。

为了获得尽可能少的代码行,下面是一个使用布尔-关贸总协定库的示例。

代码语言:javascript
复制
from time import sleep
import BLE_GATT

ubit_address = 'yy:yy:yy:yy:yy:yy'
ubit_req = 'E95DB84C-251D-470A-A062-FA1922DFA9A8'
client_event = 'E95D5404-251D-470A-A062-FA1922DFA9A8'
MES_DPAD_CONTROLLER = 1104
MES_DPAD_1_BUTTON_UP_ON = 1
MES_DPAD_1_BUTTON_UP_OFF = 2
MES_DPAD_1_BUTTON_DOWN_ON = 3
MES_DPAD_1_BUTTON_DOWN_OFF = 4
MES_DPAD_1_BUTTON_LEFT_ON = 5
MES_DPAD_1_BUTTON_LEFT_OFF = 6
MES_DPAD_1_BUTTON_RIGHT_ON = 7
MES_DPAD_1_BUTTON_RIGHT_OFF = 8
MES_DPAD_2_BUTTON_UP_ON = 9
MES_DPAD_2_BUTTON_UP_OFF = 10
MES_DPAD_2_BUTTON_DOWN_ON = 11
MES_DPAD_2_BUTTON_DOWN_OFF = 12
MES_DPAD_2_BUTTON_LEFT_ON = 13
MES_DPAD_2_BUTTON_LEFT_OFF = 14
MES_DPAD_2_BUTTON_RIGHT_ON = 15
MES_DPAD_2_BUTTON_RIGHT_OFF = 16


ubit = BLE_GATT.Central(ubit_address)
ubit.connect()

# Print what micro:bit is interested in
print(ubit.char_read(ubit_req))

# Send left D-Pad pressed 
ubit.char_write(client_event, MES_DPAD_CONTROLLER.to_bytes(2, byteorder='little') + MES_DPAD_1_BUTTON_UP_ON.to_bytes(2, byteorder='little'))

# Wait 3 seconds
sleep(3)

# Release the button
ubit.char_write(client_event, MES_DPAD_CONTROLLER.to_bytes(2, byteorder='little') + MES_DPAD_1_BUTTON_UP_OFF.to_bytes(2, byteorder='little'))

ubit.disconnect()

我没有办法测试,如果这是需要的Kitronik Servo:Lite板,这只是我最好的猜测。如果你有更多的信息,我可以更新答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66109546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档