郭泽龙,罗 帆,周金星
(太原工业学院,山西 太原 030008)
物联网是通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网连接起来进行信息交换和通讯,以实现智能化识别、定位、跟踪、监控和管理的一种网络。
我国高度关注、重视物联网的研究。自温总理提出“感知中国”以来,物联网被正式列为国家五大新兴战略性产业之一,写入“政府工作报告”。随着物联网技术的升温,家庭物联网技术也开始受到各方面的重视,国内的一些著名厂商也推出了自己的家庭物联网系统:如海尔的U-home平台、美的的智慧家居系统、TCL的Mi-Home等。
现在的物联网系统多为各大企业自己搭建,协议互不相同,其实现复杂,成本较高。本文从客户端、控制主机和智能电器终端三个方面描述了搭建一个家庭物联网控制系统的设计思路,该系统具有结构简单、控制方便的特点。
本文设计的家庭物联网控制系统主要包括以下三个部分:①物联网控制主机,本系统中以友善之臂Mini2440为控制主机,通过路由器链接到局域网,使用户可以通过客户端访问该控制主机,并对其发出命令;②智能电器终端,本系统中采用LED调光调色系统作为智能家居控制的终端,通过串口通信和控制主机相连;③客户端,利用客户端用户可以远程登录控制主机,对主机发送控制命令。
家庭物联网控制系统结构框图如图1所示。整个家庭物联网控制系统的运行过程如下:
(1) 用户通过客户端来登录局域网控制主机,与控制主机交换数据,同时发送控制要求,并接收控制主机返回的智能电器的运行状态数据。
(2) 物联网控制主机通过RJ45线与路由器相连,进而接入局域网,当收到客户端的控制请求后进行判断,并将控制命令发送给相应的智能电器终端。
(3) 智能电器终端和控制主机通过串口进行通讯,接收控制主机的控制要求,判断要求类型并做出相应的状态改变,同时,将自己的运行状态通过串口返回到控制主机。
图1 家庭物联网控制系统结构框图
由以上的控制过程可以看出,用户只需要通过客户端就可以与智能电器终端连接,向其发出控制要求,改变智能电器的运行状态,操作非常简单,显示出系统结构简单、控制方便的特点。
家庭物联网控制系统主要由控制主机和智能电器构成,控制主机采用运行Linux操作系统的Mini2440开发板,其自带RJ45网络接口和一块彩色的LCD屏幕,可以显示系统的运行状态和家电的运行状态;智能电器终端由STM32控制,客户通过客户端对其颜色和亮度进行控制,达到系统的设计要求。
控制主机的主要作用是接收客户端的控制要求并发送给智能电器,同时将智能电器的运行状态数据返回给客户端,将客户端和智能电器终端连接在一起。这就要求控制主机要合理地分配资源,接收客户端的请求同时返回运行状态,实现接入局域网和连接智能电器的功能。
2.1.1 将控制主机接入局域网
(1) 用RJ45连接线将控制主机和路由器连接起来。
(2) 配置控制主机的IP,配置IP时可以通过ifconfig命令,后面接eth0的IP和子网掩码来修改主机的IP。但是这样修改的IP在主机重启后会被修改,所以需要将主机的IP设置为静态IP。配设置方式为:首先找到网卡的配置文件eth0-setting,然后编辑文件将IP改为192.168.1.10,再重启eth0,IP就不会被修改。
2.1.2 主机和智能电器连接
(1) 智能电器由STM32控制板来控制,所以将STM32控制板的串口通信接口和控制主机的串口通信接口相连来达到数据交换的目的。
(2) Mini2440包括3个串口,即UART0、UART1和UART2,这里使用的是UART1。将串口和控制主机连接好后,通过客户端输入指令“echo“50 30 150”> /dev/ttySAC1 ”就可以将期望的RGB值发送到串口,再由STM32的串口接收数据,并通过“cat /dev/ttySAC1”指令来读取STM32返回的智能电器的运行状态。
控制主机的运行流程如图2所示,首先接入局域网,等待客户端发送控制命令,如果接收到控制命令,则将控制命令发送给智能电器,同时读取电器的状态值,将其发送到客户端或者LCD屏幕上来显示智能电器的运行状态。
智能电器终端的功能是接收控制主机的控制命令,改变自身状态,同时将自己的运行状态返回给控制主机。智能电器终端以LED调光调色灯板来作为例子,该终端由STM32控制板、RGB灯板和LED灯的驱动模块组成。RGB灯板由18个5050单颗0.5 W的灯珠组成,采用6串3并连接;LED灯的驱动模块由PWM-RGB调光模块将18 V~20 V的电压转换成12 V~20 V的PWM信号来控制RGB灯的颜色。5050灯珠里面放有红、绿、蓝三个芯片,使用IC来控制闪烁的顺序以及频率。这样一个灯能发出红、绿、蓝、红绿、红蓝、绿蓝、红绿蓝(就是白光)一共七种颜色,还可以通过控制流过不同颜色芯片的电流大小来控制某颜色的亮度,从而使混合出来的光颜色变化。从理论上来说,采用这种控制方法一盏灯可以发出无穷多种颜色。
首先配置STM32控制板,将STM32的3个PWM输出端口和LED灯驱动模块的PWM输入口连接,将驱动模块的PWM输出接LED灯的RGB输入,达到通过STM32的PWM输出信号来控制灯的颜色亮度的目的。
STM32控制的实现代码如下:
int main ()
{
Stm32_Clock_Init(336,8,2,7);//设置时钟,168MHz
delay_init(168);//延时初始化
uart_init(84,9600);//串口初始化为115200
LED_Init();//初始化与LED连接的硬件接口
LED_Init();//初始化LED
KEY_Init(); //按键初始化
while(1){
if(USART_RX_STA&0x8000)
{
LED1=~LED1;//LED1关闭
len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
if((a[0]>=0&&a[0]<=255) && (a[1]>=0&&a[1]<=255) && (a[2]>=0&&a[2]<=255))
{
temp1 = a[0]*1.0/256*9999;
temp2 = a[1]*1.0/256*9999;
temp3 = a[2]*1.0/256*9999;
TIM3->CCR2 = temp1; //输出PWM 到 R
TIM3->CCR3 = temp2; //输出PWM 到 G
TIM3->CCR4 = temp3; //输出PWM 到 B
printf("OK R:%d G:%d B:%dn",a[0],a[1],a[2]);while((USART1->SR&0X40)==0);//返回RGB值
}
USART_RX_STA=0;
}
}
}
智能电器终端由STM32控制板串口和控制主机相连接,运行流程为:接收主机的控制命令,判断命令,进行状态改变,返回状态值。智能电器终端运行流程如图3所示。
图2控制主机运行流程图3智能电器终端运行流程图
运行时,用户通过客户端登录控制主机(这里用Xshell来模拟客户登录),打开Xshell,新建会话,IP为192.168.1.10,用户名为root,登录主机。
为控制方便,写了脚本语言来输入控制值,脚本代码如下:
echo "$1 $2 $3 "> /dev/ttySAC1 //接收输入的3个值,发送到UART1
cat /dev/ttySAC1 //读取UART1的返回值
LED灯的实际运行画面如图4所示。如图4所示,输入RGB值“50,30,150”,则主机将RGB值发送到串口,STM32通过串口接收该RGB值,将灯的实际RGB改为“50,30,150”,同时返回灯的运行状态。
图4 LED灯的实际运行画面
LED灯的实际效果如图5所示。
图5 LED灯的实际效果
本文采用基于Linux操作系统的Mini2440开发板,给出了在 Linux 环境下通过串口通信将智能控制终端和客户端连接起来的方法,实现了用户远程控制智能终端的功能。如何在此系统框架的基础上添加更多的智能设备将是进一步的研究工作。