电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
蓝牙mesh初尝试--空气净化器的小升级
分 享
扫描二维码分享
蓝牙mesh初尝试--空气净化器的小升级
DIY
mesh
蓝牙
皮皮学电子
关注
发布时间: 2021-03-31
丨
阅读: 2005
在早前的帖子当中,我曾经制作过一个空气净化器,并且开发了一款对应的小程序去控制它。帖子链接如下 https://www.icxbk.com/article/detail?aid=1464 此款空气净化器我使用的是Nordic的一款蓝牙SOC-NRF52832,其不仅支持低功耗蓝牙BLE,并且也对蓝牙mesh网络有着良好的支持。相信蓝牙mesh网络大家并不陌生,其在物联网领域以及智能家居中都有着广泛的应用,支持数量庞大的节点以及多种节点模型,完善且安全的协议都使得它一直以来都是此领域的香饽饽。在此文章中,我就来分享一下我对我的净化器软件层面上的一些更新,使其支持mesh网络控制。 首先我需要注意的一点是,蓝牙mesh使用的虽然还是BLE低功耗蓝牙的协议栈,但是他和BLE设备之间是不能直接进行通信的,所以代码上会有很大调整。在Nordic官网上,我们可以看到由Nordic提供针对mesh的SDK。 ![](https://cf05.ickimg.com/bbsimages/202103/3ae686326ad6583a69fd47f904523b8b.png) 这个SDK有很多版本,下载较新版本的SDK比较好,可以体验更多的功能,也方便后期的升级。这里我使用的是SDK for mesh V4.2.0 这个版本中Nordic加入了一些常用的模型到SDK中,例如sensor以及DFU,详情可见Nordic的更新简介。 ![](https://cf05.ickimg.com/bbsimages/202103/dfc073aba5cf2bb319bdc2df646c7933.png) 下载好了SDK for mesh 之后,还需要下载一下BLE的SDK包,因为之前我说过,mesh是基于BLE开发的,所以BLE的SDK包我们也需要,这里我使用的是SDK16 ![](https://cf05.ickimg.com/bbsimages/202103/0526ab037c912e496a80f935ff5735d2.png) ![](https://cf05.ickimg.com/bbsimages/202103/c26ab62b8a826e91878f6a2f9ce7b136.png) 由于Nordic提供的mesh工程是在SES下建立的,所以我预先在电脑中安装好了SES,这里不多赘述。下载这两个文件之后,我在电脑中新建了一个文件夹,把这两个文件放到了同一目录下,接着打开了SDK for mesh的example文件夹,这里面存放着许多例程,这里我基于light-lightness例程来修改,以达到最终目的。 ![](https://cf05.ickimg.com/bbsimages/202103/3c0ae7ac016a701466c3fc7cbabde5f7.png) light-lightness例程实际上就是控制led亮度的一个例程,使用的pwm来控制led亮度,这其实和我的空气净化器需要的一路电机转速控制很是类似,故我在这个例程上修改,添加其他模型。点开light-lightness文件夹之后,发现里面还有两个文件夹,一个是server一个是client,我们使用server来修改,点开之后打开NRF52832的SES工程,如下 ![](https://cf05.ickimg.com/bbsimages/202103/464e58d0058a6925c354cc4da9b5881a.png) 观察左侧的工程树,我们可以发现其实和BLE的工程还是有比较多的类似之处,各个层级分层目录很是明显,首先我编译一下工程,发现没有错误没有警告。接着就可以开始修改例程了,首先我吧OLED屏幕以及光线传感器的代码移植过来,在工程中新建一个文件夹放入代码,并且添加对应的头文件路径。 ![](https://cf05.ickimg.com/bbsimages/202103/5c6a6313ae91d47e3f7228c681074d69.png) ![](https://cf05.ickimg.com/bbsimages/202103/459b10330bfc927033bb6e72ff5a07a6.png) ![](https://cf05.ickimg.com/bbsimages/202103/bc3e1cca955959f63fca9ce5ebc633e1.png) 接着修改一下pwm的对应引脚,由于在mesh工程中,pwm使用的是软件pwm库,所以pwm的引脚可以任意定义。这里对应我的电路板,修改为第五脚 ![](https://cf05.ickimg.com/bbsimages/202103/0254ba9cb5630f990ac658aca735d7fc.png) 熟悉Nordic的SDK的同学应该都知道,大部分事情都是在回调函数中处理的,对于light-lightness模型,当模型的状态更新的时候,会调用set_lightness_cb这个回调函数,于是我在回调函数中添加了一个转速的显示函数,用来在改变转速的时相应的显示。 ![](https://cf05.ickimg.com/bbsimages/202103/cd4daada2cd20a1888444ce42cd314d9.png) 编译工程,然后接上jlink,点击target工具栏下面的连接之后,依次执行擦除和下载指令,程序以及协议栈就会被下载到芯片当中了。下载完成后控制台显示如下 ![](https://cf05.ickimg.com/bbsimages/202103/be8809ccaced78a4f9533882baf2a2e5.png) 接着给电路板接上电源,手机上安装NRF mesh软件之后,就可以搜索到我的电路板的信号了,此时显示屏也有了显示数据。 ![](https://cf05.ickimg.com/bbsimages/202103/d4a5c6fa5325de4bd3359be8098ad208.jpg) 此时的电路板处在未配网状态,需要使用手机先对其进行配置,按照手机上的提示依次操作即可,配置好之后点开element目录,发现其中有很多模型,点击generic level server模型,绑定app key之后,就可以使用最下方的滑动条来控制电机转速了。 ![](https://cf05.ickimg.com/bbsimages/202103/e87314727e454e74b076ef1852a8e012.jpg) ![](https://cf05.ickimg.com/bbsimages/202103/a2e7453e2598d2f7796972217c5fd0d1.jpg) 下面我需要添加的是控制负离子发生器功能,其需要的控制量是开关量,所以我选择添加一个最基本的模型:generic on-off。在工程中新建一个文件夹, 添加generic on-off模型的相关文件,添加好之后如下所示 ![](https://cf05.ickimg.com/bbsimages/202103/ebfa6f1919a6ec2b58bf910b933e8a93.png) 由于新加入了模型,我们就需要修改一下配置头文件,在工程树中找到nrf_mesh_config_app.h文件,修改其中的ACCESS_MODEL_COUNT(模型总数)以及ACCESS_ELEMENT_COUNT(元素总数)以及ACCESS_SUBSCRIPTION_LIST_COUNT(订阅列表) ![](https://cf05.ickimg.com/bbsimages/202103/d8d9f69c1d136cc75005ee635cfadab8.png) 修改好之后就可以在main.c文件中添加generic on-off模型的相关初始化以及回调函数了 ![](https://cf05.ickimg.com/bbsimages/202103/463ada2311f5c0cfd8bff4183983082a.png) ![](https://cf05.ickimg.com/bbsimages/202103/8ddc36939d9964239256733cd44b3f2b.png) 由于需要传输pm2.5传感器的数据,我还需要添加sensor模型,和以上添加generic on-off模型类似,添加sensor模型相关文件以及相关初始化以及回调函数,由于sensor模型的回调函数有很多,我用到的只有一个,所有我只贴上用到的那个回调函数的代码,其余函数都参考sensor例程编写,并无改动。 ![](https://cf05.ickimg.com/bbsimages/202103/2dc101c105f7d940aad20630d838a276.png) ![](https://cf05.ickimg.com/bbsimages/202103/0d6092b5edce5814559033253885d90d.png) ![](https://cf05.ickimg.com/bbsimages/202103/775ec239a296df24de61c65158a729f4.png) 由于pm2.5传感器使用串口发送数据,还需要添加串口的相关代码,并且在app_config.h函数中声明相关外设的宏 ![](https://cf05.ickimg.com/bbsimages/202103/e2878848b738dd4eeada47fc4111e7cc.png) ![](https://cf05.ickimg.com/bbsimages/202103/d78a756fda55a0094adcd9420a0c5a16.png) 接着在main.c文件的initialize函数中添加创建软件定时器相关代码,在其回调函数中周期性更新显示数据以及发布数据 ![](https://cf05.ickimg.com/bbsimages/202103/8ecec57cc428efadd20098f2fba09cd4.png) ![](https://cf05.ickimg.com/bbsimages/202103/45eb292270d5af980ede1cae643936cd.png) 编译工程并且下载到电路板上,可以看到pm2.5数据显示正常,重新对电路板进行配网之后,可以看到其中有了3个元素,新添加的generic on-off模型以及sensor模型都可以正常显示。点击generic on-off模型,绑定app-key之后,即可控制负离子发生器的开启和关闭。 ![](https://cf05.ickimg.com/bbsimages/202103/8c8fcd62ed6e05bb5360ae910128b2e3.jpg) 为了测试mesh通信是否正常,我制作了一个小的测试板,将其烧录light-lightness的client工程以及配置之后,我们需要配置一下两者的订阅以及发布地址。给电路板的light-lightness模型下添加一个订阅组地址,以及给测试板的light-lightness模型下添加一个发布组地址,注意两者地址需要相同,接着就可以使用测试板的按键来控制空气净化器的电机转速,测试的视频链接如下。 ![](https://cf05.ickimg.com/bbsimages/202103/d663dd8d0fbf198410c9769d12ec69d0.png) ### 点击观看[测试视频](https://www.bilibili.com/video/BV1gi4y1P7Qq "测试视频") 那么对于空气净化器的mesh改造就完成了,在接下来的帖子中,我会继续完善这个项目,添加更多的设备到mesh网络中,同时也会制作一个网关来搜集并且上传所有的传感器数据。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
1
)
皮皮学电子
擅长:消费电子 智能硬件
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交