极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 190050|回复: 179

DIY智能家居和乐联网开放平台对接(arduino+zigbee+openwrt)

  [复制链接]
发表于 2013-6-12 01:22:45 | 显示全部楼层 |阅读模式
本帖最后由 chzhewl 于 2015-1-26 17:20 编辑

打造自己的智能家居有木有!!!
请先看三个视频(如无法正常播放请单击链接查看):
DIY智能家居v2.0操作演示
http://v.youku.com/v_show/id_XNTY5MzcwNzMy.html
乐联网手机APP和微信操作演示
http://v.youku.com/v_show/id_XNTY5NjUwODQ4.html

乐联网管理平台操作演示,注意下自定义微信命令
http://v.youku.com/v_show/id_XNTY5NjI2OTky.html


大家好,我叫无用在这里我主要介绍下DIY智能家居系统开发经历和同乐为物联管理平台的对接方案。
注:无用技术有限,文中难免有错误,如有错误,欢迎拍砖^-^
查看乐联网已经对接上的设备
先上图:
这是我在乐联网上公开的家里温度、空气质量和湿度传感器等实时信息曲线图,是不是很酷^-^
可以点这里查看 http://www.lewei50.com/home/gatewaystatus/586

通过手机微信绑定个人账户后查看室内传感器实时信息
通过微信命令打开/关闭家里的设备
通过手机端APP应用查看传感器实时信息
登录乐联网官方网站查看传感器实时信息
http://www.lewei50.com/dev/docList
数据对比分析
通过网页控制家里的设备

看到这些心动的有木有!!!我对乐联网简直是一见钟情啊,当然还有很多好玩的等着我们一起去探索,
点这里查看更多信息http://www.lewei50.com/dev/docList
看到这里很多朋友可能开始好奇了,怎么实现的这些功能呢?下面一步一步来解开这些疑问。
当然乐联网已经为爱好者提供了非常快捷的解决方案,使用它你可以快速搭建传感器数据上传和设备控制,
点这里查看更多信息 http://www.lewei50.com/dev
不过无用有自己的一套解决方案,在遇到乐联网之前已经在用啦,碰到乐联网后毫无压力的与乐联网开放平台对接到了一块。
上架构图:
是不是有点智能家居的味道了,呵呵。
1版的诞生(v1.0)
故事的开始,2012年北京的冬天(在北京的兄弟们都知道这年冬天特别的冷),我家暖气出现了故障,整个冬天停止供暖-_-。后来我和我老婆实在坚持不住了,去家电城买了个电暖气,这才缓解受冻之苦。但是问题又来了,每天下班到家在打开暖气等到屋里暖起来还是要等好长一段时间的。 有一次突然灵机一动,为何不自己动手做一套简单的系统呢:在下班回家的路上用手机提前把电暖气打开,让它先暖着屋里,提前打开饮水机,回到家就能喝上暖暖的开水^_^, 提前打开热水器,回到家就可洗个热水澡,在加个温度传感器方便查看电暖气的效果,Oh Yea 说干就干,于是DIY智能家居的第1个版本(v1.0)就这样诞生了。上设备图:
Db120 路由器,刷Openwrt 系统(之前拿来上网用的49RMB)
433无线模块(25RMB)
每个终端设备一个arduino pro mini 占用空间特小(18RMB)
继电器模块(5RMB)
DS18B20温度传感器(4.5RMB)
开关电源模块 5v 700ma 稳定性很强(5RMB)
路由器改造:
将433模块接到路由器的串口上
饮水机改造:
因为是放到饮水机内部使用,就不做美化了,呵呵。
插排改造:
美化一下,呵呵。
使用db120 openwrt 作为家庭网关,
使用433 做为无线网络模块,由于433 只支持半双式,两个模块同时发数据会造成数据混乱,一个模块发送数据其它模块都能收到,所以使用了请求回应的方式,openwrt 上的433模块作为逻辑上的主模块,数据请求由它发起并带上一个地址,接收方收到数据时判断这个地直址如果是自己就作出回应,整个网络中不会使用重复地址,为了不会使数据混乱openwrt 上的程序负责保证同时只有一个请求通过433 发送出去。
继电器、温度传感器和433无线使用一个arduino 放到饮水机内部( 虽然这样做饮水机打开时会影响正常测温,但是当时为了节省开支只好这样了),另一个继电器、433无线和arduino都塞进一个插排里面,这样做不仅可以控制电暖气,而且还可以控制其它电器。
串口指令结构如下:
0x11 0x22 [] + 设备地址 +  功能标识 + 附加数据
Arduino 中的代码片段:
Openwrt 程序使用c++编写,主要负责提供中间层的作用,它不处理业务,通过433无线模块同其它arduino 设备通讯,并以tcp 协议方式对外提供接口。
C++代码片段:
手上有一台美国vps外网服务器(30rmb/)
通过ssh openwrt 提供的端口在vps 上打通,让vps 上的php程序能直接使用c++提供的端口.
主要逻辑处理在php上,这样开发和修改起来相对容易了很多。
Php代码片段:
编写网页程序,对外提供操作UI:
2版(v2.0)的诞生:
在这里非常感谢乐联网老刘的支持,当他看到我用433无线模块组装的插排时跟我约稿,鼓励我将制作过程写一份文章发表出来,当时乐联在做DSM501A 空气颗粒物检测活动,除了送我一个DSM501A 外,还送我一个设备做为奖励,有老刘的支持才有这篇文章的发表,非常感谢!!! 之前我也一直想把这些分享出来,可是出于时间等原因一直没有去做,这次既然要做就做好一些把功能都完善一下,于时第2版出来了(操作演示请查看视频1),主要改进了以下几点:
1. 由于433 模块很不稳定,有时会出现丢数据的现象,所以使用zigbee 模块换掉433模块。
2. 增加卧室温度检测、湿度检测、空气颗粒物检测(DSM501A,乐联网做活动送的)、空调控制(夏天到家前可以先打开空调了^-^)。
3.外网服务器换用国内阿里云主机,包年690RMB,国内ip速度快!
zigbee模块(49RMB 有些小贵):
换掉路由器内部的433模块
插排里也换一下:
饮水机也换一下:


使用洞洞板集成zigbee模块、arduino、温度传感、温度传感器、DSM501A 颗粒物传感器和红外学习模块:
美化了下UI操作界面
与乐联网的对接
传感器数据上传
openwrt 上写php 代码实现(openwrt 可以装php很方便),代码片段:
上传温度数据
上传DSM501A 颗粒物数据
使用crontab 定时上传,每2分钟执行一次:
控制设备对接
采用乐联网tcp 长连接方式,不怕防火墙,响应速度快,也是运行在 openwrt 上,采用python 编写,代码片段:
返回网关上的所有控制设备信息
控制某个设备:
远程控制还不够?来点智能的怎么样?
经过一段时间的使用,无用发现远程控制并不是对智能家居的真正需要,比如下班后在路上有时会忘记拿出手机来打开家里的电器,有时感觉这种方式操作起来还有些繁琐。这时乐联网上的定时执行计划功能是个不错的选择,一般下班8点到家,通过配置7点时打开家里的热水器,饮水机:
如果下班后没有按时回家,比如公司加班,朋友聚会,那些这些按时打开的设备不就白白的浪费着国家能源了,无用在这里想到了一个办法: 在离家还有两公里的时候打开家里的设备,离家两公里以外的话关闭已经打开的设备,是不是有点节能的感觉,呵呵,无用已经实现了并且自己在用,体验还不错,这里简单介绍下实现方法:
1.编写一个android 后台程序,类似于微信那种后台程序(android 不熟,硬着头皮边学边做的),通过移动网络每1分钟将自己的地理位置上传到外网服务器上,代码片段:
2.编写服务器上的php程序,代码片段:
关于开源、下一篇文章和未来
       无用很乐于奉献源代码,首先看下这篇文章的响应情况,如果大家喜欢,准备在下一篇文章里具体介绍下各个功能模块的实现方法和代码细节,顺便整理下源码,将代码在Github上开放,关于未来无用只能继续努力进行探索,随着不断的探索和积累,未来相信智能家居会成为每个普通用户的可能,走进千家万户,真正服务人类,造福人类!!!
好了就到这里了,下篇文章见!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-6-12 09:36:54 | 显示全部楼层
非常非常好的一篇文章,谢谢楼主的分享,加油啊,希望能演变成一个出色的项目!
回复 支持 反对

使用道具 举报

发表于 2013-6-12 10:15:52 | 显示全部楼层
我当初考虑的智能家居是门窗自动化,灯都是手机等控制,电源也是认为控制,家里还装有防盗系统等等,,,,,
回复 支持 反对

使用道具 举报

发表于 2013-6-12 11:23:23 | 显示全部楼层
这个详细。。。。学习中。。
回复 支持 反对

使用道具 举报

发表于 2013-6-12 13:39:53 | 显示全部楼层
感谢楼主分享!非常好的文章!
回复 支持 反对

使用道具 举报

发表于 2013-6-12 16:30:24 | 显示全部楼层
非常好的文章支持ing  学习ing
回复 支持 反对

使用道具 举报

发表于 2013-6-12 18:22:40 | 显示全部楼层
很好的方案,值得效仿。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-12 21:20:06 | 显示全部楼层
gaoshine 发表于 2013-6-12 09:36
非常非常好的一篇文章,谢谢楼主的分享,加油啊,希望能演变成一个出色的项目!

谢谢!我会继续努力探索的。
回复 支持 反对

使用道具 举报

发表于 2013-6-12 21:52:51 | 显示全部楼层
神器,千万顶起!
回复 支持 反对

使用道具 举报

发表于 2013-6-13 00:07:25 | 显示全部楼层
非常好,但是,还要用到wrtt Php,能不能用wifi模块或现成的改造过的TPlink 703N来实现,不要用到wrt和PHP,就比较适合初学者来实现了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-13 10:54:45 | 显示全部楼层
philhoo 发表于 2013-6-13 00:07
非常好,但是,还要用到wrtt Php,能不能用wifi模块或现成的改造过的TPlink 703N来实现,不要用到wrt和PHP, ...

你好, 这里使用openwrt 是因为 db120 作为一台家用路由器已经在用了,可以长期运行着, 刚好db120上可以刷openwrt  我对openwrt比较熟悉, 用它来开发可以节省些开支,当然在703N刷个可开发的linux 系统也可以代替openwrt. openwrt 上的 c++ 只做数据透传对外提供接口,这样可以将业务逻辑都集中更高级的语言上来实现, 减少后期的维护难度,所以这里使用了php,另一方面操作界面是web方式实现的,php可以做为web 的后台程序.
回复 支持 反对

使用道具 举报

发表于 2013-6-13 11:57:42 | 显示全部楼层
还是要顶一下。
回复 支持 反对

使用道具 举报

发表于 2013-6-13 12:12:16 | 显示全部楼层
好强大的样子
回复 支持 反对

使用道具 举报

发表于 2013-6-13 21:40:06 | 显示全部楼层
很牛哦,改天学习学习!
回复 支持 反对

使用道具 举报

发表于 2013-6-14 10:55:12 | 显示全部楼层
{:soso_e179:}非常好的DIY! 看来要从openwrt 入手学习···
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 16:59 , Processed in 0.046214 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表