首页 > 代码库 > 智能家居系统-软件协议

智能家居系统-软件协议

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——电视102 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字节;

2API类型错误

5A 3E 45 52 02

3

命令码类型错误

第五字节高四位不是0F

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 

说明:2WiFi设备请求2号机温度查询

下位机回:7E 9A 06 02 01 F1 02 12 03 11 5A 3E 

说明:2WiFi设备回复2号机温度+18.03

智能家居系统-软件协议