不知道其他人有没有这样的顾虑,就是每次需要外出一些时日的时候总是担心家里的花无人浇水会干死。于是就想着是否能自己动手做一个可以用手机操控实现浇花的“半自动浇花器”呢,之所以称之为“半自动”是因为在一定程度上该设备使用了自动化控制的元件与技术,但操作依然是根据人的意志用手机来完成的因此为“半自动”。当实现自动检测土壤湿度来实现浇花并发送浇花报告到主人手机时可称之为“自动化”。 话不多说,来看看折腾这样一个东西需要准备些什么硬件和软件,有需要的人一定要耐心看完哦,内容有点多。 鉴于网络有点绕,开始前先放一下我的网络拓扑图 第一部分:硬件清单 1.树莓派:由于前段时间用树莓派折腾过家里的 NAS ,因此树莓派首当其冲作为智控中心用来相应手机端发出的指令
raspberry 2b 2.arduino :此设备与各种智能元器件通信非常方便,因此用他作为终端来和小水泵连接
adruino uno 3.5v 继电器:此设备与下面提到的小型水泵串联,来实现水泵的运行与停止
4.5v 小水泵:用来抽水的,如图,我为了方便连线,把这个 usb 头剪掉了用 4 节 7 号电池供电。这里要对水泵的电路进行简单改造,找到里面的红线(正极),剪短分别连到继电器的常开和公共端。 5v 小水泵 5.usb 摄像头:用来定时进行拍照,传回运行的监控图片。
6.其他设备: a.塑料软管,但由于塑料软管的方向性不好控制导致出水效果不好,后续考虑用一根 pvc 管来替代。 b.万用表, c.电烙铁, d.杜邦线(最好有公对母的,可用母对母和排针自制)若干。 硬件准备的差不多了,现在我们开始连线。 树莓派是一个完整的 linux 系统( debian 系统),因此 arduino 可以以 usb 设备的形式挂载,并且用串口进行通信。当然通信方式还可以有其他,读者有想试的可以自己搜索方案。 继电器的 vcc , gnd 分别连接 arduino 电源的 5v , GND 端,继电器的 in 口连接 arduino 的 13 口。 第二部分:软件清单(不包括 OS ) 1.minicom :这个可以设置树莓派与 arduino 进行串口通信的端口。自行搜索使用方法,设置成功后运行 lsusb 应该能看到 arduino 的设备 2.python :这个其实树莓派中已经内置了,并且对接了跟硬件操作的函数库,非常方便实现跟其他设备的串口通信或者操作树莓派自身的管脚 3.nginx :在树莓派上进行 http 请求转发 4.nodejs :用来处理 http 请求,来进行调用 python 程序进行串口通信进而控制 arduino 。 5.路由器:家里的路由器上设置端口转发用来将公网的 http 请求转发到树莓派的 nginx 上 6.腾讯云 vm :由于是在微信上操作,因此操作一定要在公网进行。 7.运行在腾讯云上的 redis :由于家里的路由器一般采用的动态 ip ,因此从家里路由器定时发送请求到腾讯云,程序获取此 ip 后记录到 redis 中,后续进行操作的时候先从 redis 获取此 ip ,然后请求都绑定到该 ip 上。 8.腾讯云对象存储服务( cos ):此步骤可生,因为 cos 可以当作 CDN 使用,咱可是一名前端工程师,当然需要把 h5 页面、 js 、 css 图片等资源做 cdn 分布 9.重要的 arduino ide :这个用来烧制 arduino 程序,可以在 windows 下编写好后烧制到 arduino 即可。 第三部分:关键实现 1.树莓派上的 python 进行串口通信。 readline 用来获取 arduino 的输出, write 用来向 arduino 发送指令。 2.arduino 代码:用来向继电器发送指令(其实就是高电平与低电平)控制继电器的打开与吸合。
3.做一个简单的手机端界面用进行操控,这里的实现方式太多了,此处不列举了。我用 react 做界面, nodejs 做后台,页面的 url 生成二维码用微信扫码后运行(记得放入微信的收藏夹) 4.鉴于网络交互还是挺绕的,这里补充一张网络拓扑图吧。以后有什么需要可以直接在这个框架上进行。
至此,浇花设备打造完成,放心外出吧,浇花的事情就交给他吧。浇花的同时会定时回传监控图片,用来协助你判断是否该停止浇花。嗯,到了 2.0 自动化的时候也许就不用这么麻烦了。 点击 http://www.wexincloud.com/wx/site/1531601550378395519/527081829719317795 查看图文信息
![]() | 1 NeoAtlantis 2016-07-15 21:32:40 +08:00 via Android 1. 首当其冲 不是 首先的意思。 2. 我觉得没必要搞 ip 那一段,觉得费劲还不可靠,直接让树莓派拉取指令如何? |
![]() | 2 NeoAtlantis 2016-07-15 21:34:08 +08:00 via Android ![]() 或者可以用 xmpp 之类的协议也可以实现双向的即时消息,也犯不着这么弄。 |
![]() | 3 whyishe 2016-07-15 21:49:41 +08:00 via iPhone 没有看到传感器的描述? btw 这么一套要多少大洋? |
![]() | 4 ltm 2016-07-15 21:57:10 +08:00 via Android 浇个花,真用得着这么兴师动众 |
![]() | 5 zzutmebwd 2016-07-15 21:58:29 +08:00 不明白为什么要用安德鲁 电机驱动板不好用么? |
![]() | 6 adv007 OP @NeoAtlantis 没有 ip 我从公网无法连接到家里路由器,路由器是动态 ip |
9 bluecubic 2016-07-15 22:58:45 +08:00 via Android 不知道水流量,以不小心浇多了 |
![]() | 10 xrlin 2016-07-15 23:02:25 +08:00 当年我也想自己做一个,可惜没钱,一直没行动。 |
![]() | 11 manhere 2016-07-15 23:05:04 +08:00 成本太高了,可以用 1/10 成本的 esp8266 来做。 |
14 zxb 2016-07-15 23:24:54 +08:00 via Android 让它自己滴水不好吗 |
![]() | 18 mlhorizon 2016-07-16 00:13:52 +08:00 家里头那段,用个 ESP8266 就漂漂亮亮解决了。 |
![]() | 19 fatedier 2016-07-16 00:20:43 +08:00 想法真好,感觉结合视频监控之类的实现全自动化,可以扩展到很多方向。 |
![]() | 20 maemo 2016-07-16 00:48:38 +08:00 不知现在的 esp8266 稳定性如何了,前年画过板子,测试稳定性不行呀 |
22 xiamx 2016-07-16 04:32:53 +08:00 CROS 是啥? |
![]() | 23 Asimov 2016-07-16 05:07:43 +08:00 可以讲下浇花器改造吗?关键是硬件部分,怎么弄继电器? |
![]() | 24 Asimov 2016-07-16 05:09:06 +08:00 我记得 Arduino 有湿度传感器之类啥的,可以插土里判断要不要浇水…… |
![]() | 25 Reign 2016-07-16 07:09:49 +08:00 via Android 用智能手机控制的浇花神器,我还不如用智能手机给我妈打个电话:妈妈,家里花该浇水啦, mua ~ |
![]() | 26 shendancan 2016-07-16 07:16:21 +08:00 小米花花草草检测仪, 49 |
![]() | 27 tcdw 2016-07-16 07:22:21 +08:00 via Android 这排版是怎么回事。。 |
28 xmoiduts 2016-07-16 07:50:46 +08:00 via Android 惊现 Arduino 高玩! 我会写点 arduino ,问题来了,网络和前端的学习路线是什么样的。 |
![]() | 29 jaylong 2016-07-16 08:50:28 +08:00 完全不需要 arduino 的存在,如果水泵工作电压低于 5v 也完全没必要用继电器,因为树莓派本身的 GPIO 就可以用 Python 控制。 |
30 aprikyblue 2016-07-16 08:50:46 +08:00 太复杂了吧。。就为了个浇花。。 |
![]() | 31 yxzblue 2016-07-16 08:56:28 +08:00 这逼装得可以给 10 分 |
34 googlebot 2016-07-16 09:23:54 +08:00 via Android 这个好,我们现在用最昂贵的方法,请朋友来家里浇花, 搞个机器好多了, |
35 xmoiduts 2016-07-16 09:31:19 +08:00 via Android 其实相比 arduino 浇花器,这个作品更大的意义,是提供了一种智能家居的架构和思路。 |
![]() | 36 misaka19000 2016-07-16 09:56:43 +08:00 为什么不把操作页面直接放在树莓派上面呢? |
![]() | 38 snow9312 2016-07-16 10:51:23 +08:00 via iPhone Arduino 检测土壤湿度自动浇水部分已经做好了。下一步想怎么让数据在 Web 上显示 |
![]() | 40 zonghua 2016-07-16 10:52:57 +08:00 我看三十年前的报刊是用晶体管电路做此类工具;三十年后还是做一样的东西。 |
![]() | 41 adv007 OP @misaka19000 可以的,树莓派上也有 nginx 和 node ,只不过利用了腾讯云的 cdn 分布能力 |
43 zxb 2016-07-16 11:19:18 +08:00 via Android 你这个只能让我想起一句话 "My stack is bigger than yours" |
![]() | 44 genffy 2016-07-16 12:03:06 +08:00 最近也入了个 Ruff ,准备玩玩。 PS :重点不是浇花好么。。。。。 |
![]() | 45 orient 2016-07-16 12:35:04 +08:00 这个感觉有点绕了,其实 Arduino+网络模块 就可以完成以上工作 |
![]() | 46 DT27 2016-07-16 13:34:01 +08:00 感觉一个 bug 家里就被淹了。。。 |
![]() | 50 ljbha007 2016-07-16 14:40:14 +08:00 建议加上温湿度传感器 光照传感器 用 spi 总线接 adc 芯片可以跳过 arduino 这一步 |
![]() |
![]() | 52 hiwljun 2016-07-16 14:55:38 +08:00 我也使用树莓派做过一个,实现定时和手机远程开关。大概如下: 1 、树莓派运行一个 python web server ,用来控制 GPIO 。 2 、树莓派定时任务获取家里网络 IP ,通过 DNS 服务商的 API 修改域名解析的 IP 。 3 、路由做端口转发,确保可以访问到树莓派上的 web server 。 4 、水龙头安装电磁阀,通过树莓派来控制开关,水管上接了 10 几个喷头。 http://imgur.com/vs9snJ6 http://imgur.com/AqbMXf5 |
![]() | 55 egen 2016-07-16 15:14:49 +08:00 lz 充分诠释了什么叫生命在于折腾,不过做的东西还是挺赞的 |
![]() | 56 xdeng 2016-07-16 15:15:21 +08:00 还联网? 直接配合小米那款检测仪 啊 |
58 276562578 记得初中还是高中物理书上有个图,利用大气压来浇水,如果不是为了练习和折腾的话,还是这个好 |
![]() | 59 sephinh 2016-07-16 17:27:42 +08:00 via Android ![]() 弄个定时器,每天 10 分钟,其他都可以省了,操心都不用 |
![]() | 60 Makoshan 2016-07-16 19:19:49 +08:00 养花的乐趣,就是每天照料,虽然我大学的时候也做过这个。 ?from=s1.8-1-1.2 |
![]() | 61 roadna 2016-07-16 19:32:13 +08:00 via Android 想起了 reddit 上某个根据网友投票来决定每天浇水与否的项目。。。 |
62 rockray 2016-07-16 19:41:04 +08:00 via iPhone 马 |
![]() | 63 smilekung 2016-07-16 20:29:38 +08:00 通信部分搞得不漂亮啊,太繁琐了,比较好的方案是跑 mqtt ,腾讯云<-mqtt->树莓派,树莓派到浇花的节点如果比较远或者还有其他节点可以用 zigbee 或者蓝牙组网,还可以很方便的扩展其他节点,树莓派就作为家庭总控来用 |
![]() | 67 NeoAtlantis 2016-07-17 05:24:54 +08:00 via Android @adv007 不是理由, XMPP 这种协议把服务器上的消息直接推送到你的树莓派很简单啊,你见过上 qq 或者微信还得改路由的么? |
![]() | 68 NeoAtlantis 2016-07-17 05:27:16 +08:00 via Android @jaylong 继电器要的不只是电压,还有电流,还得避免各种线圈的自感电压劈坏树莓派,不可能不用驱动模块… |
![]() | 69 adv007 OP @NeoAtlantis 微信的确是要路由的,不过是在服务接入的根据用户身份路由到后端服务 |
![]() | 70 aheadlead 2016-07-17 08:41:54 +08:00 家用的话 直接买一套小米智能家居的玩具能轻松解决 智能插座控制水泵 花花草草检测仪每株花插一个 然后就搞定了…… |
72 hahahasnoopy 2016-07-17 09:12:47 +08:00 via Android 学自动化的表示你这也太绕了,关键是你为什么要看着花还遥控浇花,你买几个湿度传感器,温度传感器,光线传感器,一个 arduino 一个水泵不就搞定了,程序写好了就不用管,当然,早就有人做出成品了,poi |
![]() | 73 Syc 2016-07-17 10:21:00 +08:00 via Android 表示当年我是这样, N 个气球,装好定量的水,一个 5 元大塑料盆子,然后 N 个电火花打火器(男票从实验室搜刮),然后几根管子固定好,然后引爆一天一个引爆 |
![]() | 74 junyi 2016-07-17 10:46:42 +08:00 楼主可以看一下这个成品: http://www.parrot.com/zh-hk/products/flower-power |
![]() | 75 NeoAtlantis 2016-07-17 12:02:59 +08:00 @adv007 我不想说啥了,你根本没明白我要说啥。首先你说的这个路由和开始的路由不是一个意思,我只能假设你对这方面的知识是一知半解。 其次,我只是告诉你,你这个东西只是需要通过一个方法,把信号、指令从外面的互联网传过来。这根本费不上配置路由器、搞类似 DDNS 这种东西。 如果你把你的树莓派当成一个使用即时通信( QQ 之类)的用户,一个 **人** ,你觉得他为了上个网,收个消息,还要搞这些?你见过现在哪个用手机的要配置这些? XMPP 就是一种即时通信的协议,你为啥一定要用 http 协议,为啥一定要让你的树莓派扮演 http 服务器的角色? 如果我来搞这部分,我只需要申请一个 XMPP 帐号,然后用 strophe.js 或者 node-xmpp 这种,登录到某个 XMPP 服务器上自己收消息,你可以自己架设,也有现成的,然后只要收到符合条件的消息,就回答是了,和路由器有啥关系。 退一万步,就算你不用 XMPP , 还有很多方法呢。如果能搞定科学上网, 大不了把你的服务器用 Tor 做成隐藏服务。 |
![]() | 76 adv007 OP @NeoAtlantis 学习了谢谢这位仁兄 |
![]() | 77 adv007 OP @NeoAtlantis 求个 demo ,我的管理页面是 h5 的,一般放在微信收藏夹,那么 h5 页面关闭后跟家里的连接就断开了,再次访问前怎么找到家里的设备 |
![]() | 78 NeoAtlantis 2016-07-17 13:15:31 +08:00 @adv007 XMPP 是客户端-服务器-客户端的形式,而且客户端-服务器的长连接总是有办法的。如果是 python 之类的代码写,可以直接做到 TCP 的长连接,如果是 strophe.js ,这个库可以通过 HTTP-BIND (好象是类似 AJAX 论询)解决。 所以,最简单的方法,可以是你的管理页面用一个 XMPP 帐号登录,树莓派用另一个。 XMPP 也允许匿名帐号登录,所以未必是你每次进管理页面都要用户名密码。这样消息能发过去,剩下的逻辑就好办了。 DEMO 可以去看我的网站 http://neoatlantis.org ,首页进去右下有个聊天图标,点开之后自动匿名登录,然后可以和我的一个固定的帐号聊天, 我这里电脑在线的话那里也会有显示。我这样就没配置什么网络设备,随时可以召唤我。(所以就是如果我这里挂着一个 nodejs 之类的 daemon ,这样自然就能随时找到我的设备了)。 我收到消息之后回复可能会慢,也可能呆会干嘛就收不到了,实在不行给我留言,我会把收到的消息转贴到这里 :) |
![]() | 79 NeoAtlantis 2016-07-17 13:50:06 +08:00 @adv007 刚才看了下, XMPP 已经开始搞实验性的拓展了,用于物联网的。 比如 XEP-0325: Internet of Things - Control ( https://xmpp.org/extensions/xep-0325.html) 还有 XEP-0323: Internet of Things - Sensor Data ( https://xmpp.org/extensions/xep-0323.html ) 我感觉可以就此开发个库了。 |
80 a610569731 2016-07-17 14:26:36 +08:00 楼主那些东西在哪买啊 我想弄一套玩玩 |
![]() | 81 adv007 OP @a610569731 大淘宝 |
![]() | 82 deyu260 2016-07-17 23:02:16 +08:00 战略 mark |
![]() | 83 andreby 2016-07-17 23:50:08 +08:00 找个女朋友帮你养 不就又有了 |
![]() | 84 lianxiaoyi 2016-07-18 10:07:35 +08:00 然而花花草草公司早已实现..... |
![]() | 85 CloudnuY 2016-07-19 01:45:35 +08:00 问一下, pi2 的音频接口底噪大不大? 我用的 pi1 代搭 AirPlay 服务底噪简直大的不能听。。。。。。 |
![]() | 86 adv007 OP @CloudnuY 我用 mplayer 播放还可以,不过 5.1dts 编码的音源解码出来噪音极大 |
![]() | 87 xahaha 2016-10-09 04:04:04 +08:00 楼主大神你好,非常有意思的解决方案,如果我是远程喂猫,视频这块希望随时能看到,有什么办法呀?希望多多指教 |