一种基于Thread的IPv6智能家居解决方案
2018-09-07,,,
,,,
(华中科技大学 自动化学院,武汉 430074)
引 言
随着科学技术水平的不断提高,人们越来越追求高质量、快节奏、便捷舒适的生活方式,智能家居产业由此兴起,成为未来家居领域发展的必然趋势。无线通信技术是智能家居的关键技术,目前,智能家居领域应用的无线技术种类繁多,主流包括WiFi、蓝牙、ZigBee、Z-Wave等。而随着物联网技术的进一步发展,越来越多的无线通信标准被应用于智能家居,以满足复杂的实际需求。
Thread是一种新兴的无线网络通信标准。2014年,Google旗下智能家居公司Nest主导创立了Thread联盟(Thread Group)。2015年7月,该联盟正式发布Thread 1.0标准,Thread的设计主要面向家庭网络,具备低功耗、易于使用、安全可靠等优势。目前,Silicon Labs、Nordic等公司已经推出Thread网络解决方案,Nordic nRF52840多协议SoC已通过Thread认证。在未来几年,基于Thread的无线通信产品和应用将会得到迅速的发展和普及。
1 Thread简介
1.1 主要技术特点
Thread将WPAN技术和IPv6技术紧密结合,是一种基于IPv6的无线mesh网络标准,协议栈架构如图1所示。
图1 Thread协议栈架构
Thread属于网络层协议,基于IEEE 802.15.4的物理层和MAC层,以支持其低功耗特性。物理介质有限的传输能力决定了Thread目前只适用于传输速率不高的场合,最高速率为250 kbps。通过6LoWPAN适配层支持IPv6网络层,使得Thread设备能够像互联网上任何一个联网设备一样,直接通过IP寻址实现主机间通信。
Thread网络中有多种设备类型,主要包括边界路由器(Border Router, BR)、路由器(Router)以及终端设备(End Device)。
Thread的网络拓扑结构如图2所示。
图2 Thread网络拓扑图
边界路由器(BR)是一种具有连接Thread网络和外部网络(通常是互联网)功能的特殊路由器,负责在内外网络之间路由和转发IPv6包。
路由器(Router)负责在Thread网络内部路由转发IPv6包,是mesh网络中的关键设备。通常,创建网络的第一个路由器被指定为Leader。Leader具备一定网络管理和决策能力,如响应路由器请求、管理路由器ID分配等。路由器一般不支持低功耗模式,始终处于正常工作状态,因此会消耗更多的电量。
网络中大多数的设备都将作为终端设备(End Device)运行。由于它们没有路由转发能力,启动之后必须寻找一个最合适的路由器作为自己的父节点(Parents),始终通过父节点路由转发数据包。为了降低功耗,终端设备大多数时间处于睡眠状态,从而大大延长电池寿命。
还有一类本身具备路由能力的设备,但由于某些条件限制,如网络中路由器数量达到了上限(32个),暂时作为终端设备运行的特殊节点 (Router-Eligible End Devices, REED)。在必要时,它们能主动向Leader发出申请,转换为路由器设备。
Thread的技术特点突出,尤其在操作便捷性、网络鲁棒性、安全性,以及支持IPv6的优势,更加适用于智能家居、智能楼宇等应用场景。
此外,Thread淡化了与其他无线标准的对立性,更具开放性、包容性。Thread没有定义应用层,侧重于能让广泛物联网解决方案互通的网络层设计,可为不同的应用层协议协同工作提供网络层支持。开放性和包容性将帮助Thread快速发展壮大,提升影响力。
1.2 OpenThread简介
OpenThread是Thread协议目前唯一的开源实现。2016年,由谷歌Nest主导,在Github发起OpenThread项目,代码完全开源。采用C/C++语言开发,为开发者提供独立于硬件和操作系统的API接口,协议栈架构如图3所示。
图3 OpenThread协议栈
OpenThread提供平台抽象层,大大降低了移植难度。项目组建议移植平台至少应该具备的硬件资源包括IEEE 802.15.4 2.4 GHz射频模组、精度可达毫秒级的定时器、非易失性存储器(以保存网络配置信息),以及真随机数产生器(True Random Number Generator,TRNG)。此外,官方还提供了Thread网络解决方案的参考设计,以及OpenThread边界路由器(OpenThread Border Router,OTBR)的实现。
2 基于IPv6的智能家居混合网络解决方案
2.1 系统架构
在智能家居的应用场景中,网络设备的功能多样,不同的设备对网络传输速率和通信质量有着不同的要求。实际上,不可能用单一的网络技术就实现所有设备的互联,多种无线技术相互融合、优劣互补,才能满足复杂多样的设备联网需求。
WiFi是当今使用最广的一种无线通信技术,传输距离长、速率高,但对于嵌入式设备来说功耗太大、组网能力太弱,更适用于PC、智能手机等设备的联网。Thread网络传输速率有限,更适合用于数量较多,但传输数据量小、传输速率低的传感设备以及部分家电的联网。因此,本文结合WiFi、Thread等多种IP网络技术,实现WiFi网络、Thread网络和互联网基于IPv6层互联的智能家居混合网络。网络系统架构如图4所示。
图4 基于IPv6的智能家居混合网络系统架构
网络系统的核心是一个多协议栈家庭路由器,负责连接家庭网络与远程互联网。本文基于树莓派3代B型(Raspberry Pi 3B)和OpenWRT(LEDE分支)路由器操作系统实现家庭路由器。树莓派3B板载了一个无线网卡和多个USB接口,但只有一个以太网口,可通过USB口扩展更多的以太网接口。本文使用的是CE-LINK的USB2.0转百兆网卡,该产品集成RTL8152芯片,接口类型为RJ45网口。LEDE软件源中已有该芯片的驱动程序,通过opkg命令安装相应驱动即可使用。
安装OpenWRT之后,还需要对路由器做相应的配置。如图4所示,配置以太网口0作为外网口,将该网口的地址配置为从互联网服务提供商(Internet Service Provider, ISP)获得的全球唯一IPv6单播地址(Global Unicast Address, GUA),即可访问IPv6公网;配置无线网卡为无线AP建立WiFi网络,对通信速率要求较高的网络设备(如手机、PC),可通过WiFi连入家庭网络;以太网口1连接Thread路由器,通过它连接Thread网络和家庭网络。无线网口和以太网口1都属于路由器内网口,可通过创建一个虚拟网桥相互连接,使用DHCPv6方式为家庭路由器的各个内网口自动配置IPv6地址。
Thread路由器具备路由转发功能和IPv6地址配置机制,连入家庭网络之后,Thread网络中的所有节点都能够获取到IPv6全球唯一的单播地址(GUA),或者是IPv6本地唯一单播地址(Unique Local IPv6 Unicast Address, ULA),ULA地址只能用于本地局域网通信,具有固定前缀FD00::/8,功能类似于IPv4局域网地址192.168.x.x。而使用GUA地址,Thread网络设备可以直接和互联网中的IPv6主机进行双向通信。
由于Thread网络中IPv6地址配置方式为无状态地址自动配置(Stateless Address Auto-Configuration, SLAAC),Thread节点利用一个可用的64位地址前缀和64位的接口ID,可自动生成IPv6地址,无需用户配置。假如Thread路由器从家庭路由器中分配得到的GUA地址为2000:1234:7c34:4::1/62,它将检测到该地址(前缀位数必须少于64位),并为Thread网络继续划分出64位的子网前缀,如2000:1234:7c34:5::1/64,并将该前缀在Thread网络中广播。Thread网络设备即可利用该地址前缀自动生成一个GUA地址。
2.2 Thread网络解决方案
2.2.1 硬件设计
Thread网络解决方案的硬件总体架构如图5所示。
图5 Thread网络解决方案硬件架构图
Thread节点和网络协处理器(Network Co-Processer, NCP)都采用主控外接射频模块的双芯片方案。主控芯片采用NXP的K64芯片(或是其他支持ARM Mbed OS的硬件平台),通过SPI串行总线连接MRF24J40MA射频集成模块,由其内置的MRF24J40射频芯片提供物理层和MAC层支持。
MRF24J40MA是符合2.4 GHz IEEE标准802.15.4的集成模块,集成晶振、内置稳压器、匹配电路和PCB天线。该模块基于Microchip的MRF24J40 IEEE 802.15.4 2.4 GHz 射频收发芯片,通过四线制SPI接口与主控制器通信。采用该模块可免去大量的RF、天线设计,以及合规性测试工作,上手简单,可大大缩短产品开发时间。MRF24J40MA射频模块如图6所示。
图6 MRF24J40MA射频模块
边界路由器同样采样树莓派3B搭建原型,通过USB接口连接网络协处理器,通过板载以太网口连接家庭路由器,无需额外扩展网络接口。
2.2.2 软件设计
Thread节点和网络协处理器的软件设计基于ARM Mbed软件开发平台,应用其开源嵌入式实时操作系统CMSIS-RTOS(即ARM Mbed OS),移植OpenThread协议栈和MRF24J40MA射频模块驱动程序。
ARM Mbed OS是ARM公司专为基于ARM Cortex-M处理器所设计的开源嵌入式实时操作系统,可运行在所有Cortex-M系列的产品上,配置灵活、可裁剪,最小内存需求低至8 KB。选用Mbed OS的最主要原因是其具有强大的跨平台特性以及强大的开发者生态。Mbed OS目前支持60多家经过认证的硬件方案,包括100多种开发板和400多个元件库,涵盖了市面上主流的芯片厂商;Mbed开发者社区拥有数量庞大的注册用户,通过社区、Github等开源平台共享源代码。借助Mbed OS开发者可以利用社区资源快速地开发产品原型,并可直接运行在不同的硬件平台上,避免了因更换硬件导致大量的移植和开发工作。
除了包含RTOS,Mbed OS还集成了物联网设备开发所需要的各种组件,涵盖设备安全、设备管理、通信、端云互联的功能组件,如各类网络协议、文件系统、事件管理框架,帮助开发者从嵌入式终端到云端再到用户端快速构建IoT应用。
本文主要做了两方面工作:首先移植MRF24J40MA射频驱动,以及OpenThread协议栈,适配Mbed OS;其次为OpenThread提供封装程度更高、抽象性更好的C++类及其接口(OpenThread Interface和UDP Socket),最大程度屏蔽底层细节,方便开发者进行二次开发。完成OpenThread协议栈移植后,ARM Mbed OS架构如图7所示。
图7 OpenThread+ARM Mbed OS架构图
Thread路由器由网络协处理器(NCP)和边界路由器(BR)组成。网络协处理器负责在Thread网络和边界路由器之间传递数据,提供Thread网络连接性。网络协处理器与Thread节点具有完全相同的硬件结构,可由OpenThread的宏定义配置其节点类型是作为网络协处理器还是Thread节点运行。边界路由器(BR)可基于Nordic官方提供的边界路由器(Nordic Thread Border Router, NBR)解决方案进行二次开发。NBR的软件架构示意图如图8所示。
图8 边界路由器软件架构示意图
NBR是基于OpenWRT开发的路由器系统,内置LuCI配置面板,以及nat64、dns、wpantund等网络组件,可通过WiFi、Ethernet连接到家庭路由器,并提供DHCP和DHCPv6服务,是互联网与Thread网络之间IPv6数据包中转站。wpantund是NBR的关键组件,由OpenThread项目组开发,它集成了spinel、Dbus、wpanctl等功能组件,为NCP提供一个虚拟的本地IPv6网络接口。spinel组件实现了spinel协议,用于和网络协处理器基于串口或者SPI通信;Dbus的作用是连接spinel和边界路由器中的其他组件;wpanctl提供了对wpantund的各种命令行控制指令,涵盖组网、配置、查看网络参数和网络状态等功能,可帮助开发者快速配置和调试Thread网络。
结 语
黄祥才(硕士研究生),研究方向为嵌入式系统、物联网、人工智能;张志伟(硕士研究生),研究方向为嵌入式系统、IPv6网络;彭意兵(硕士研究生),研究方向为嵌入式系统安全;何顶新(副教授),研究方向为计算机控制技术、嵌入式系统等。