基于Linux的物联网网关及智能终端节点设计与实现

2024-04-06 13:05杨丹肖娟
电脑知识与技术 2024年3期
关键词:低功耗智能家居

杨丹 肖娟

关键词:智能家居;Linux网关;BLE Mesh;低功耗

中图分类号:TP393 文献标识码:A

文章编号:1009-3044(2024)03-0094-03

0 引言

在智能家居系统中,通常需要实现将一个家庭内的各房间、各位置的传感器和执行器连接上云平台。如果单个设备都直接与互联网连接,将会增大硬件成本、功耗和配置难度[1]。因此家庭内一般需要一个智能家居网关,将所有的传感器汇聚到网关上统一上报云平台,云平台对执行器的操作也通过网关分发到家庭中。

本文研究设计了一套智能家居网关系统,包括一个Linux智能网关,支持BLE组网功能,再配合具有BLE功能的终端节点,实现应用到家庭中的整套智能方案。

1 设计方案

智能家居平台硬件包括智能家居网关和终端节点。它们组成BLE Mesh网络,系统拓扑结构图如图1 所示。

2 网关的设计

网关采用基于Linux的嵌入式操作系统,CPU使用NXP i.MX 6ULL应用处理器,NXP i.MX 6ULL应用处理器是一款高性能、超高效器件,采用单个ARM Cortex?-A7内核,运行速度高达528MHz。网关硬件上主要包括有线网络、无线网络和BLE模组,软件主要包括系统配置软件、传感器和执行器通信软件和与云平台通信的软件。

2.1 网关硬件设计

网关的硬件采用I.MX6U-MINI开发板加上若干个外接子模块构成。本文网关采用开发板通过串口模块接口与BLE 5.0模组相连接,通过SDIO WiFi接口与RTL8189网卡相连接,网关搭配了512MB DDR3L内存和8GB EMMC,可以轻松应付智能家居场景下的BLE Mesh数据采集和分发,云平台的实时访问等功能。

2.2 网关软件设计

网关软件基于Linux嵌入式C语言开发,采用多进程、多线程的开发模式,共开发了网关主软件和网关与云平台网络通信软件两个进程。进程间使用消息队列进行通信,消息队列本质上是位于内核空间的链表,链表的每个节点都是一條消息。每一条消息都有自己的消息类型,消息类型用整数来表示,其中数字 1 表示类型为 1 的消息,数字2、3、4 类似。读取消息类型为 0 消息代表按顺序读取队列类所有消息[2]。

1) 网关主软件

网关主软件包括网关配置程序和与BLE组网通信程序,使用多线程的方式实现,流程图如图2所示。程序启动后判断是否进入配置模式,如果网关从未配置过,将自动进入配置模式,如果网关已配置过,则在开机过程中通过长按按键进入配置模式,否则将自动进入运行模式运行。

配置模式下分别启动一个TCP服务器和UDP服务器,PC端网关配置软件将通过搜索的方式搜索该网关,然后通过TCP协议连接网关。主要功能是利用PC端网关配置软件给网关绑定传感器等终端节点,并且与云平台上的项目信息和终端节点实现同步。

正常运行模式下,需要启动BLE网络通信,并开启与云平台网络通信程序。网关一方面实时读取BLE网络上的传感器数据,通过消息队列的方法转发给网络通信程序,进而上报给云平台。另一方面从消息队列中接收云平台通过网络通信程序下发的控制指令,再通过BLE网络专用指令直接控制相应终端节点。

网关主软件主要涉及使用Linux实现TCP、UDP 的服务器软件,按键解析,Json通信格式解析,UART 串口通信,文件操作,多线程程序设计以及进程间消息队列通信等技术。

2) 网关与云平台网络通信软件

网关与云平台网络通信软件主要目的是创建一个TCP客户端,实现网关访问云平台。该软件包含上报数据和接收数据两个线程,分别处理传感器数据的实时转发上报和云平台的控制指令接收。流程图如图3所示。

首先通信软件需要利用云平台上的设备信息和密钥进行鉴权,鉴权成功后才可以上报数据和接收数据,并且要不断地发送心跳包维持连接。如果程序从消息队列中获取到了BLE网络请求上报数据的消息,则将该消息打包成Json格式上报给云平台,如果上报数据因网络原因失败,则需要尝试重新连接云平台并进行鉴权。

在接收线程中,需要不断地读取云平台下发的信息,并判断信息属性是心跳消息、连接响应、上报数据响应还是命令请求,做出不同的策略。如果是命令请求,则将命令解析后发送到消息队列,经过网关主软件解析后转发到BLE网络控制相应设备。

网络通信软件主要涉及使用Linux实现TCP的客户端软件、Json通信格式解析、文件操作、多线程程序设计以及进程间消息队列通信等技术。在TCP通信中,要注意保持连接的灵活性和确保网络中断后的TCP通信重新连接。

3 终端节点的设计

终端节点的功能是采集各类传感器的信息上报和接收网关的控制命令操作执行器,每个终端节点都需要搭载BLE模组。终端节点采用自制PCB板的方案,考虑到成本及通用性,将传感器和执行器做成一块通用PCB,根据不同的焊接方案选择不同的功能。终端节点主要采用STM32+JDY-24M BLE模组方案,STM32负责采集传感器数据和配置BLE模组,BLE模组主要负责与网关和其他终端节点BLE组网通信。STM32F030微控制器集成了以48 MHz频率工作的高性能Arm Cortex-M0内核及多种外设。STM32F030微控制器适合设计低功耗应用。JDY-24M 超级蓝牙支持主从透传、iBeacon、BLE 探针、iBeacon 探测、MESH 组网,组网数量最大支持65 280个设备,组网通信速度支持50ms发16字节数据,单模块支持路由节点与终端节点,JDY-24M 组网只需要配置好组网 NETID、短路地址后即可自动组网[3-4]。

3.1 终端节点硬件设计

终端节点的硬件设计以主控MCU STM32和BLE 模组为主,外接电源模块、传感器模块、继电器模块组成一个终端节点。

1) 主控模块设计

主控模块采用STM32F030F4P6最小系统板,引出了5.0V/3.3V的供电引脚、编程下载用的SWD串行调试接口、ADC功能采集引脚、USARTs通信接口以及普通IO口[5]。终端节点需要有模拟传感器数据采集、数字式传感器采集、开关式传感器采集的功能和串口通信的功能,故这些引脚的引出满足设计需要。

2) BLE模块设计

JDY-24M BLE模组与主控MCU之间采用UART 接口连接,通过标准AT指令通信。BLE模组具备无线控制输出IO功能,可直接经过驱动电路对继电器施加控制,进而控制电灯、电风扇等执行设备的开启和关闭。

3) 电源模块设计

为方便终端节点的电源接入,共设计了三路电源,分别是两节干电池3.0V供电、220V交流电供电以及5V适配器供电,便于终端节点的各种场景下使用。

220交流电采用整流模块输出5.0V和3.3V两路电源,干电池通过PW5100-5.0V芯片实现升压输出5.0V,此外STM32最小系统板具备5.0V转3.3V供电功能。

4) 传感器模块设计

传感器模块是各种传感器的统一接口,此接口支持5V/3.3V两路电源、多路ADC采样、I2C通信、SPI通信和普通IO接口等多种通信方式,能够实现一个接口可以支持温湿度、光照强度、可燃气体、人体红外、火焰等多种传感器的数据采集,传感器子采集设备采用江西信息应用职业技术学院已经具备的北京新大陆教育公司提供的各种子设备。

5) 继电器模块设计

继电器模块是将弱电控制信号控制大电流通断的自动开关装置。本项目中是用来控制电灯、电风扇以及插座等执行设备的打开和关闭,所以继电器选用220V的交流继电器。因继电器的控制端需要使用5V 电压驱动,但是BLE模组或STM32芯片的IO输出为3.3V,所以需要用三极管放大电路增大驱动能力再连接到继电器。

3.2 终端节点软件设计

終端节点软件是基于C语言的STM32单片机开发,采用KEIL集成开发工具完成软件开发。软件基于STM32标准库,采用模块化设计,主要包括主程序、定时器程序、按键程序、传感器采样程序及BLE模组通信程序等。

1) 主程序

主程序主要完成基本外设的初始化,包括GPIO 口、UART、ADC模块等。主程序还负责终端节点配置模式和正常模式的切换,在配置模式下,程序接收网关的配置指令,将终端节点加入网关组成的BLE网络下;在正常模式下,程序不断采集当前传感器的数据,并通过BLE网络发送给网关。

2) 定时器程序

MCU的硬件定时器定时范围广,定时精准,但是硬件定时器的数量往往满足不了项目的定时需求。本项目中LED、按键检测、数据采集都需要用到定时器,软件定时器只需要利用一个硬件定时器就可以完成多个定时需求,并且将定时器新增、删除和暂停做成统一接口,可以方便地管理多个任务的定时需求。

采用结构体数组来存储每个软件定时器的信息,包括句柄、时间、状态、参数、重复类型、执行时效和回调函数。硬件定时器中断函数负责对所有激活的定时器进行计时,根据执行时效判定是否需要到中断函数内执行回调函数,对于时间要求精准并执行快速的回调函数可以设置在中断函数中立即响应,而对于时间要求不是很严格或者执行实际较长的回调函数可以设置在主程序中响应。

3) 按键程序

按键程序用于处理按键长短按,实现终端节点的正常模式和配置模式切换。按键通过GPIO口实现,每100ms检测一次按键状态。为消除按键抖动,连续两次检测到按键按下才判定为有效按键,即按键持续时间大于100ms,如果持续时间小于1 000ms释放,则触发为短按;如果持续时间大于1 000ms,则在相应时间触发长按,本设计按键达到2 000ms触发长按。

4) 传感器采样程序

节点搭配的传感器类型有很多种,程序要同时支持ADC采样、数字采样和开关量采样。如果是光照、火焰、空气质量及可燃气体等模拟式传感器,则调用ADC转换函数读取以10mV为单位的电压值;如果是人体红外等开关式传感器,则读取IO口状态得到布尔值;如果数字式温湿度传感器,则调用SHT1x程序读取当前温湿度数据。最终再根据传感器类型将数据打包发送给网关。

5) BLE模组通信程序

BLE模组使用UART接口和MCU连接,使用AT 指令进行通信,在设备上电后,需要根据正常模式或配置模式下对模组分别初始化。配置模式下,将BLE 网络的NETID设置为配置网络0001,正常模式下,将BLE网络的NETID设置为网关BLE的地址后四位,此网络号在第一次配置时保存在Flash中。

BLE 模组在每次采集完一次数据后都会调用BLE数据发送函数将数据发送给网关,通过MESH网络发送数据指令格式为“AT+MESH”后接具体数据,UART数据打包形式如图4所示,共15个字节。

4 智能家居平台调试

根据上述网关和终端节点的设计方案,分别完成网关、终端传感器、终端执行器三部分的制作,如图5 所示,经过调试,通过Android App可以实现传感器数据的采集和执行设备的控制。

5 结束语

本文主要设计了一套用于智能家居的智能网关和终端节点设备。智能网关主要功能是访问云平台以及与终端节点无线连接,是整个智能家居系统的中枢,终端节点主要负责采集传感数据和控制电器开关。系统采用Linux操作系统实现网关的设计,可以快速地实现BLE和以太网之间通信协议转换,同时终端节点采用BLE实现组网,其低功耗的特性可以实现系统低碳、环保的运行。

【通联编辑:谢媛媛】

猜你喜欢
低功耗智能家居
一种高速低功耗比较器设计
基于PLC的智能家居控制系统研究
低功耗NB-IoT透传模块的设计
一种用于6LoWPAN的低功耗路由协议
智能家居发展或将实现弯道超车
关于智能家居真正需求的探讨
智能家居的发展趋势分析
智能家居更贴心
基于LD3320的智能家居控制
ADI推出三款超低功耗多通道ADC