首页 > 代码库 > 智能家居系统-软件协议
智能家居系统-软件协议
3. 家庭网关的软件平台
随着嵌入式电子系统越来越复杂,系统软件的稳定性对系统的稳定运行显得愈发重要,在一些功能复杂的系统中,软件的工作量已经超过硬件开发。此时,嵌入式操作系统的作用凸显出来,操作系统可以把开发人员从无尽的软件编码工作中解放出来,只专注于应用开发,而系统资源的管理交与操作系统来完成,这种方式极大地提高了开发效率,缩短了开发周期。同时,基于操作系统的开发可以极大地提高系统的健壮性,各个任务并发执行,各自独立,即时有一个任务程序跑飞,但并不会造成系统的崩溃。另一方面,现代处理器的功能越来越强大,单纯的前后台系统已经不能显示出处理器的处理能力,甚至限制了芯片功能的发挥,而操作系统可以充分利用处理器的逻辑计算与数据处理能力,充分发挥了32位CPU的多任务潜力,最大化的发挥芯片性能。
嵌入式系统软件的设计有两种方法:使用操作系统和不使用操作系统,简单的小系统的结构如图3-6 所示。这种没有操作系统的系统可以称为前后台系统或超循环系统,应用程序是一个无限循环。此时的用户程序又被称作裸机程序,或被称为“裸跑”。前后台系统一般实时性低,但其结构简单,代码规模小,在低端应用中使用广泛。
图3-6 前后台系统示意图
与前后台系统相对应的是多任务系统,一个任务就是一个无限循环,是一个简单的程序,该程序可以认为系统中只有自己一个任务,CPU完全只为自己服务。系统通过基于优选级或时间片的调度技术,动态地切换各个任务,保证实时性要求。每个任务可能处在以下五个状态之一:休眠态、就绪态、运行态、挂起态与被等待状态[38],任务运行状态切换如图3-7所示。
图3-7 任务的运行状态
本系统中有4个串口通信,并且需要保证数据实时性,如人机交互使用的迪文液晶屏是串口和微控制器交互,若实时性无法保证,就会极大地降低用户体验。另外还有数据共享,多任务之间的通信,任务互斥等问题。这种情况下,如果用传统的前后级系统结构进行编程,就会造成系统高度耦合、结构混乱,并且实时性和可靠性得不到保证,不便于后期维护和扩展,造成实时性差、系统可靠性低、稳定性差的缺点。因此,这里选用了多任务的系统结构,选择的系统是嵌入式的实时操作系统uC/OS-II,按照任务优选级进行调度,它可以使各个任务独立工作,并发执行,系统之间通过信息邮箱、消息队列来完成数据通信和共享,系统结构清晰,维护方便,使得应用程序的设计和扩展变得容易。
本系统使用uC/OS-II操作系统为软件,uC/OS-II是Jean J. Labrosse在1990年前后编写的一个实时操作系统内核,uC/OS-II来源于术语Micro-Controller Operating System,即微控制器操作系统[37]。uC/OS-II具有内核精炼,实时性和可靠性高,占用资源少,移植性好等优点,非常适合嵌入式系统应用。
3.2 系统数据协议设计
3.2.1 家庭网关上层协议设计
家庭网关上层协议是网关与应用层之间的通信协议,是整个控制系统对外的通信通道,通过这一通道,家庭网络和设备接入公共通信网络,实现智能家居的远程网络化控制。家庭网关上层协议数据通信格式如表3.1所示。
表3.1家庭网关上层数据通信协议
帧头 |
长度 |
客户端 编号 |
消息号 |
设备类 |
设备号 |
功能号 |
扩展位 |
校验 |
帧尾 |
7E 9A |
06 |
xx |
01 |
xx |
xx |
xx |
xx |
xx |
5A 3E |
其中各部分解释如下:
帧头 :7E 9A 两个字节的帧头,固定长度;
长度:06,本字节后校验字节前的数据个数;
客户端编号:01:GPRS;02:WIFI平板;03:WIFI手机; 04:xx;
消息号:第几次发消息,以后可扩展为超时机制,现在默认为0x01;
设备类:高四位是0时为家电控制,高四位是F时为环境监测。
01--空调;02--电视;03--红外灯;04--窗帘
F1--温度查询;F2--湿度查询 ;F3--光照查询;F4--xx
设备类数据范围:
0000 0000--0000 1111 家电控制 可控制16种设备
1111 0000--1111 1111 环境参数查询 可进行16种参数查询
设备号:某一类设备的第几个设备,如01为1号电视,或1号机温度;
设备号可表示最多16个从机,低4位表示从机号,当家电控制时,高四位是0;当查询环境监测数据时,网关将向上位机回复数据,高四位扩展为正负符号表示,1111表示负数,0000表示正数;
功能号:家电控制中为实际控制的功能:
环境监测中上位机发送数据时为00,
下位机向上位机回复时为数据的整数部分;
扩展位:家电控制时收发都为0;环境监测下,上位机发送数据时为00,下位机向上位机回复时为数据的小数部分;
校验:字长1BYte的和校验,从长度字节开始到本字节前的数据求和,进位自动溢出。
帧尾:5A 3E两个bytes的帧尾,固定字节。
数据通信的其它约定:
1) GPRS通信用户协议
GPRS第一次连接或者掉线后再次重连,网关向服务器发送初始包6个0x00表示第一次连接:
7E 9A 06 00 00 00 00 00 00 06 5A 3E
GPRS的IP地址是运营商为用户分配的临时IP,一旦一定时间内该IP没有数据传输,运营商就会收回该IP。为了系统GPRS连接不掉线,如果超过2分钟没有数据传输,网关就向服务器发送心跳包保证自己永久在线,心跳数据为6个0xFF:
7E 9A 06 FF FF FF FF FF FF 06 5A 3E
2)家电控制模式下,上位机发送的两条控制指令时间间隔大于2s。
3)环境监测模式下,WiFi传输命令时两条指令时间间隔大于1s,GPRS传输命令时两条指令时间间隔大于2s。
3.2.2 家电控制系统协议设计
家电网关通过nRF模块与学习型万能红外遥控器(即万遥)连接,实现功能是接收用户的命令,然后无线方式转发到空中,万遥另一端无线接收到命令并做出相应响应。目前的设计中,有两种家电控制方式,方式一是RF模块通信,方式二是xBee模块通信。
(1) 基于nRF24L01的学习型红外遥控器
基于nRF24L01模块的家电控制系统使用RF无线模块实现数据传输,数据协议格式见表3.3。
表3.2 网关数据通信协议
帧头 |
长度 |
客户端 |
消息号 |
设备类 |
设备号 |
功能号 |
扩展位 |
校验和 |
帧尾 |
帧头 |
0X7E |
0X9A |
0X06 |
0X01 |
0X01 |
0X01 |
0X01 |
0X01 |
0X00 |
0X0B |
0X5A |
万遥协议是网关协议的一部分,目前支持的家电设备与万遥控制器映射关系:
表3.3 基于nRF24L01的万遥通信协议
设备类 |
设备号 |
功能号 |
家电动作 |
万遥命令 |
|||
01 |
01 |
01 |
空调 开 |
03 |
01 |
02 |
01 |
01 |
01 |
02 |
空调 关 |
03 |
01 |
02 |
02 |
01 |
01 |
03 |
温度 加 |
03 |
01 |
02 |
03 |
01 |
01 |
04 |
温度 减 |
03 |
01 |
02 |
04 |
01 |
01 |
05 |
NULL |
03 |
01 |
02 |
05 |
01 |
01 |
06 |
NULL |
03 |
01 |
02 |
06 |
01 |
01 |
07 |
NULL |
03 |
01 |
02 |
07 |
01 |
01 |
08 |
NULL |
03 |
01 |
02 |
08 |
02 |
01 |
01 |
电视 开 |
03 |
03 |
02 |
09 |
02 |
01 |
02 |
电视 关 |
03 |
03 |
02 |
0A |
02 |
01 |
03 |
电视 CH+ |
03 |
03 |
02 |
0B |
02 |
01 |
04 |
电视 CH- |
03 |
03 |
02 |
0C |
02 |
01 |
05 |
电视VOL+ |
03 |
03 |
02 |
0D |
02 |
01 |
06 |
电视VOL- |
03 |
03 |
02 |
0E |
02 |
01 |
07 |
静音 |
03 |
03 |
02 |
0F |
02 |
01 |
08 |
NULL |
03 |
03 |
02 |
10 |
03 |
01 |
01 |
电灯 开 |
03 |
05 |
02 |
11 |
03 |
01 |
02 |
电灯 关 |
03 |
05 |
02 |
12 |
03 |
01 |
03 |
电灯 亮度+ |
03 |
05 |
02 |
13 |
03 |
01 |
04 |
电灯 亮度- |
03 |
05 |
02 |
14 |
03 |
01 |
05 |
NULL |
03 |
05 |
02 |
15 |
03 |
01 |
06 |
NULL |
03 |
05 |
02 |
16 |
03 |
01 |
07 |
NULL |
03 |
05 |
02 |
17 |
03 |
01 |
08 |
NULL |
03 |
05 |
02 |
18 |
(2)基于xBee的学习型红外遥控器
基于xBee模块的家电控制系统使用xBee完成数据传输,数据格式遵从xBee的API数据编码规则。
这里只分析用户协议,下面的数据说明只包括xBee协议的数据部分(DATA PAYLOAD),格式见表3.4。
负载数据(Data Payload): |
||||
设备码 |
功能码 |
控制码 |
||
设备类 (Device) |
设备号 (Device Num) |
功能类 (Function) |
功能号 (Fun Num) |
控制码 (Cmd Num) |
其中:
Device :设备类型,固化格式,01表示电视,02表示空调....
Devic_Num :设备号,表示某类型的第几台家电,从01开始添加。
如设备码:01 01——电视1,02 02——电视2 。
Function :功能类型,固定格式,01表示开关量,02表示加减量。
Fun_Num :功能号,表示某功能类型的第几组功能。
如电视功能码:02 01——加/减频道,02 02——加/减音量。
Cmd_Num :控制码,高四位决定万遥工作方式,低四位是控制参数。
控制命令具体分析如下:
D7D6D5D4=1111 红外学习;D7D6D5D4=0000 红外发射;
D3D2D1D0 = 0001 0010 0100 1000
对应状态为: 关(OFF) 减(-) 加(+) 开(ON)
目前支持的家电设备与协议映射关系见表3.5所示。
表3.5 遥控器命令与家电映射关系
设备码 |
功能码 |
控制码 |
数据包 |
||||||
设备类 (Device) |
设备号 (Device Num) |
功能类 (Function) |
功能号 (Fun Num) |
控制码 (Cmd Num) FFxx/00xx |
负载数据 Data Payload |
||||
电视 |
0x01 |
01
02
03
...... |
开关量 |
0x01 |
开关 |
01 ... |
开 |
0x01 |
0x01 XX 0x01 XX 0x01 |
关 |
0x08 |
0x01 XX 0x01 XX 0x08 |
|||||||
加减量 |
0x02 |
频道+\- |
01
|
加 |
0x02 |
0x01 XX 0x02 XX 0x02 |
|||
减 |
0x04 |
0x01 XX 0x02 XX 0x04 |
|||||||
音量+\- |
02 ... |
加 |
0x02 |
0x01 XX 0x02 XX 0x02 |
|||||
减 |
0x04 |
0x01 XX 0x02 XX 0x04 |
|||||||
空调 |
0x02 |
01
02
...... |
开关量 |
0x01 |
开关 |
01 |
开 |
0x01 |
0x02 XX 0x01 XX 0x01 |
关 |
0x08 |
0x02 XX 0x01 XX 0x08 |
|||||||
加减量 |
0x02 |
温度+/- |
01 ... |
加 |
0x02 |
0x02 XX 0x02 XX 0x02 |
|||
减 |
0x04 |
0x02 XX 0x02 XX 0x04 |
|||||||
电灯 |
0x03 |
01 02 ...... |
开关量 |
0x01 |
开关 |
01 ... |
开 |
0x01 |
0x03 XX 0x01 XX 0x01 |
关 |
0x08 |
0x03 XX 0x01 XX 0x08 |
|||||||
可调红外灯 |
0x04 |
01
02 ...... |
开关量 |
0x01 |
开关 |
01 ... |
开 |
0x01 |
0x04 XX 0x01 XX 0x01 |
关 |
0x08 |
0x04 XX 0x01 XX 0x08 |
|||||||
加减量 |
0x02 |
亮度+/- |
01 ... |
加 |
0x02 |
0x04 XX 0x02 XX 0x02 |
|||
减 |
0x04 |
0x04 XX 0x02 XX 0x04 |
窗帘 |
0x05 |
01 ...... |
开关量 |
0x01 |
开关 |
01 ... |
开 |
0x01 |
0x05 XX 0x01 XX 0x01 |
关 |
0x08 |
0x05 XX 0x01 XX 0x08 |
|||||||
... |
|
|
|
|
|
|
|
|
|
查询 请求 |
FE |
00 |
|
FE |
|
00 |
|
00 |
0xFE 00 0xFE 00 0x00 |
恢复 出厂 |
FE |
00 |
|
FE |
|
00 |
|
FF |
0xFE 00 0xFE 00 0xFF |
当出现错误帧或者传输过程中出现丢帧情况,万遥无法正确解析命令,则向主机(Coordinator)发送错误报告。当万遥接收命令无错误并且操作成功,则回复操作成功标志。万遥向主机回复的帧如表3.6所示。
表3.6 万遥回复命令数据协议
帧号 |
含义 |
可能原因 |
编码(Hex) |
0 |
无错误 |
工作正常 |
5A 3E 4F 4B 00 |
1 |
非系统协议帧 |
符合XBEE协议但不符合万遥数据协议 |
5A 3E 45 52 01 |
2 |
数据帧格式错误 |
1)数据长度不是5字节; 2)API类型错误 |
5A 3E 45 52 02 |
3 |
命令码类型错误 |
第五字节高四位不是0或F |
5A 3E 45 52 03 |
4 |
存储记录查询报错 |
没有成功学习过红外码,存储空,无记录 |
5A 3E 45 52 04 |
5 |
添加新红外命令,学习编码执行失败 |
1)系统等待红外码超时; 2)未正常接收红外码 |
5A 3E 45 52 05 |
6 |
覆盖原编码,重新学习红外编码失败 |
1)系统等待红外码超时; 2)未正常接收红外码 |
5A 3E 45 52 06 |
7 |
要求发射的红外码空 |
还没有学习过该命令编码 |
5A 3E 45 52 07 |
注:5A 3E——回复码标志,45 52——错误码标志(ER),4F 4B——操作成功标志(OK),第五字节——错误号,当红外学习和发射操作成功时,第五字节是该命令存储的地址号。
3.3.3 环境监测系统协议设计
环境监测系统是本智能家居系统的子系统,是物联网的数据感知层,实现数据获取和无线传输功能。在系统结构中,家庭网关定时发送查询请求,传感器节点向网关返回数据,网关保证数据的实时性,用户应用层的命令直接由网关响应。每一个监测节点监测两个参数,数据格式参照第二节。目前支持的设备的协议如表3.7所示。
表3.7环境监测系统节点设备协议格式
操作 |
设备类 |
设备号 |
功能号 |
扩展位 |
实际控制信号 |
发 |
F1 |
01 |
00 |
00 |
查询温度--1号机 |
收 |
F1 |
01 |
0F |
08 |
回复温度15.08℃ |
发 |
F2 |
01 |
00 |
00 |
查询湿度--1号机 |
收 |
F2 |
01 |
0B |
0E |
回复温度11.14 |
发 |
F1 |
02 |
00 |
00 |
查询温度--2号机 |
收 |
F1 |
F2 |
07 |
08 |
回复温度 |
发 |
F2 |
02 |
00 |
00 |
查询湿度--2号机 |
收 |
F2 |
02 |
0B |
0E |
回复温度11.14℃ |
发 |
F1 |
03 |
00 |
00 |
查询温度--3号机 |
收 |
F1 |
03 |
0F |
08 |
回复温度15.08℃ |
发 |
F3 |
03 |
00 |
00 |
查询光强--3号机 |
收 |
F3 |
03 |
0C |
13 |
回复xxxx |
发 |
F1 |
01 |
00 |
00 |
查询温度--1号机 |
收 |
F1 |
01 |
0F |
08 |
回复温度15.08℃ |
发 |
F2 |
01 |
00 |
00 |
查询湿度--1号机 |
收 |
F2 |
01 |
0B |
0E |
回复温度11.14℃ |
注:光强测量采用BH1750FVI传感器,对应光输入范围1--65535LX,单位是LX(照度)。在F3命令下,回复的数据是16位的,占2个字节,只有整数,无小数部分。
交互实例:
上位机发:7e 9a 06 02 01 F1 02 00 00 FC 5a 3e
说明:2号WiFi设备请求2号机温度查询
下位机回:7E 9A 06 02 01 F1 02 12 03 11 5A 3E
说明:2号WiFi设备回复2号机温度+18.03℃
智能家居系统-软件协议