用树莓派制作手机控制的浇花神器

2016-07-15 19:51:04 +08:00
 adv007

不知道其他人有没有这样的顾虑,就是每次需要外出一些时日的时候总是担心家里的花无人浇水会干死。于是就想着是否能自己动手做一个可以用手机操控实现浇花的“半自动浇花器”呢,之所以称之为“半自动”是因为在一定程度上该设备使用了自动化控制的元件与技术,但操作依然是根据人的意志用手机来完成的因此为“半自动”。当实现自动检测土壤湿度来实现浇花并发送浇花报告到主人手机时可称之为“自动化”。 话不多说,来看看折腾这样一个东西需要准备些什么硬件和软件,有需要的人一定要耐心看完哦,内容有点多。 鉴于网络有点绕,开始前先放一下我的网络拓扑图 第一部分:硬件清单 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 查看图文信息

22627 次点击
所在节点    程序员
88 条回复
roadna
2016-07-16 19:32:13 +08:00
想起了 reddit 上某个根据网友投票来决定每天浇水与否的项目。。。
rockray
2016-07-16 19:41:04 +08:00
smilekung
2016-07-16 20:29:38 +08:00
通信部分搞得不漂亮啊,太繁琐了,比较好的方案是跑 mqtt ,腾讯云<-mqtt->树莓派,树莓派到浇花的节点如果比较远或者还有其他节点可以用 zigbee 或者蓝牙组网,还可以很方便的扩展其他节点,树莓派就作为家庭总控来用
adv007
2016-07-16 21:34:23 +08:00
@smilekung 现在还是有线, zigbee 怕是不行,蓝牙绝壁可以
wilddog
2016-07-17 00:20:12 +08:00
@dibage 哈哈,是的,用我们的 C/嵌入式 SDK 可以做
ljbha007
2016-07-17 00:41:38 +08:00
@adv007 我是说的延时摄影
NeoAtlantis
2016-07-17 05:24:54 +08:00
@adv007 不是理由, XMPP 这种协议把服务器上的消息直接推送到你的树莓派很简单啊,你见过上 qq 或者微信还得改路由的么?
NeoAtlantis
2016-07-17 05:27:16 +08:00
@jaylong 继电器要的不只是电压,还有电流,还得避免各种线圈的自感电压劈坏树莓派,不可能不用驱动模块…
adv007
2016-07-17 08:18:44 +08:00
@NeoAtlantis 微信的确是要路由的,不过是在服务接入的根据用户身份路由到后端服务
aheadlead
2016-07-17 08:41:54 +08:00
家用的话 直接买一套小米智能家居的玩具能轻松解决

智能插座控制水泵
花花草草检测仪每株花插一个

然后就搞定了……
aheadlead
2016-07-17 08:42:11 +08:00
@aheadlead 摄像头的话 再买个小米那个啥摄像头……
hahahasnoopy
2016-07-17 09:12:47 +08:00
学自动化的表示你这也太绕了,关键是你为什么要看着花还遥控浇花,你买几个湿度传感器,温度传感器,光线传感器,一个 arduino 一个水泵不就搞定了,程序写好了就不用管,当然,早就有人做出成品了,poi
Syc
2016-07-17 10:21:00 +08:00
表示当年我是这样, N 个气球,装好定量的水,一个 5 元大塑料盆子,然后 N 个电火花打火器(男票从实验室搜刮),然后几根管子固定好,然后引爆一天一个引爆
junyi
2016-07-17 10:46:42 +08:00
楼主可以看一下这个成品: http://www.parrot.com/zh-hk/products/flower-power
NeoAtlantis
2016-07-17 12:02:59 +08:00
@adv007 我不想说啥了,你根本没明白我要说啥。首先你说的这个路由和开始的路由不是一个意思,我只能假设你对这方面的知识是一知半解。

其次,我只是告诉你,你这个东西只是需要通过一个方法,把信号、指令从外面的互联网传过来。这根本费不上配置路由器、搞类似 DDNS 这种东西。

如果你把你的树莓派当成一个使用即时通信( QQ 之类)的用户,一个 **人** ,你觉得他为了上个网,收个消息,还要搞这些?你见过现在哪个用手机的要配置这些?

XMPP 就是一种即时通信的协议,你为啥一定要用 http 协议,为啥一定要让你的树莓派扮演 http 服务器的角色?

如果我来搞这部分,我只需要申请一个 XMPP 帐号,然后用 strophe.js 或者 node-xmpp 这种,登录到某个 XMPP 服务器上自己收消息,你可以自己架设,也有现成的,然后只要收到符合条件的消息,就回答是了,和路由器有啥关系。

退一万步,就算你不用 XMPP , 还有很多方法呢。如果能搞定科学上网, 大不了把你的服务器用 Tor 做成隐藏服务。
adv007
2016-07-17 12:46:05 +08:00
@NeoAtlantis 学习了谢谢这位仁兄
adv007
2016-07-17 12:56:04 +08:00
@NeoAtlantis 求个 demo ,我的管理页面是 h5 的,一般放在微信收藏夹,那么 h5 页面关闭后跟家里的连接就断开了,再次访问前怎么找到家里的设备
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 ,这样自然就能随时找到我的设备了)。

我收到消息之后回复可能会慢,也可能呆会干嘛就收不到了,实在不行给我留言,我会把收到的消息转贴到这里 :)
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

我感觉可以就此开发个库了。
a610569731
2016-07-17 14:26:36 +08:00
楼主那些东西在哪买啊 我想弄一套玩玩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/292768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX