Я хочу отправлять сообщения с моего Micro: Bit на связанное устройство через Bluetooth. У меня есть следующий код для Micro: Bit:
#include "MicroBit.h"#include "MicroBitUARTService.h"
MicroBitUARTService *uart;
MicroBit uBit;
uint8_t connected = 0;
void onConnect(MicroBitEvent)
{
connected = 1;
uBit.display.print("C");
}
void onDisconnect(MicroBitEvent)
{
connected = 0;
uBit.display.print("D");
}
void onButtonA(MicroBitEvent e)
{
if (connected == 0) {
uBit.display.print("X");
return;
}
uart->send("Button A");
uBit.display.print("A");
}
void onButtonB(MicroBitEvent e)
{
if (connected == 0) {
uBit.display.print("X");
return;
}
uart->send("Button B");
uBit.display.print("B");
}
int main()
{
// Initialise the micro:bit runtime.
uBit.init();
uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_CONNECTED, onConnect);
uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_DISCONNECTED, onDisconnect);
uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA);
uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB);
uart = new MicroBitUARTService(*uBit.ble, 32, 32);
uBit.display.print("S");
release_fiber();
}
Я могу связать его с моим MacBook, используя следующий инструмент:
После сопряжения я не знаю, как читать сообщения, отправленные через Bluetooth UART.
Не позволяйте термину UART в названии характеристики сбить вас с толку, это просто стандартная характеристика и не имеет ничего общего с фактическим UART.
согласно документации, признаки используются с характеристикой UART TX, поэтому посмотрите, как использовать индикации из вашего API.
https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html
А также
https://lancaster-university.github.io/microbit-docs/ble/uart-service/#example-microbit-application-animal-vegetable-mineral-game для примера Android.
Мартин
Больше….
В соответствии с документацией профиля, для которой я дал ссылку выше, вы можете написать в характеристику RX, но должны подписаться на Показания для характеристики TX. Вы не можете прочитать это напрямую.
На Raspberry Pi я бы использовал модуль Noble node.hs:
https://github.com/sandeepmistry/noble
Для показаний используйте
characteristic.subscribe ([обратный вызов (ошибка)]);
а также
характеристика.on (‘данные’, обратный вызов (data, isNotification));
Для письменного использования
характеристика.write (данные, без ответа [, обратный вызов (ошибка)]); // данные являются буфером, безResponse имеет значение true | false
Я знаю, что вы не интересуетесь телефонами, но принцип один и тот же, независимо от того, какую платформу вы программируете и какой API используете. Вам просто нужно знать, какие операции поддерживает каждая характеристика, а затем соответственно использовать ваш API.
Других решений пока нет …