Код: Выделить всё
import asyncio
from bleak import BleakClient
from bleak.backends.characteristic import BleakGATTCharacteristic
from bleak.backends.device import BLEDevice
UART_SERVICE_UUID = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
UART_RX_CHAR_UUID = "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
UART_TX_CHAR_UUID = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
async def BLE_send(data):
device="2C:CF:67:D2:CA:2F" # MAC address RasPi Pico2W
def handle_disconnect(_: BleakClient):
print("Disconnected", BleakClient)
# cancelling all tasks effectively ends the program
for task in asyncio.all_tasks():
task.cancel()
def handle_rx(_: BleakGATTCharacteristic, data: bytearray):
print("received:", data)
async with BleakClient(device, disconnected_callback=handle_disconnect) as client:
await client.start_notify(UART_TX_CHAR_UUID, handle_rx)
print("connected")
loop = asyncio.get_running_loop()
nus = client.services.get_service(UART_SERVICE_UUID)
assert nus is not None, "UART service not found"
rx_char = nus.get_characteristic(UART_RX_CHAR_UUID)
assert rx_char is not None, "UART RX characteristic not found"
await client.write_gatt_char(rx_char, data, response=False)
print("sent:", data)
data=b"rb10\n"
try:
asyncio.run(BLE_send(data))
except asyncio.CancelledError:
print("")
pass
Теперь мне нужно связаться со вторым периферийным устройством (Pi Pico2W), и - из-за моего невежества - я не смог заставить это работать. Я пробовал много вещей, и было бы неэффективно перечислять их все.
Было бы здорово, если бы кто-нибудь мог сказать мне, как нужно изменить/оптимизировать код для взаимодействия с двумя устройствами (насколько это возможно синхронно).
Подробнее здесь: https://stackoverflow.com/questions/798 ... sing-bleak
Мобильная версия