前言
千呼万唤始出来,智能家居 DIY 教程连载第二篇终于登场了!本文将重点给大家介绍如何将消息队列与邮箱运用到实际项目中去。一起来看看吧~
DIY
回顾上期:
1、智能家居DIY连载教程(1)——如何正确使用 Sensor 框架
1. 第二周任务回顾
我们来回顾一下第二周安排的任务:
1、通过 ENV 工具获取 nrf24l01软件包,并加载到 MDK 工程里面
2、了解多线程间的通信,了解 IPC 中邮箱和消息队列的特性,并能灵活使用,实现 ds18b20 线程与 nrf24l01 线程之间的数据通信
3、修改 nrf24l01 软件包,实现多点通信功能
上述任务的重点,是要学习去灵活运用邮箱和消息队列。
2. 软件包的获取
软件包可以通过 env 工具十分方便的获取到,并且加载到工程里面去,env 工具的下载链接可以在官网找到,env 下载链接:https://www.rt-thread.org/page/download.html (请复制至外部浏览器打开)env 的使用方法可以查看这里:https://www.rt-thread.org/document/site/tutorial/env-video/进行学习。
值得注意的是,在 env 中获取软件包是需要依赖于 git 的,可以去 git 官网获得下载,git 官网
本周任务中,我们需要用到 nrf24l01 的软件包,只需要在 menuconfig 中选中 nrf24l01 即可:
1RT-Thread online packages --->
2 peripheral libraries and drivers --->
3 [*] nRF24L01: Single-chip 2.4GHz wireless transceiver. --->
选中之后需要将该软件包获取到本地来,在 env 中输入 pkgs --update
命令回车即可。我们在工程目录的 packages
目录下,可以看到,nrf24l01 软件包被获取到本地来了,如下图所示:
不过该软件包现在仅仅只是获取到本地,尚未加载到 MDK 工程当中来。我们在 env 中输入 scons --target=mdk5
命令回车即可,执行完该命令之后打开 MDK5 工程,发现 nrf24l01 软件包成功加载到工程里面去了,如下图所示:
3. IPC 之邮箱实战指南
3.1 为什么要使用邮箱
我们需要通过 nrf24l01 无线模块进行数据发送与接收,定义:通过 nrf24l01 发送数据的是发送节点,通过 nrf24l01 接收数据的是接收节点。(本 DIY 整个项目需要至少用到两个发送节点。)
在发送节点创建一个线程,用于无线发送数据。具体的,nrf24l01 的软件包提供了哪些 API,是如何通过这些 API 实现发送功能的,可以参考该软件包的 samples,路径为:...\packages\nrf24l01-latest\examples。
还记得第一周的任务吗?在 main 函数中创建了一个线程,用于获取 ds18b20 温度数据的。同理的,我们在 main 函数中再创建一个线程,该线程是用来通过 nrf24l01 发送数据的,线程入口函数是 nrf24l01_send_entry
:
????滑查看全部
1int main(void)
2{
3 rt_thread_t ds18b20_thread, nrf24l01_thread;
4
5 ds18b20_thread = rt_thread_create("18b20tem", read_temp_entry, "temp_ds18b20",
6 640, RT_THREAD_PRIORITY_MAX / 2, 20);
7