Micro:Bit读蓝牙消息

时间:2018-02-06 16:52:34

标签: c++ c bluetooth uart bbc-microbit

我想通过蓝牙从我的Micro:Bit向链接设备发送消息。我有以下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配对:

enter image description here

配对后,我不知道如何阅读通过uart bluetooth发送的消息。

1 个答案:

答案 0 :(得分:0)

不要让特征名称中的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([回调(误差)]);

characteristic.on('data',callback(data,isNotification));

写作用途

characteristic.write(data,withoutResponse [,callback(error)]); // data是一个缓冲区,withoutResponse为true | false

我知道你对手机不感兴趣,但原则完全一样,无论你编码哪个平台,无论你使用哪种API。您只需要知道每个特性支持哪些操作,然后相应地使用您的API。