The Bluezero library doesn't support the Message Event Service (MES) in the microbit
module.
The goal of Bluezero is to be easy to use as an introduction to BLE. I have not had the need to use the MES service so have not taken the time to build a beginner friendly API using the information from the micro:bit Bluetooth Profile.
My understanding is that in your application, on connection the Python code should read the MicroBit Requirements
characteristic (UUID: E95DB84C-251D-470A-A062-FA1922DFA9A8
)
And then send commands via the Client Event
characteristic (UUID: E95D5404-251D-470A-A062-FA1922DFA9A8
)
As you will see in the micro:bit Bluetooth Profile document, the events are numbers. Some of these numbers are can be obtained from: https://lancaster-university.github.io/microbit-docs/ble/event-service/#microbit-code-for-the-buggy-controller.
To get you something with as few lines of code as possible, here is an example using the BLE-GATT library.
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()
I have no way of testing if that is what is required for the Kitronik Servo:Lite board and is just my best guess. If you have more information then I can update the answer.