如何通过蓝牙从python向micro:bit发送MES事件

2024-06-10 07:48:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python代码将Raspberry Pi Zero W中的事件发送到micro:bit,以控制Kitronik伺服:Lite板

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

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发布的android应用程序发送MES events来控制伺服:Lite板。如何从python代码中发送这些内容


Tags: 代码应用程序pibitlitemicroraspberryandroid
1条回答
网友
1楼 · 发布于 2024-06-10 07:48:51

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

Bluezero的目标是易于作为BLE的介绍使用。我没有必要使用MES服务,因此没有花时间使用来自micro:bit Bluetooth Profile的信息构建一个初学者友好的API

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

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

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

为了获得尽可能少的代码行,下面是一个使用BLE-GATT库的示例

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板所需的,这只是我的最佳猜测。如果你有更多的信息,我可以更新答案

相关问题 更多 >