【Silicon Labs BG22-EK4108A 蓝牙开发评测】三:Bluetooth-Soc Blinky 例程开发体验
本帖最后由 jj1989 于 2022-1-23 22:51 编辑<div class="parsedown-markdown">
<h1>【Silicon Labs BG22-EK4108A 蓝牙开发评测】三:官方 Bluetooth-Soc Blinky 例程开发体验</h1>
<h2>前言</h2>
<p>上次通过官方提供的名为 Bluetooth-NCP 的 Demo,简单体验了 Simplicity Studio 这款 IDE 的易用性和便利性。这次以官方例程为模板,创建一个工程,深入体验该 IDE。</p>
<h2>工程创建</h2>
<p></p>
<p>在 EXAMPLE PROJECT & DEMOS 菜单下,提供了很多例程,这里选择 Bluetooth-Soc Blinky 例程,点击“ CREATE ”按钮,根据提示完成工程导入建立。</p>
<p> </p>
<p></p>
<p>工程建立好后,首先展示的是一个 readme 文档。该文档对该例程的功能及使用做了详细的介绍。文档一开始提到,此项目可以说是 BLE 开发的 “hello world”。因此打算学习 BLE 的朋友,不妨从这个例程开始上手。</p>
<p> </p>
<h2>IDE 功能体验</h2>
<h3>GATT配置</h3>
<p>GATT 的配置与上次使用的 Bluetooth NCP Commander 工具类似,采用图形化的方式配置 GATT,相对于源码配置更加简明、直观。如下图:</p>
<p></p>
<p>查看 LED Control 特征,可以直接修改 UUID。对于特征属性,只需要动几下鼠标即可完成配置。如下图: </p>
<p></p>
<h3>引脚配置</h3>
<p>打开后缀名为 pintool 的文件,同样是以图形化的方式对芯片 IO 进行配置。如下图: </p>
<p></p>
<h2>源码分析</h2>
<p>该应用的功能为当按下开发板上的 BTN0,会将按键状态以 BLE 通知的形式发给主机端(手机)。主机端可以通过 BLE Write 的方式,控制开发板上 LED0 的亮灭。具体来看源码:</p>
<p>在 app.c 文件的 <em>sl_bt_on_event()</em> 函数中,控制 LED0 的代码如下:</p>
<pre>
<code class="language-c"> 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);
}</code></pre>
<p>当 BLE 接收到的数据为 0x00 时,将熄灭 LED0,当接收到的数据为 0x01 时,将点亮LED0。 <em>update_report_button_characteristic()</em> 函数中,按键 BTN0 的状态处理代码如下:</p>
<pre>
<code class="language-c">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
}</code></pre>
<p>即 BTN0 处于按下状态时,发送数据为 0x01。处于释放状态时,发送数据为 0x00。</p>
<h2>测试</h2>
<p>官方提供了一个名为 EFR Connect 的移动端 APP,用于进行 BLE 的测试,并在 github 上公开了<a href="https://github.com/SiliconLabs?q=efrconnect&type=&language=&sort=" target="_blank">源码</a>。</p>
<p>这里本人仍然使用 Lightblue 进行测试。执行编译、烧录、运行,让我们的代码在 BG22-EK4108A 套件上跑起来,然后打开手机 APP 进行连接。</p>
<p>之后进行测试,按下按键,APP 端会收到按键状态通知,如下:</p>
<p></p>
<p>APP 端发送数据,控制 LED 灯亮灭,如下:</p>
<p></p>
<h2>总结</h2>
<p>不得不说,BG22-EK4108A 套件的开发体验做得太好了。Simplicity Studio 几乎集成了开发者所需要的所有资源。在这个 IDE 中,除了基本的编码,调试等功能外,还集成了各种开发工具、例程、文档。你不需要再跑去官网找资料,也不需要再额外安装其他软件,有 Simplicity Studio 足矣。</p>
</div>
<p> </p>
页:
[1]