作者:annysky
概述
智能家居是目前最火热的应用方向,基于对物联网和智能家居的热衷和喜爱,以自己小屋为实际应用模板,将智能家居的设想变为现实状态。本智能家居应用平台基于STM32H7和STM32F4为主芯片进行设计,分为主控平台和网关平台。主控平台以ART-PI开发板为核心,主要任务是查询网关平台的数据信息、查询和设置参数、与云平台进行交互等;网关平台以STM32F407为核心,主要任务是采集数据和分析处理数据、并将主控平台下发的指令进行分析处理后来控制终端,该平台目前采集4路温湿度、1路电量、1路甲醛、1路PM2.5、2路烟雾报警、1路水浸报警、2路门锁状态的数据,输出控制1路加热和散热,通过CAN通讯与主控平台进行联络,并且使用屏进行显示各个状态,还可以使用WLAN与Onenet进行数据交互。后续根据需要在CAN网络上增加设备或模块(智能窗帘、CAN温湿度传感器、智能继电器、门禁系统、摄像头等),能够监测和控制终端产品。
开发环境
硬件:
(1)主控:ART-PI(STM32H750XB),ART-PI-DOCK扩展板(含屏)
(2)网关:WT-19S42(STM32F407VGT6)
(3)RT-Thread版本:RT-Thread V 4.0.3
(4)开发工具及版本:MDK 5.27,CANTest,XCOM V2.0,VGUS2020,DGUS_V759-t5l
RT-Thread使用情况概述
(1)内核部分:调度器,信号量,消息队列,libcpu/BSP。
调度器:创建多个线程来实现不同的工作。
信号量:用来同步线程。
消息队列:用来实现线程之间传递的数据。
libcpu/BSP:外设CAN驱动、UART驱动。
(2)组件部分:CAN框架,UART框架,
CAN框架:使用FDCAN2框架来与网关平台进行数据交互,上层代码可以提高代码的可重用性。
UART框:使用UART框架来与ART-PI-DOCK扩展板进行数据交互。
(3)软件包部分:
cJSON:C语言实现的极简的解析 JSON 格式的软件包。
WebNet 软件包:由RT-Thread 自主研发的,基于 HTTP 协议的 Web 服务器实现,它不仅提供设备与 HTTP Client 通讯的基本功能,而且支持多种模块功能扩展,且资源占用少、可裁剪性强,充分满足开发者对嵌入式设备服务器的功能需求。
Onenet: RT-Thread 针对 OneNET 平台连接做的的适配,通过这个软件包,可以让设备在 RT-Thread 上非常方便的连接 OneNet 平台,完成数据的发送、接收、设备的注册和控制等功能。
硬件框架
- 总方案原理图
智能家居应用平台方案原理图如图1所示,主要由两部分组成(目前状态,后续根据实际应用情况进行扩展),分别是主控平台和网关平台。
图 1 总方案原理图
- 主控平台:
主控平台的硬件分为两部分。一是ART-PI开发板,是由RT-Thread 设计的开源硬件,核心芯片是STM32H750XB,主频最高达480M,支持超低功耗。开发板板载功能众多,标配 TYPE-C 接口,板载 WIFI, 蓝牙配网,还有 LCD(RGB888),SDRAM, TF-Card, USB-OTG等应有尽有。
另外一部分是ART-PI-DOCK扩展板:根据ART-PI开发板的扩展接口自主设计的ART-PI-DOCK扩展板。主要的功能是通讯和人机交互,不参与对外设传感器或者模块的控制和信号采集(除光敏和温湿度)。板子主要包含以下几种功能:
(1)2路CAN通讯
(2)1路485通讯;
(3)1路232通讯;
(4)1路TTL通讯;
(5)1路WLAN网络通讯;
(6)CAN匹配电阻设置;
(7)主机ID设置;
(8)1路温湿度传感器;
(9)1路光敏传感器;
(10)1路锂电池充电管理模块接口;
(11)1路外设5V输入接口;
(12)1路串口屏接口;
(13)1路TFT液晶屏接口。
扩展板涵盖的功能非常全面,包含了目前应该最广泛的几种通讯方式和人机交互方式(可选),可适应不同应用场景。
图 2 ART-PI-DOCK原理框图
- 网关平台
网关核心芯片是STM32F407VGT6,1024k Flash,192KB SRAM,工作频率为168 MHz。基于STM32F407强大的功能,在设计网关平台时,使用了符合IEEE 1588 v2标准要求的以太网MAC10/100,并使用了高达6个USART设备。另外使用了1路CAN,4路串行设备,12路开关量输入,8路开关量输出,各个接口均进行了标识。
图 3 网关平台原理框图
软件框架说明
图4 主控平台软件流程图 图5 网关平台软件流程图
本项目采用的是主控与网关两个平台,主控平台完成对网关平台数据的处理显示,并对网关平台的参数进行配置和监控。网关平台主要是采集和处理数据,并将数据显示在人机界面,按照通讯协议内容将数据及时传输给主控。后续根据使用的效果和体验的舒适性进行适量的调整。
主控平台使用RT-Thread操作系统进行设计,在ART-PI例程的基础上修改,形成主控平台的工作任务。网关平台主要使用的是FreeRTOS操作系统进行设计,完全由个人独立自主进行,经过24小时的老炼测试,系统工作运行正常。
软件模块说明
主控平台的软件模块:
(1)HMI屏:serialtx_thread_entry,主要任务是周期性的将数据按照通讯的协议传输给屏。
(2)FDCAN2接口:can_rx_thread,CAN接收线程,正确收到数据后对数据进行处理,处理完成后封装成结构体hmimodel_info,交给HMI屏线程处理。
网关平台的软件模块:
(1)led_sta_task:检测当前系统的运行状态,每500ms运行一次。
(2)switch_task:检测输入开关量状态,包括烟雾,水浸等;
(3)am2301_task:循环读取4个温湿度传感器的数据,并将数据封装hmi_info结构体和am2301_info结构体中;
(4)pzem_task:发送命令读取电量数据,对接收到的数据进行处理,并将数据封装hmi_info结构体和pzem_info结构体中;
(5)hmi_task:将封装在hmi_info结构体的数据周期性的按照通讯的协议传输给屏。
(6)hmi_recedata_task:对屏下发的命令进行处理。
(7)Net_Connect_task:网络平台连接任务。
(8)Net_Rece_task:网络平台下发数据,并对数据进行处理。
(9)Net_SendData_task:网络平台上传数据。
(10)Hot_HotCtlSet_task:加热和散热控制任务;
(11)DeviceAlarm_task:设备报警任务;
(12)DoorLock_task:检测门锁任务;
(13)ALTER_Info_Task:信息处理任务;
(14)ch2o_task:甲醛数据处理任务;
(15)pm25_task:PM2.5数据处理任务;
(16)can_task:CAN任务,封装数据,按照通讯协议将数据传输给主控平台。
演示效果
视频:
比赛感悟
物联网是时代的潮流,是现在的发展趋势。一直听说RT-Thread操作系统在物联网方面做得非常好,可一直未使用。当在论坛看到本次比赛后,一种强烈的参赛欲望涌上心头,哪怕不给我开发板我也要自己设计开发板来参加比赛,一是为了学习RT-Thread操作系统,二是在自己的家里做一个智能家居系统。
说实话第一次使用RT-Thread操作系统真是无从下手,就像是遇见了心爱的女神,不知道如何开口去表达自己内心的想法。还好RT-Thread在文档方面做得工作很细致,通过 RT-Thread官网上的文档中心,我学习了 多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等,猛然一看这不是和FreeRTOS基本差不多嘛,学习的劲头骤然兴起。
通过例程和对文档的学习,并且基于对RTOS的基本了解,很快进行开始了程序的设计。在设计CAN的时候也是遇到了很多的问题,按照文档叙述和操作步骤,建立了CAN线程,可是始终无数据进行通讯,经过多方查找,最后发现RT-Thread和STM32的CubeMX必须很好的进行配合才行,另外在RT-Thread Setting中要对使用的硬件设备进行配置,否则很多操作无法进行,不能实现自己的功能。俗话说万事开头难,但是当熟悉了以后,很快就能对其他的设备进行操作。
经过对CAN设备的操作,发现RT-Thread的操作系统真是非常好用,简单快捷高效,使用方便,只需要写自己的代码就可以,不需要管底层的配置到底是如何的(如果是新手还是看看寄存器的配置)。
另外就是RT-Thread的软件包非常的好用,只需要下载后就可以使用了。非常不错,不像我使用其他的操作系统,每一步都得自己配置,一个地方错,会造成灾难性的事故,在这里也由衷的感谢开源社区大佬们的贡献。
最后感谢主办方提供了这么好的一个平台,不仅能展示自我,也能学到很多知识,希望有朝一日我也能给开源社区贡献一份自己力量。