蓝牙mesh初尝试--空气净化器的小升级
mesh是基于BLE开发的,所以BLE的SDK包我们也需要,这里我使用的是SDK16
![](http://editerupload.eepw.com.cn/fetch/202401/d1d117fda71750cd5fa748ce24c734f1.png)
由于Nordic提供的mesh工程是在SES下建立的,所以我预先在电脑中安装好了SES,这里不多赘述。下载这两个文件之后,我在电脑中新建了一个文件夹,把这两个文件放到了同一目录下,接着打开了SDK for mesh的example文件夹,这里面存放着许多例程,这里我基于light-lightness例程来修改,以达到最终目的。
![](http://editerupload.eepw.com.cn/fetch/202401/7b6cd281b58418e1d90bfe111af9ca45.png)
light-lightness例程实际上就是控制led亮度的一个例程,使用的pwm来控制led亮度,这其实和我的空气净化器需要的一路电机转速控制很是类似,故我在这个例程上修改,添加其他模型。点开light-lightness文件夹之后,发现里面还有两个文件夹,一个是server一个是client,我们使用server来修改,点开之后打开NRF52832的SES工程,如下
![](http://editerupload.eepw.com.cn/fetch/202401/0244e793567cea85019dbb158d214824.png)
观察左侧的工程树,我们可以发现其实和BLE的工程还是有比较多的类似之处,各个层级分层目录很是明显,首先我编译一下工程,发现没有错误没有警告。接着就可以开始修改例程了,首先我把OLED屏幕以及光线传感器的代码移植过来,在工程中新建一个文件夹放入代码,并且添加对应的头文件路径。
![](http://editerupload.eepw.com.cn/fetch/202401/b24ac0aee0a03ff9c3b782a69b929285.png)
![](http://editerupload.eepw.com.cn/fetch/202401/02f6622bd8c02f458a8c5dbd6bfbf9d1.jpeg)
![](http://editerupload.eepw.com.cn/fetch/202401/1b0d59a2ddbba0ba137eda14e2ff54d9.png)
接着修改一下pwm的对应引脚,由于在mesh工程中,pwm使用的是软件pwm库,所以pwm的引脚可以任意定义。这里对应我的电路板,修改为第五脚
![](http://editerupload.eepw.com.cn/fetch/202401/6bc59f06bb13c68058dc4cd55897d1f3.png)
熟悉Nordic的SDK的同学应该都知道,大部分事情都是在回调函数中处理的,对于light-lightness模型,当模型的状态更新的时候,会调用set_lightness_cb这个回调函数,于是我在回调函数中添加了一个转速的显示函数,用来在改变转速的时相应的显示。
![](http://editerupload.eepw.com.cn/fetch/202401/ae879b6334b8af41209c450bc203ab45.png)
编译工程,然后接上jlink,点击target工具栏下面的连接之后,依次执行擦除和下载指令,程序以及协议栈就会被下载到芯片当中了。下载完成后控制台显示如下
![](http://editerupload.eepw.com.cn/fetch/202401/9ec263f47cf58aa2285a473d54345569.png)
接着给电路板接上电源,手机上安装NRF mesh软件之后,就可以搜索到我的电路板的信号了,此时显示屏也有了显示数据。
![](http://editerupload.eepw.com.cn/fetch/202401/42107088109dc8df448467c91aab900d.jpeg)
此时的电路板处在未配网状态,需要使用手机先对其进行配置,按照手机上的提示依次操作即可,配置好之后点开element目录,发现其中有很多模型,点击generic level server模型,绑定app key之后,就可以使用最下方的滑动条来控制电机转速了。
![](http://editerupload.eepw.com.cn/fetch/202401/15e21cf47fbb24a2698074effe86924f.jpeg)
![](http://editerupload.eepw.com.cn/fetch/202401/858c3a0a24004cd68061488a9881355a.jpeg)
下面我需要添加的是控制负离子发生器功能,其需要的控制量是开关量,所以我选择添加一个最基本的模型:generic on-off。在工程中新建一个文件夹, 添加generic on-off模型的相关文件,添加好之后如下所示
![](http://editerupload.eepw.com.cn/fetch/202401/e3bcbeb09092b8f9cccf34ef4831f61d.png)
由于新加入了模型,我们就需要修改一下配置头文件,在工程树中找到nrf_mesh_config_app.h文件,修改其中的ACCESS_MODEL_COUNT(模型总数)以及ACCESS_ELEMENT_COUNT(元素总数)以及
ACCESS_SUBSCRIPTION_LIST_COUNT(订阅列表)
![](http://editerupload.eepw.com.cn/fetch/202401/e8a0e53c1b8c420f77a39ef3d4bc2182.png)
修改好之后就可以在main.c文件中添加generic on-off模型的相关初始化以及回调函数了
![](http://editerupload.eepw.com.cn/fetch/202401/f372b6860f3c8e91a2b33e692746fb26.jpeg)
![](http://editerupload.eepw.com.cn/fetch/202401/271bf809ab8e85edb8c9fce89e549b8a.png)
由于需要传输pm2.5传感器的数据,我还需要添加sensor模型,和以上添加generic on-off模型类似,添加sensor模型相关文件以及相关初始化以及回调函数,由于sensor模型的回调函数有很多,我用到的只有一个,所有我只贴上用到的那个回调函数的代码,其余函数都参考sensor例程编写,并无改动。
![](http://editerupload.eepw.com.cn/fetch/202401/af6019c36eaf63b30eedf8096b503a52.png)
![](http://editerupload.eepw.com.cn/fetch/202401/2bb9f532a621635be25b6e9fa03ed7c8.jpeg)
![](http://editerupload.eepw.com.cn/fetch/202401/81ef569c4f2cac29df42384d84aa7c73.png)
由于pm2.5传感器使用串口发送数据,还需要添加串口的相关代码,并且在app_config.h函数中声明相关外设的宏
![](http://editerupload.eepw.com.cn/fetch/202401/aecc55f3488b56402fe126cbe62b6969.jpeg)
![](http://editerupload.eepw.com.cn/fetch/202401/fab36e810ddddcc7571c94e4a7669833.jpeg)
接着在main.c文件的initialize函数中添加创建软件定时器相关代码,在其回调函数中周期性更新显示数据以及发布数据
![](http://editerupload.eepw.com.cn/fetch/202401/1ca0b79ee6e925a551a89c04b2ffe191.png)
![](http://editerupload.eepw.com.cn/fetch/202401/63361dd5b066b723962d5c5c9fa714d2.png)
编译工程并且下载到电路板上,可以看到pm2.5数据显示正常,重新对电路板进行配网之后,可以看到其中有了3个元素,新添加的generic on-off模型以及sensor模型都可以正常显示。点击generic on-off模型,绑定app-key之后,即可控制负离子发生器的开启和关闭。
![](http://editerupload.eepw.com.cn/fetch/202401/e05afbdb2a6d9d8b08b276a3edc23324.jpeg)
为了测试mesh通信是否正常,我制作了一个小的测试板,将其烧录light-lightness的client工程以及配置之后,我们需要配置一下两者的订阅以及发布地址。给电路板的light-lightness模型下添加一个订阅组地址,以及给测试板的light-lightness模型下添加一个发布组地址,注意两者地址需要相同,接着就可以使用测试板的按键来控制空气净化器的电机转速。
![](http://editerupload.eepw.com.cn/fetch/202401/1e97a22ec8a22722e119cf92817636dd.png)
![](https://webstorage.eepw.com.cn/images/2014/m/wx.png)
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码