聚丰项目 > 基于英特尔® Edison的Zigbee Gateway设计

基于英特尔® Edison的Zigbee Gateway设计

因为你需要一个Zigbee的网关,来转发你手机端发出的控制信号到设备终端,起到控制或者监测等功能的“万物互联”功能!

A670521546 A670521546

分享
5 喜欢这个项目
团队介绍

A670521546 A670521546

团队成员

张桂阳 创客

分享
项目简介
因为你需要一个Zigbee的网关,来转发你手机端发出的控制信号到设备终端,起到控制或者监测等功能的“万物互联”功能!
硬件说明

本项目是基于英特尔® Edison设计的一个Zigbee网关。大家都知道,目前的智能家居行业,ZIgbee或者Wifi或者Bluetooth,谁将会是未来协议的统一着和领导者,目前还没有定论。首先,Wifi因为门槛低(例如人人都有路由器,人人都有手机),貌似是一个合适的协议平台,但是由于其功耗高,组网功能不是很成熟,所以对于少数(5个以下)设备的互联是很有优势的;Bluetooth设备的Mesh协议已经发放,但是由于传输距离近,如果中间一个节点被破快,可能影响整个链路的稳定性,目前还没有大批量的使用在智能家居上,多半是一些腕表类的设备,需要电池供电等耗能较低的功耗的设备上;而Zigbee由于其优秀的组网功能和优秀的传输距离,以及低功耗,已经成为智能家居行业的主流协议。
很遗憾的是,Zigbee的设备买回来因为不能和家里的路由器或者手机(可连接Wifi或者蓝牙)直接相连,所以,入门的门槛一直很高:因为你需要一个Zigbee的网关,来转发你手机端发出的控制信号到设备终端,起到控制或者监测等功能的“万物互联”功能!在这个背景下,我的项目诞生了!

100123n28hqnt22o7ht7ft.png.thumb.jpg

英特尔® 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简单的实现远端控制灯泡的开关和亮度的调节。
更多更复杂的应用,譬如灯泡的配对,灯泡是否在线的实时状态查看,开机自动检查程序的版本并及时链接到服务器更新最新的程序,定时开关灯泡。。。等等。当涉及到多个灯泡的时候,就不能用广播的形式来发送控制命令(本例子是用广播的方式来实现控制的),包括多个灯泡同时发送不同的亮度指令时,进程的优先级等优化算法的问题没有考虑进去。

评论区(0 )