本篇评测由电子工程世界的优秀评测者“Bruceou”提供。
智能家居控制系统,是以智能家居系统为平台,家居电器及家电设备为主要控制对象,利用综合布线技术、网络通信技术、自动控制系统、音频技术等将家居生活有关的设施进行高效集成,提升家居智能、安全、便利、舒适,为我们的生活带来很的方便性。随着物联网技术的飞速发展,随之而诞生的智能家居成为了物联网技术中的佼佼者。智能家居是随着人们生活水平的提高而逐渐发展起来的朝阳产业。它的出现给人们的生活带来极大的便利;同时,智能家居的出现也带动了一大批经济产业。对于传统的智能家居而言,功能相对单一,且不能将各种家电设备之间进行有效互联;再者传统的智能家居一般采用有线的方式进行组网,组网不便,维修不易。
本文设计了一个基于ZigBee的智能家居控制系统,该系统巧妙地使用了ZigBee的一大优势--自组网功能,完全避免了传统的组网方式。ZigBee技术具有组网简单、方便,且组网容量大等优点。本智能控制系统将ZigBee技术和家庭智能网关技术有效结合,以MYD-YG2UL为智能网关的处理器,在MYD-YG2UL嵌入一个Linux系统,该系统是一个高度集成的网关系统,从而对家庭设备进行本地和远程操作,真正实现了家电设备的智能化。
本项目尝试通过构建一体化、实时控制的智能家居,可用于普通居民家庭、大中小型商场以及工业领域等。下图展示了家居智能设备与终端系统互联情况。MYD-YG2UL作为控制端,与家具智能设备直接连接,并接有传感设备。同时,MYD-YG2UL作为端点与云端相连,为云端提供家具智能设备的运行情况并接收云端控制命令。远程终端设备可通过云端实时查询和控制家居智能设备。
本文所提出的智能家居系统解决方案整体框架如图所示。通过技术论证和架构分析后,决定将系统划分为三个子系统:ZigBee无线传感器监控子系统,网关子系统,监控子系统。ZigBee无线传感器监控子系统通过各个传感器节点采集数据,将采集的数据通过无线网络系统传递给路由节点,再通过路由节点将收集的各个终端节点的数据进行二次传递给协调器,由协调器与智能网关进行数据交换,以完成数据的传递。用户就能在远程进行查家中的各种环境信息,实时掌握家中的最新动态。网关子系统有两大作用,一是连接以太网;二是搭载摄像头采集视频数据,实施远程监控的功能。智能网关为整个智能家居系统的核心所在,协调各个子系统正常运转。
在系统提供在线查看安全监测数据的功能,通过多传感器采集数据,搭建无线局域网,实时同步各个传感器信息,实现全方位的安全监测和报警功能;同时搭建了Web服务器,供用户远程查看监控信息。
ZigBee协议为智能家居环境监测提供了无线自组局域网解决方案。协调器节点可以实时获取到各个终端节点的环境信息,实时传递给用户便于用户查看,路由节点用于终端节点的二次传递,起到信息传递的作用;终端节点用于通过各个传感器收集环境信息,判断采集信息是否达到预警、报警阀值,是否执行相应动作,将用户指定的信息数据通过路由器传递给终端节点,最后在传递给用户,方便用户了解环境信息。
Figure 4-1 Z-Stack 工作流程图
Z-Stack采用操作系统的思想来构建,采用事件轮循机制,而且有一个专门的Timer2 来负责定时。从CC2530工作开始,Timer2 周而复始地计时,有采集、发送、接收、显示等任务要执行时就执行。当各层初始化之后,系统进入低功耗模式,当事件发生时,唤醒系统,开始进入中断处理事件,结束后继续进入低功耗模式。如果同时有几个事件发生,判断优先级,逐次处理事件。这种软件构架可以极大地降级系统的功耗。整个Z-Stack 的主要工作流程,如图所示,大致分为以下6步:
4.1.2 ZigBee建立网络、加入网络流程分析
本设计主要是用ZigBee组建网络系统,建立网络、加入网络为本设计的一个重点,下面分别介绍协调器建立网络、路由器加入网络、终端节点加入网络的组网过程。协调器的建立网络过程如下图所示。
Figure 4-2 协调器建立网络过程
从上图可以发现,网络的建立是从ZDO来实现的,网络建立后,从应用层收到ZDO_ATATE_CHANGE消息,对该消息包含当前节点网络状态。路由器节点加入网络过程如下图所示。路由器加入网络的过程是由ZDO实现的,当路由器加入网络以后,在应用程会收到当前节点的网络状态。
Figure 4-3 路由器加入网络过程
终端节点加入网络如下图所示。由下图可知,终端节点加入网络的过程也是由ZDO实现的,在应用层收到该节点的信息后,即可读出当前的网络状态。
Figure 4-4 终端节点加入网络过程
环境监测的流程图如下所示。
ZigBee各个节点进行初始化化后进行组网,各个终端节点不断采集环境信息,在一切准备妥当之后,协调器就会定时向网关环境信息。ZigBee子系统与网关通过ser2net实现交互,将ZigBee子系统的协调器的串口数据传给网关,网关通过TCP协议与外界交互。智能网关上电后,进行系统初始化,网络连接等,等待协调器发送环境信息,当接收到数据后,通过无线网络将数据发送至云端。云端得到相应的数据后,绘制每个终端的温湿度曲线,也可实时查看当前的环境信息。当然移动端也可获取环境信息,同时也可控制家电设备。另外,为了保证数据传输的可靠性,设计了简单的数据传输协议保证数据的可靠交互。
网关/监控子系统有摄像头、智能网关和移动终端组成。智能网关上电之后完成板级初始化,连接号WiFi,初始化摄像头。当有用户请求视频信息时,智能网关立即获取摄像头数据传给用户。
打开工程
\ZStack-CC2530-2.3.0-1.4.0\Projects\zstack\Utilities\SerialApp\CC2530DB\下的SerialApp.eww。
Figure 5-1 编译固件
编译完后单击下载按钮。
Figure 5-2 编译完成
使用SmartRF Flash Programmer烧写Hex固件到ZigBee节点,将Coordinator.hex和EndDevice 1-4.hex分别下载到协调器和终端。注意:如果没有那么多板子的话,只要下载 Cocodinator.hex和 EndDevice1.hex就可以了。
Figure 5-3 下载方法
一定要给协调器先上电,因为使用的USB转串口,程序自动识别串口。笔者提供免安装和安装版本,在这里使用免安装版本,双击ZigBee.exe。笔者这里这是为自动刷新数据。笔者使用了一个终端,可看到如下图所示的信息。
Figure 5-4 上位机软件
如果想手机也控制则需要有无线路由器,手机打开 wifi 并连接好后,先点网络设置,输入电脑 IP 地址后点连接,手机显示连接成功后,会自动刷新数据。如下图所示。
Figure 5-5 手机网路设置及控制
网关子系统可以使用Yocto或者Openwrt系统,其中有几个关键组件,下面一一讲解。
先更新源:
$sudo apt-get update
安装git工具
$sudo apt-get install git
安装依赖的库文件
$sudo apt-get install gcc g++ binutils patch bzip2 flex bison cmake make autoconf gettext texinfo unzip sharutils ncurses-term zlib1g-dev libncurses5-dev gawk$ sudo apt-get install gawk grep libc-dev libz-dev perl rsync subversion$ sudo apt install build-essential ccache device-tree-compiler gettext gperf intltool libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev libncurses5-dev libssl-dev libreadline-dev libtool wget nano patch pkgconf python3 python3-pyelftools zlib1g-dev swig texinfo ack xxd
米尔科技针对MYD-YG2UL开发板提供两种获取源码的方式,一种是直接从米尔光盘镜像中获取压缩包,另外一种是使用 git获取位于 github 上实时更新的源码进行构建。笔者这里直接从光盘镜像获取源码压缩包并将其拷贝到用户目录并解压。
$ tar -xvf myir-renesas-openwrt.tar.bz2
其解压目录如下所示。
当然也可以从github拉取代码:
$ git clone https://github.com/MYiR-Dev/myir-renesas-openwrt.git -b develop-rzg2ul-openwrt22
编译OpenWrt系统还需要依赖linux内核,因此需要将myir-renesas-linux.tar.bz2 内核源码解压到 openwrt 源码下的 Linux 目录下。
$ tar -xvf myir-renesas-linux.tar.bz2 -C linux/
下载完OpenWrt的源码后,为了使OpenWrt支持更多的软件,需要更新和安装其它源上面的软件。
$./scripts/feeds update -a$./scripts/feeds install -a
一切就绪,接下来就可以开始编译了。在编译OpenWrt系统之前,我们首先要对它进行配置。
$ make defconfig && make menuconfig
我们就可以通过方向键来选择配置选项,通过空格键来选择配置状态。当执行完上命令后,便会弹出如图。
为了让OpenWrt系统能成功的在我们的开发板上运行起来,我们需要做如下配置。
Target Image 配置如下。
Advanced configuration options 配置,使用外部的内核源码。
使能 OpenWrt SDK。
当然还可以使能 Toolchain,用于应用开发。
还可以配置Image configuration ,比如版本信息。
PPP 设置,取消勾选PPP选项,不然会报错。
如果勾选PPP选项,报错信息如下。
然后保存退出,这样就配置完成了。
最后执行make V=99,开始漫长的编译,编译时间由电脑配置决定,由于编译时,需要的软件是从网络上面下载,所以这里要求电脑必须能够上网。V=99意思显示所有信息。
$make V=99
在编译前,可是用以下命令将源码先下载:
$ make -j8 download V=s
第一次编译大概需要4、5个小时,以后再次编译,则分分钟搞定。编译出来的镜像位于bin/targets/renesas/armv8目录下面。
$ls bin/targets/renesas/armv8
其中openwrt-renesas-armv8-myir_rzg2ul-xxx.gz就是我们要的镜像。烧写到板子上面即可启动。这样最简单OpenWrt就可以启动了,不过好多功能都没有,一步一步来,不断深入。这样最简单OpenWrt就可以启动了,其他的功能在此基础上累加就可以了。当然也可使用build_dir/target-aarch64_generic_musl/linux-renesas_armv8目录下的root.ext4文件系统及内核等文件。
ser2net(Serial to Network Proxy)给用户提供了一种网络与串口相互连接的软件,它可以将串口数据通过网络传输到远程设备上。ser2net是一种基于TCP协议的串口服务器,它通过将串口数据转换成网络数据包,实现了串口数据的远程传输。ser2net的工作原理可以分为以下几个步骤:
1.配置串口参数:首先需要对sr2net进行配置,包括串口的波特率、数据位、停止位等参数,以及网络相关的配置,如IP地址、端口号等。
2.建立TCP连接:ser2net在启动后会监听指定的端口,当有客户端请求建立TCP连接时,ser2net会接受连接请求,并与客户端建立起TCP连接。
3.串口数据转发:一旦TCP连接建立成功,ser2net会开始监听串口上的数据。当有数据到达时,ser2net会将数据通过TCP连接发送给客户端。同时,ser2nt会监听客户端发送的数据,并将其转发到串口上。
4.数据处理:ser2nt还支持对数据进行处理和转换。例如,可以对接收到的数据进行校验、解析或加工,然后再将其发送给客户端。
首先进入 OpenWrt 系统源码,然后运行 make menuconfig 命令进行配置。
# make menuconfig
在弹出的配置菜单中,配置如下。Network --><*>ser2net然后选中 ser2net 这个选项,如图所示。
最后退出保存,再编译。
# make V=99
既然是 Wi-Fi 串口, 那么我们就可以理解为它由两部分组成,一部分是网络编程器的 TCP服务器,用于接收客户端通过 Wi-Fi 传来的数据;另一部分就是串口,用于将 TCP 服务器接收到的数据通过串口发送出去。既然是 TCP 服务器,那么我们需要设置它的 IP 地址和端口号。既然是串口,那么我们需要设置它的波特率等参数。那么,这些参数,我们怎么来设置呢?通过修改 ser2net.conf 这个配置文件来实现,位于开发板上的/etc 目录下。将上面编译出来的固件,重新烧写到开发板上面,然后上电启动,进入/etc 目录。
# cd /etc# vi ser2net.conf
只需要在 ser2net.conf这个配置中的最后面添加一行以下内容即可。
33333:raw:0:/dev/ttySC4:115200
最后保存退出,然后重启开发板,即可。接下来就需要修改配置文件。
$ vim ser2net.conf33333:raw:600:/dev/ttySC4:115200 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCT
ser2net工具安装完后,可执行文件放在:/sbin/ser2net,新建配置文件ser2net.conf启动ser2net.。
$ /sbin/ser2net -C ser2net.conf
当然也可直接使用命令。
$ /sbin/ser2net -C "33333600:/dev/ttySC4:115200 NONE 1STOPBIT 8DATABITS XONXOFF LOCAL -RTSCTS"
然后查看ser2net运行状态。
$ ps -elf | grep ser2net
ZigBee的数据就通过ser2net进行数据传输的。如果是OpenWrt直接将ser2net配置进入系统即可。
如果是Yocto系统,需要移植ser2net。
1.下载源码
ser2net的官网为://http://ser2net.sourceforge.net/,在页面中可以找到下载链接。笔者的版本为3.5.1。可以通过页面中的下载链接进行下载,也可以通过下面的命令行进行下载。
wget https://udomain.dl.sourceforge.net/project/ser2net/ser2net/ser2net-3.5.1.tar.gz
2.解压源码
$ tar -xvf ser2net-3.5.1.tar.gz$ cd ser2net-3.5.1/
3.配置
./configure --host=aarch64-poky-linux
“arm-linux”是交叉编译工具的前缀,根据自己的实际情况进行修改。
4.编译并安装
设置环境变量:
$ source /opt/poky/3.1.21/environment-setup-aarch64-poky-linux
编译
$ make
最后将程序下载到开发板,修改用户权限后即可运行。
要支持摄像头,就必须配置上摄像头的驱动,因为是免驱的 USB 摄像头,因此我们必须配置上 UVC 驱动,具体如图所示。首先,我们选中内核模块进行配置。Kernel modules --->Video Support ---><*> kmod-video-core<*> kmod-video-uvc-*- kmod-video-videobuf2
编译。
$make V=99
将固件烧写到板子中,插入USB摄像头,接口查看是否有video0这个设备节点了。
mipg-streamer 就是一款用于视频数据采集、视频数据格式转换、视频数据传输的软件,服务器。因此为了让 openwrt 系统支持该软件,我们需要将它配置进去。Multimedia ---><*> mjpg-streamer
就这样我们就让 openwrt 系统支持无线监控,按前面的方法配置好后,保存退出,然后 make V=99,最后将编译出来的固件烧写到我们的开发板上面。然后启动系统。启动完成,插入我们的摄像头,就会看到/dev/video0 这个设备节点。usb 摄像头接入开发板后提示如下:
如果插上提示不对,请先做上一章,再重新生成固件即可。然后运行 mipg-streamer 软件:
#mjpg_streamer -i "input_uvc.so -d /dev/video0" -o "output_http.so"
其中:-i 表示指定输入,这里输入为:input_uvc.so 即 uvc(usb video),-d 是设备位置,我们摄像头的设备位置在:/dev/video0,-y 用于区分一般摄像头和支持 MJPEG 的摄像头,-o 指定输出,这里输出到 output_ http.so 即 http(可以理解为输出到网页上),-w指定 web 服务器为 www。运行命令后,可以得到如下图的信息:
好的,电脑上必须用火狐浏览器才能看到时视频哦,我们打开网页输入:http://192.168.2.1:8080/?action=stream其中 192.168.2.1 是开发板的 ip 地址,8080 是 http tcp 的端口,action表示某个动作,这里表示:stream。通过这个输入我们就可以从网页完成视频的监控了!
由于此项目中涉及到的知识非常的多,如:
全部0条评论
快来发表一下你的评论吧 !