Intel物联网开发者专区
直播中

叶安

9年用户 42经验值
私信 关注
[讨论]

【Intel Edison试用体验】+【最终项目】Zigbee Gateway网管项目

本帖最后由 满嘴谗言 于 2016-9-5 10:01 编辑

          基于Intel Edison的Zigbee Gateway设计
0.引言
许多研究机构的数据预测表明,未来的风口会是物联网,IoT“万物互联”的概念从很久就开始了,但是迟迟不能走进寻常百姓的家,不过我相信,随着技术的不断进步和协议的不断发展完善,大家一定能实现万物互联的愿望!
    本项目是基于Intel Edison设计的一个Zigbee网关。大家都知道,目前的智能家居行业,ZIgbee或者Wifi或者Bluetooth,谁将会是未来协议的统一着和领导者,目前还没有定论。首先,Wifi因为门槛低(例如人人都有路由器,人人都有手机),貌似是一个合适的协议平台,但是由于其功耗高,组网功能不是很成熟,所以对于少数(5个以下)设备的互联是很有优势的;Bluetooth设备的Mesh协议已经发放,但是由于传输距离近,如果中间一个节点被破快,可能影响整个链路的稳定性,目前还没有大批量的使用在智能家居上,多半是一些腕表类的设备,需要电池供电等耗能较低的功耗的设备上;而Zigbee由于其优秀的组网功能和优秀的传输距离,以及低功耗,已经成为智能家居行业的主流协议。
    很遗憾的是,Zigbee的设备买回来因为不能和家里的路由器或者手机(可连接Wifi或者蓝牙)直接相连,所以,入门的门槛一直很高:因为你需要一个Zigbee的网关,来转发你手机端发出的控制信号到设备终端,起到控制或者监测等功能的“万物互联”功能!在这个背景下,我的项目诞生了!
1.项目名称:基于Intel Edison的Zigbee gateway
2.系统框图说明
123.png
由Intel Edison作为Wifi(TCP/IP)数据的接收端,然后通过Intel Edison的串口端发送信息到Zigbee模块上(信息中包含ID和控制信息);同时,Zigbee灯泡(终端)反馈的信息可以通过Zigbee模块来传到Intel Edison,然后再转发至TCP/IP上,最终传输到手机端。
3.系统硬件描述:
Intel Edison一套;
Arduino开发板扩展版一套;
Zigbee模块一个;
Zigbee灯泡一个.

3.jpg
1.jpg
(Zigbee模块用的是Silicon Labs的EM357芯片外挂一颗PA,板载的PCB天线组成)
2.jpg
(带有Zigbee模块的球泡灯,这个灯泡是不是很有颜值啊!)
3.软件说明
3.1WIfi通讯部分
这部分是参考了anger0925的一篇帖子想到的:(https://bbs.elecfans.com/jishu_919753_1_1.html
这里我也用了Blynk的库函数和App端。
这里我新建了一个虚拟按键和一个滑动条。
1.png
虚拟按键用来控制LED灯泡的开关和熄灭;滑动条用来控制LED的亮度。Arduino的代码参考了BlynkSimpleIntelEdisonWiFi的例子(首先要下载Blynk的库,然后解压到Arduino的安装目录下面,这个我就不多说了)
下面是Wifi例子的程序:
  1. #define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
  2. #include
  3. #include

  4. // You should get Auth Token in the Blynk App.
  5. // Go to the Project Settings (nut icon).
  6. char auth[] = "8acd8819a0e8488a978c44539c7249e2";

  7. // Your WiFi credentials.
  8. // Set password to "" for open networks.
  9. char ssid[] = "Allison_newWifi";
  10. char pass[] = "Allison20151001";

  11. void setup()
  12. {
  13.   Serial.begin(9600);
  14.   Blynk.begin(auth, ssid, pass);
  15.   // Or specify server using one of those commands:
  16.   //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
  17.   //Blynk.begin(auth, ssid, pass, server_ip, port);
  18. }

这样,手机端和Intel Edison的通讯就完成了。

3.2Zigbee模块通讯部分
其实我的Zigbee模块上是运行了ZHA V1.2的,也就是说我从串口发送一个命令,可以实现组网,认证和控制等相关功能的。具体的我就不详述了,因为这个也涉及到公司的秘密,详细的代码我也不贴出来了。
我可以简单讲一下ZLL协议的部分(其实和ZHA协议差不多)
1.png
2.png
每一个主设备或者从设备会有不同的ID,先找到ID,然后给不同的ID发送不同的命令(例如on/off,或者PWM调光等),再加上一个返回码,包含错误代码等等。


3.3 Intel Edison主程序部分
主程序为一个Arduino项目,首先包括和服务器的链接部分,然后是虚拟按键的事件上报,在handler程序中,对虚拟按键的状态进行读取,然后通过串口发送数据到Zigbee的模块,进而控制灯泡。
滑动条的状态是一样的:监测滑动条的数据状态,然后上报,通过串口数据的发送到Zigbee模块,对Zigbee灯泡调光。

4.项目效果演示:
App端的On、off和滑动条来控制灯泡的亮度:
1.png
2.png
灯泡的效果动画:
手机QQ视频_201_clip.gif
(LED太亮了,根本看不清调节的效果。。。)
5.项目总结:
本项目只是利用Intel Edison简单的实现远端控制灯泡的开关和亮度的调节。
更多更复杂的应用,譬如灯泡的配对,灯泡是否在线的实时状态查看,开机自动检查程序的版本并及时链接到服务器更新最新的程序,定时开关灯泡。。。等等。当涉及到多个灯泡的时候,就不能用广播的形式来发送控制命令(本例子是用广播的方式来实现控制的),包括多个灯泡同时发送不同的亮度指令时,进程的优先级等优化算法的问题没有考虑进去。
总之,非常感谢电子发烧友的试用机会,也认识到不少朋友,并成功解决了自己在App和云端的一些问题,自己也是从中学到不少。

希望以后能多参加一些这样的活动,给大家带来更多的分享!

回帖(4)

那些年儿ing

2016-9-5 09:28:28
哎呦  还不错哦
举报

叶安

2016-9-5 09:47:46
引用: 那些年儿ing 发表于 2016-9-5 09:28
哎呦  还不错哦

谢谢鼓励!
举报

sushu

2016-9-13 21:05:15
不错哦,
举报

叶安

2016-9-14 17:47:02
引用: sushu 发表于 2016-9-13 21:05
不错哦,

谢谢版主的肯定!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分