上次通过官方提供的名为 Bluetooth-NCP 的 Demo,简单体验了 Simplicity Studio 这款 IDE 的易用性和便利性。这次以官方例程为模板,创建一个工程,深入体验该 IDE。
在 EXAMPLE PROJECT & DEMOS 菜单下,提供了很多例程,这里选择 Bluetooth-Soc Blinky 例程,点击“ CREATE ”按钮,根据提示完成工程导入建立。
工程建立好后,首先展示的是一个 readme 文档。该文档对该例程的功能及使用做了详细的介绍。文档一开始提到,此项目可以说是 BLE 开发的 “hello world”。因此打算学习 BLE 的朋友,不妨从这个例程开始上手。
GATT 的配置与上次使用的 Bluetooth NCP Commander 工具类似,采用图形化的方式配置 GATT,相对于源码配置更加简明、直观。如下图:
查看 LED Control 特征,可以直接修改 UUID。对于特征属性,只需要动几下鼠标即可完成配置。如下图:
打开后缀名为 pintool 的文件,同样是以图形化的方式对芯片 IO 进行配置。如下图:
该应用的功能为当按下开发板上的 BTN0,会将按键状态以 BLE 通知的形式发给主机端(手机)。主机端可以通过 BLE Write 的方式,控制开发板上 LED0 的亮灭。具体来看源码:
在 app.c 文件的 sl_bt_on_event() 函数中,控制 LED0 的代码如下:
if (data_recv == 0x00) {
sl_led_turn_off(SL_SIMPLE_LED_INSTANCE(0));
app_log_info("LED off.n");
} else if (data_recv == 0x01) {
sl_led_turn_on(SL_SIMPLE_LED_INSTANCE(0));
app_log_info("LED on.n");
} else {
app_log_error("Invalid attribute value: 0x%02xn", (int)data_recv);
}
当 BLE 接收到的数据为 0x00 时,将熄灭 LED0,当接收到的数据为 0x01 时,将点亮LED0。 update_report_button_characteristic() 函数中,按键 BTN0 的状态处理代码如下:
switch (sl_button_get_state(SL_SIMPLE_BUTTON_INSTANCE(0))) {
case SL_SIMPLE_BUTTON_PRESSED:
data_send = (uint8_t)SL_SIMPLE_BUTTON_PRESSED;
break;
case SL_SIMPLE_BUTTON_RELEASED:
data_send = (uint8_t)SL_SIMPLE_BUTTON_RELEASED;
break;
default:
// Invalid button state
return SL_STATUS_FAIL; // Invalid button state
}
即 BTN0 处于按下状态时,发送数据为 0x01。处于释放状态时,发送数据为 0x00。
官方提供了一个名为 EFR Connect 的移动端 APP,用于进行 BLE 的测试,并在 github 上公开了源码。
这里本人仍然使用 Lightblue 进行测试。执行编译、烧录、运行,让我们的代码在 BG22-EK4108A 套件上跑起来,然后打开手机 APP 进行连接。
之后进行测试,按下按键,APP 端会收到按键状态通知,如下:
APP 端发送数据,控制 LED 灯亮灭,如下:
不得不说,BG22-EK4108A 套件的开发体验做得太好了。Simplicity Studio 几乎集成了开发者所需要的所有资源。在这个 IDE 中,除了基本的编码,调试等功能外,还集成了各种开发工具、例程、文档。你不需要再跑去官网找资料,也不需要再额外安装其他软件,有 Simplicity Studio 足矣。
本帖最后由 jj1989 于 2022-1-23 22:51 编辑