聚豐項目 > 基于英特爾? Edison的Zigbee Gateway設計
因為你需要一個Zigbee的網關,來轉發你手機端發出的控制信號到設備終端,起到控制或者監測等功能的“萬物互聯”功能!
A670521546
分享A670521546
團隊成員
張桂陽 創客
本項目是基于英特爾? Edison設計的一個Zigbee網關。大家都知道,目前的智能家居行業,ZIgbee或者Wifi或者Bluetooth,誰將會是未來協議的統一著和領導者,目前還沒有定論。首先,Wifi因為門檻低(例如人人都有路由器,人人都有手機),貌似是一個合適的協議平臺,但是由于其功耗高,組網功能不是很成熟,所以對于少數(5個以下)設備的互聯是很有優勢的;Bluetooth設備的Mesh協議已經發放,但是由于傳輸距離近,如果中間一個節點被破快,可能影響整個鏈路的穩定性,目前還沒有大批量的使用在智能家居上,多半是一些腕表類的設備,需要電池供電等耗能較低的功耗的設備上;而Zigbee由于其優秀的組網功能和優秀的傳輸距離,以及低功耗,已經成為智能家居行業的主流協議。
很遺憾的是,Zigbee的設備買回來因為不能和家里的路由器或者手機(可連接Wifi或者藍牙)直接相連,所以,入門的門檻一直很高:因為你需要一個Zigbee的網關,來轉發你手機端發出的控制信號到設備終端,起到控制或者監測等功能的“萬物互聯”功能!在這個背景下,我的項目誕生了!
由英特爾? Edison作為Wifi(TCP/IP)數據的接收端,然后通過英特爾? Edison的串口端發送信息到Zigbee模塊上(信息中包含ID和控制信息);同時,Zigbee燈泡(終端)反饋的信息可以通過Zigbee模塊來傳到英特爾? Edison,然后再轉發至TCP/IP上,最終傳輸到手機端。
(Zigbee模塊用的是Silicon Labs的EM357芯片外掛一顆PA,板載的PCB天線組成)
(帶有Zigbee模塊的球泡燈,這個燈泡是不是很有顏值啊!)
WIfi通訊部分:
這部分是參考了anger0925的一篇帖子想到的:(http://bbs.elecfans.com/jishu_919753_1_1.html)
這里我也用了Blynk的庫函數和App端。
這里我新建了一個虛擬按鍵和一個滑動條。
虛擬按鍵用來控制LED燈泡的開關和熄滅;滑動條用來控制LED的亮度。Arduino的代碼參考了BlynkSimpleIntelEdisonWiFi的例子(首先要下載Blynk的庫,然后解壓到Arduino的安裝目錄下面,這個我就不多說了)
下面是Wifi例子的程序:
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <WiFi.h>
#include <BlynkSimpleIntelEdisonWiFi.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "8acd8819a0e8488a978c44539c7249e2";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Allison_newWifi";
char pass[] = "Allison20151001";
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
// Or specify server using one of those commands:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
//Blynk.begin(auth, ssid, pass, server_ip, port);
}
這樣,手機端和Intel Edison的通訊就完成了。
Zigbee模塊通訊部分
其實我的Zigbee模塊上是運行了ZHA V1.2的,也就是說我從串口發送一個命令,可以實現組網,認證和控制等相關功能的。具體的我就不詳述了,因為這個也涉及到公司的秘密,詳細的代碼我也不貼出來了。
我可以簡單講一下ZLL協議的部分(其實和ZHA協議差不多)
每一個主設備或者從設備會有不同的ID,先找到ID,然后給不同的ID發送不同的命令(例如on/off,或者PWM調光等),再加上一個返回碼,包含錯誤代碼等等。
Intel Edison主程序部分
主程序為一個Arduino項目,首先包括和服務器的鏈接部分,然后是虛擬按鍵的事件上報,在handler程序中,對虛擬按鍵的狀態進行讀取,然后通過串口發送數據到Zigbee的模塊,進而控制燈泡。
滑動條的狀態是一樣的:監測滑動條的數據狀態,然后上報,通過串口數據的發送到Zigbee模塊,對Zigbee燈泡調光。
App端的On、off和滑動條來控制燈泡的亮度:
燈泡的效果動畫:
本項目只是利用Intel Edison簡單的實現遠端控制燈泡的開關和亮度的調節。
更多更復雜的應用,譬如燈泡的配對,燈泡是否在線的實時狀態查看,開機自動檢查程序的版本并及時鏈接到服務器更新最新的程序,定時開關燈泡。。。等等。當涉及到多個燈泡的時候,就不能用廣播的形式來發送控制命令(本例子是用廣播的方式來實現控制的),包括多個燈泡同時發送不同的亮度指令時,進程的優先級等優化算法的問題沒有考慮進去。