利用 Simplicity Studio 从零建立一个 LED Server
环境
- 板卡:ThunderBoard ERF32BG22
- IDE:SimplicityStudio v5
- SDK:3.1 版本(3.0 版本会有问题)
该 IDE 应该也是基于 Eclipse 开发的,许多配置界面跟其他基于 Eclipse 开发的 IDE 差不多,就比如 RT-Thread Studio 。
实验现象
ERF32BG22 作为一个 LED Server,手机端通过 nrf Connect 去连接板卡,通过向相应 Service 的 Characteristic 写 1 点亮 LED 灯,写 0 熄灭 LED 灯。
创建流程
首先创建一个 Bluetooth - SoC Empty 的 demo 工程,如何创建 demo 工程可参考 Simplicity Studio 创建 demo 工程 。
Bluetooth - SoC Empty 这个工程包含了蓝牙C应用程序需要的最小环境,下图中也有相应的注释。
因为 ThunderBoard ERF32BG22 这个板卡是 Silicon Labs 官方板卡,提供了板卡的 BSP 。因此我们可以用可视化的方式、像搭积木似地来对板卡上的资源进行配置。
打开工程的配置文件 soc_empty.slcp ,双击即可。在这个界面里,我们可以可视化地添加资源、软件包,也可以像 STM32CubeMX 一样配置引脚用途。
这里我们选择 SOFTWARE_COMPONENTS -> Bluetooth -> GATT -> Automation IO GATT Service 。我们添加的这个 Service 里包含了对板卡上 Button 和 Led 服务的实现,并统一集成为 Automation IO(自动化IO) 。
然后就可以点击右侧的 Install 按钮,将该软件组件添加到工程里。右下角的 View Dependencies 可以看见该软件包的依赖情况。
第一次 Install 的时候应该会出错,错误提示如下图,该错误的意思是缺少某个组件,这里我们选择安装 IO Stream: USART Core 这个组件,点击它即可跳转到相应的安装界面。
点击 Install 即可安装,然后上方红色的 Validation Errors 就会消失,表明错误消除,此时软件包添加成功。
此时在工程目录里可以看见添加了一些文件,其中 autogen 目录下的文件是根据软件包配置自动生成的,最好不要修改,否则下次配置软件包时更改的信息会丢失。
首先可以看到添加了 led 和 button 的驱动 sl_simple_button_instances, sl_simple_led_instances 。然后可以看见在目录 gecko_sdk_3.1.0 -> app -> bluetooth -> common 添加了 gatt_service_aio 这个 GATT Service 。
在 Bluetooth GATT Configurator 界面可以看见我们添加的 Automation IO Service ,注意该 Service 是 Contributed items ,意味着该 Service 不可修改,是系统定义好的。
之后点击下图中的小锤子,编译项目。
此时应该会报错,会提示 SL_SIMPLE_LED_COUNT 和 SL_SIMPLE_BUTTON_COUNT 找不到,我们需要自己定义一下。
点击 Project -> Properties ,就会出现如下所示的属性配置界面,选择 C/C++ Build -> Settings 。然后在右侧选择 Tool Settings -> GNU ARM C Compiler -> Preprocessor ,点击右侧 + 按钮添加两个宏
- SL_SIMPLE_LED_COUNT=1
- SL_SIMPLE_BUTTON_COUNT=1
之后再次编译,应该就没问题了。
之后就需要下载固件了,点击下图中的下载按钮。
在弹出来的界面里点击 Browser 选择固件所在的位置,
hex 文件一般在工程文件的 Debug 或 Release 目录下。
选择好固件后点击 Program 即可下载固件。
验证是否创建成功
手机端打开 nrf Connect ,在扫描中发现有我们创建的设备发的广播,广播名为 Empty Example,点击右侧 CONNECT 。
连接成功后会发现有一个 Automation IO Service ,其 UUID 为 0x1815 ,也就是我们刚才添加的,点击它。
然后我们会看到该 Service 里的各种 Characteristic 和 Characteristic Configuration 。在 UUID 为 0x2A56 的那一个 Digit Characteristic 处,点击向上的箭头。
在弹出的对话框里输入 0x01 ,然后点击 SEND ,即可看到板卡上的 LED 灯被点亮了,完成了蓝牙点灯的过程。