本篇評測由電子工程世界的優秀評測者“Bruceou”提供。
1、項目背景
智能家居控制系統,是以智能家居系統為平臺,家居電器及家電設備為主要控制對象,利用綜合布線技術、網絡通信技術、自動控制系統、音頻技術等將家居生活有關的設施進行高效集成,提升家居智能、安全、便利、舒適,為我們的生活帶來很的方便性。隨著物聯網技術的飛速發展,隨之而誕生的智能家居成為了物聯網技術中的佼佼者。智能家居是隨著人們生活水平的提高而逐漸發展起來的朝陽產業。它的出現給人們的生活帶來極大的便利;同時,智能家居的出現也帶動了一大批經濟產業。對于傳統的智能家居而言,功能相對單一,且不能將各種家電設備之間進行有效互聯;再者傳統的智能家居一般采用有線的方式進行組網,組網不便,維修不易。
2、作品簡介
本文設計了一個基于ZigBee的智能家居控制系統,該系統巧妙地使用了ZigBee的一大優勢--自組網功能,完全避免了傳統的組網方式。ZigBee技術具有組網簡單、方便,且組網容量大等優點。本智能控制系統將ZigBee技術和家庭智能網關技術有效結合,以MYD-YG2UL為智能網關的處理器,在MYD-YG2UL嵌入一個Linux系統,該系統是一個高度集成的網關系統,從而對家庭設備進行本地和遠程操作,真正實現了家電設備的智能化。
3、系統框圖
本項目嘗試通過構建一體化、實時控制的智能家居,可用于普通居民家庭、大中小型商場以及工業領域等。下圖展示了家居智能設備與終端系統互聯情況。MYD-YG2UL作為控制端,與家具智能設備直接連接,并接有傳感設備。同時,MYD-YG2UL作為端點與云端相連,為云端提供家具智能設備的運行情況并接收云端控制命令。遠程終端設備可通過云端實時查詢和控制家居智能設備。
?
本文所提出的智能家居系統解決方案整體框架如圖所示。通過技術論證和架構分析后,決定將系統劃分為三個子系統:ZigBee無線傳感器監控子系統,網關子系統,監控子系統。ZigBee無線傳感器監控子系統通過各個傳感器節點采集數據,將采集的數據通過無線網絡系統傳遞給路由節點,再通過路由節點將收集的各個終端節點的數據進行二次傳遞給協調器,由協調器與智能網關進行數據交換,以完成數據的傳遞。用戶就能在遠程進行查家中的各種環境信息,實時掌握家中的最新動態。網關子系統有兩大作用,一是連接以太網;二是搭載攝像頭采集視頻數據,實施遠程監控的功能。智能網關為整個智能家居系統的核心所在,協調各個子系統正常運轉。
4、詳細設計
在系統提供在線查看安全監測數據的功能,通過多傳感器采集數據,搭建無線局域網,實時同步各個傳感器信息,實現全方位的安全監測和報警功能;同時搭建了Web服務器,供用戶遠程查看監控信息。
4.1 ZigBee無線傳感監控子系統
ZigBee協議為智能家居環境監測提供了無線自組局域網解決方案。協調器節點可以實時獲取到各個終端節點的環境信息,實時傳遞給用戶便于用戶查看,路由節點用于終端節點的二次傳遞,起到信息傳遞的作用;終端節點用于通過各個傳感器收集環境信息,判斷采集信息是否達到預警、報警閥值,是否執行相應動作,將用戶指定的信息數據通過路由器傳遞給終端節點,最后在傳遞給用戶,方便用戶了解環境信息。
4.1.1 ZigBee工作流程圖
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 終端節點加入網絡過程
4.1.3 ZigBee環境監測流程
環境監測的流程圖如下所示。
?
ZigBee各個節點進行初始化化后進行組網,各個終端節點不斷采集環境信息,在一切準備妥當之后,協調器就會定時向網關環境信息。ZigBee子系統與網關通過ser2net實現交互,將ZigBee子系統的協調器的串口數據傳給網關,網關通過TCP協議與外界交互。智能網關上電后,進行系統初始化,網絡連接等,等待協調器發送環境信息,當接收到數據后,通過無線網絡將數據發送至云端。云端得到相應的數據后,繪制每個終端的溫濕度曲線,也可實時查看當前的環境信息。當然移動端也可獲取環境信息,同時也可控制家電設備。另外,為了保證數據傳輸的可靠性,設計了簡單的數據傳輸協議保證數據的可靠交互。
4.2 網關/監控子系統
網關/監控子系統有攝像頭、智能網關和移動終端組成。智能網關上電之后完成板級初始化,連接號WiFi,初始化攝像頭。當有用戶請求視頻信息時,智能網關立即獲取攝像頭數據傳給用戶。
5、具體部署
5.1 ZigBee無線傳感監控子系統
IAR編譯
打開工程
\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 手機網路設置及控制
5.2 網關/監控子系統
網關子系統可以使用Yocto或者Openwrt系統,其中有幾個關鍵組件,下面一一講解。
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
OpenWrt源碼獲取
米爾科技針對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的源碼后,為了使OpenWrt支持更多的軟件,需要更新和安裝其它源上面的軟件。
$./scripts/feeds update -a$./scripts/feeds install -a
一切就緒,接下來就可以開始編譯了。在編譯OpenWrt系統之前,我們首先要對它進行配置。
$ make defconfig && make menuconfig
我們就可以通過方向鍵來選擇配置選項,通過空格鍵來選擇配置狀態。當執行完上命令后,便會彈出如圖。
為了讓OpenWrt系統能成功的在我們的開發板上運行起來,我們需要做如下配置。
- .選擇CPU型號
Target System (Renesas) ---> - .選擇CPU子型號
Subtarget (RZ/G2X MPU soc evk boards (64 bit) ---> - .選擇具體路由器型號Target Profile (myir rzg2ul) --->
Target Image 配置如下。
Advanced configuration options 配置,使用外部的內核源碼。
使能 OpenWrt SDK。
當然還可以使能 Toolchain,用于應用開發。
還可以配置Image configuration ,比如版本信息。
PPP 設置,取消勾選PPP選項,不然會報錯。
如果勾選PPP選項,報錯信息如下。
然后保存退出,這樣就配置完成了。
編譯OpenWrt
最后執行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的數據傳輸
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還支持對數據進行處理和轉換。例如,可以對接收到的數據進行校驗、解析或加工,然后再將其發送給客戶端。
添加 ser2net 應用程序
首先進入 OpenWrt 系統源碼,然后運行 make menuconfig 命令進行配置。
# make menuconfig
在彈出的配置菜單中,配置如下。Network --><*>ser2net然后選中 ser2net 這個選項,如圖所示。
最后退出保存,再編譯。
# make V=99
配置 Wi-Fi 串口
既然是 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
如果是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
最后將程序下載到開發板,修改用戶權限后即可運行。
基于mipg-streamer視頻監控
配置 OpenWrt 支持 usb 攝像頭
要支持攝像頭,就必須配置上攝像頭的驅動,因為是免驅的 USB 攝像頭,因此我們必須配置上 UVC 驅動,具體如圖所示。首先,我們選中內核模塊進行配置。Kernel modules --->Video Support ---><*> kmod-video-core<*> kmod-video-uvc-*- kmod-video-videobuf2
編譯。
$make V=99
將固件燒寫到板子中,插入USB攝像頭,接口查看是否有video0這個設備節點了。
配置 OpenWrt 支持 mipg-streamer 軟件
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。通過這個輸入我們就可以從網頁完成視頻的監控了!
6、總結
由于此項目中涉及到的知識非常的多,如:
- Linux開發,包括系統移植,驅動開發等
- 電腦端C#程序,包括串口、界面開發等;
- 搭建安卓開發環境,學習安卓界面開發,安卓的socket通訊;
- ZigBee組網實驗,多終端通訊,對于簡單項目在我們上面修改一下就可做成自己的產品;
- 項目中使用的通訊協議是基本Modbus協議修改而來的,結構相同只是命令碼不同,更標準、更完善。
-
智能家居
+關注
關注
1928文章
9553瀏覽量
184936 -
開發板
+關注
關注
25文章
5032瀏覽量
97371 -
家居系統
+關注
關注
0文章
9瀏覽量
7054 -
米爾電子
+關注
關注
0文章
109瀏覽量
449
發布評論請先 登錄
相關推薦
評論