2016年7月和8月,英特尔开发人员专区联合电子发烧友网站,推出Intel Edison开发板试用活动,期间得到众多发烧友的热烈反响和积极参与,现分享一部分网友的优秀作品,供大家参考。本文由原作者发表于电子发烧友论坛,原文链接请参见本文末尾相关信息。
0.引言
许多研究机构的数据预测表明,未来的风口会是物联网,IoT“万物互联”的概念从很久就开始了,但是迟迟不能走进寻常百姓的家,不过我相信,随着技术的不断进步和协议的不断发展完善,大家一定能实现万物互联的愿望!
本项目是基于Intel Edison设计的一个Zigbee网关。大家都知道,目前的智能家居行业,ZIgbee或者Wifi或者Bluetooth,谁将会是未来协议的统一着和领导者,目前还没有定论。首先,Wifi因为门槛低(例如人人都有路由器,人人都有手机),貌似是一个合适的协议平台,但是由于其功耗高,组网功能不是很成熟,所以对于少数(5个以下)设备的互联是很有优势的;Bluetooth设备的Mesh协议已经发放,但是由于传输距离近,如果中间一个节点被破快,可能影响整个链路的稳定性,目前还没有大批量的使用在智能家居上,多半是一些腕表类的设备,需要电池供电等耗能较低的功耗的设备上;而Zigbee由于其优秀的组网功能和优秀的传输距离,以及低功耗,已经成为智能家居行业的主流协议。
很遗憾的是,Zigbee的设备买回来因为不能和家里的路由器或者手机(可连接Wifi或者蓝牙)直接相连,所以,入门的门槛一直很高:因为你需要一个Zigbee的网关,来转发你手机端发出的控制信号到设备终端,起到控制或者监测等功能的“万物互联”功能!在这个背景下,我的项目诞生了!
1.项目名称:
基于Intel Edison的Zigbee gateway
2.系统框图说明:

由Intel Edison作为Wifi(TCP/IP)数据的接收端,然后通过Intel Edison的串口端发送信息到Zigbee模块上(信息中包含ID和控制信息);同时,Zigbee灯泡(终端)反馈的信息可以通过Zigbee模块来传到Intel Edison,然后再转发至TCP/IP上,最终传输到手机端。
3.系统硬件描述:
Intel Edison一套;
Arduino开发板扩展版一套;
Zigbee模块一个;
Zigbee灯泡一个.


(Zigbee模块用的是Silicon Labs的EM357芯片外挂一颗PA,板载的PCB天线组成)

(带有Zigbee模块的球泡灯,这个灯泡是不是很有颜值啊!)
4.软件说明:
4.1WIfi通讯部分:
这部分是参考了anger0925的一篇帖子想到的:(http://bbs.elecfans.com/jishu_919753_1_1.html)
这里我也用了Blynk的库函数和App端。
这里我新建了一个虚拟按键和一个滑动条。

虚拟按键用来控制LED灯泡的开关和熄灭;滑动条用来控制LED的亮度。Arduino的代码参考了BlynkSimpleIntelEdisonWiFi的例子(首先要下载Blynk的库,然后解压到Arduino的安装目录下面,这个我就不多说了)
下面是Wifi例子的程序:
| 01 | #define BLYNK_PRINT Serial // Comment this out to disable prints and save space |
| 02 | #include |
| 03 | #include |
| 04 |
| 05 | // You should get Auth Token in the Blynk App. |
| 06 | // Go to the Project Settings (nut icon). |
| 07 | char auth[] = "8acd8819a0e8488a978c44539c7249e2"; |
| 08 |
| 09 | // Your WiFi credentials. |
| 10 | // Set password to "" for open networks. |
| 11 | char ssid[] = "Allison_newWifi"; |
| 12 | char pass[] = "Allison20151001"; |
| 13 |
| 14 | void setup() |
| 15 | { |
| 16 | Serial.begin(9600); |
| 17 | Blynk.begin(auth, ssid, pass); |
| 18 | // Or specify server using one of those commands: |
| 19 | //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442); |
| 20 | //Blynk.begin(auth, ssid, pass, server_ip, port); |
| 21 | } |
这样,手机端和Intel Edison的通讯就完成了。
4.2Zigbee模块通讯部分
其实我的Zigbee模块上是运行了ZHA V1.2的,也就是说我从串口发送一个命令,可以实现组网,认证和控制等相关功能的。具体的我就不详述了,因为这个也涉及到公司的秘密,详细的代码我也不贴出来了。 我可以简单讲一下ZLL协议的部分(其实和ZHA协议差不多)

每一个主设备或者从设备会有不同的ID,先找到ID,然后给不同的ID发送不同的命令(例如on/off,或者PWM调光等),再加上一个返回码,包含错误代码等等。
4.3 Intel Edison主程序部分
主程序为一个Arduino项目,首先包括和服务器的链接部分,然后是虚拟按键的事件上报,在handler程序中,对虚拟按键的状态进行读取,然后通过串口发送数据到Zigbee的模块,进而控制灯泡。
滑动条的状态是一样的:监测滑动条的数据状态,然后上报,通过串口数据的发送到Zigbee模块,对Zigbee灯泡调光。
5.项目效果演示:
App端的On、off和滑动条来控制灯泡的亮度:


灯泡的效果动画:

(LED太亮了,根本看不清调节的效果。。。)
6.项目总结:
本项目只是利用Intel Edison简单的实现远端控制灯泡的开关和亮度的调节。
更多更复杂的应用,譬如灯泡的配对,灯泡是否在线的实时状态查看,开机自动检查程序的版本并及时链接到服务器更新最新的程序,定时开关灯泡。。。等等。当涉及到多个灯泡的时候,就不能用广播的形式来发送控制命令(本例子是用广播的方式来实现控制的),包括多个灯泡同时发送不同的亮度指令时,进程的优先级等优化算法的问题没有考虑进去。
总之,非常感谢电子发烧友的试用机会,也认识到不少朋友,并成功解决了自己在App和云端的一些问题,自己也是从中学到不少。
希望以后能多参加一些这样的活动,给大家带来更多的分享!
作者:电子发烧友网站用户 满嘴谗言,原文链接:http://bbs.elecfans.com/jishu_936048_1_1.html