【RT-Thread作品秀】智能路灯
作者:杨满意
概述 目前路灯大多采用定时功能,但由于四季交替变化,日出日落时间不一样,如果采用统一时间定时开关灯,将会浪费多余的电力资源,如果通过无线网控制和通过日出日落时间灯多种方式控制,将会灵活控制路灯,从而达到节能功能,是一个相当实用的设计
开发环境
硬件:art-pi
RT-Thread版本:RT-Thread V 4.0.3
开发工具及版本:MDK 5.27
RT-Thread使用情况概述内核部分:调度器,信号量,消息队列。
调度器:创建多个线程来实现不同的工作。
信号量:用来同步线程。
消息队列:用来实现线程之间传递的数据。
组件部分:SPI框架, Sensor框架,SAL 套接字抽象层
SPI框架:使用 SPI 框架来驱动温度传感器,上层代码可以提高代码的可重用性。
Sensor框架:为上层提供统一的操作接口,提高上层代码的可重用性;简化底层驱动开发的难度,只要实现简单的 ops(operations: 操作命令) 就可以将传感器注册到系统上。
SAL 套接字抽象层:组件完成对不同网络协议栈或网络实现接口的抽象并对上层提供一组标准的 BSD Socket API,这样开发者只需要关心和使用网络应用层提供的网络接口,而无需关心底层具体网络协议栈类型和实现,极大的提高了系统的兼容性,方便开发者完成协议栈的适配和网络相关的开发
软件包部分:
Webclient:提供设备与 HTTP Server 的通讯的基本功能。
pahomqtt,:本软件包是在 Eclipse paho-mqtt 源码包的基础上设计的一套 MQTT 客户端程序。
Onenet:是 RT-Thread 针对 OneNET 平台连接做的的适配,通过这个软件包,可以让设备在 RT-Thread 上非常方便的连接 OneNet 平台,完成数据的发送、接收、设备的注册和控制等功能。
cJSON:C语言实现的极简的解析 JSON 格式的软件包。
at_device:是由 RT-Thread AT 组件针对不同 AT 设备的移植文件和示例代码组成,目前支持的 AT 设备有:ESP8266、M26、MC20、RW007、MW31、SIM800C 以及 SIM76XX 系列设备等。
wifi:是一个 RT-Thread 的软件包,该软件包提供了 wifi 模块的驱动
硬件框架
软件框架说明
软件框架说明,首先初始化硬件,通过wifi连接路由器,连接onenet服务器,然后判断工作模式是否为手动模式,如果是手动模式,通过onenet服务器下发开关灯指令,如果是自动模式,则通过事先保存的经纬度数据,通过算法,计算当地如初日落时间,然后转化为时间戳,,然后根据实时时钟的时间转化的时间戳进行对比,判断是否开关灯
软件模块说明
onenet_mqtt_init_entry:初始化 onenet_mqtt, mqtt初始化成功之后,释放信号量告知onenet_upload_data_thread线程可以上传数据了,这里会做循环处理,周期性的检查onenet_mqtt的状态,如果已经断线,就进行再次连接。
onenet_upload_data_entry: take信号量的方式,获取到信号量之后,通过邮箱获取到的内存池首地址去拿到数据,然后就可以发数据到 onenet云平台和PC端上位机。
led _entry:读取实时时钟,转化为时间戳,判断工作模式,判断是否开关灯
演示效果
代码地址在附件。
比赛感悟
纸上得来终觉浅,绝知此事要躬行。陆游的这首诗,完美的诠释了我在这次比赛中的收获。
首次接触 RT-Thread, 之前接触的是freertos,多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等大致相同,值得赞赏的是rtthread官方生态真的好,各种插件,都已经集成好,自己写的代码越来越少,更容易上手。
感谢主办方给我这次机会接触这么优秀的平台,为以后的开发者提供更大的便利,提供更多的选择,