如何利用阿里物联网做一个会自动浇水的花盆
简介: 学习物联网一段时间,做过若干练习,但都是从练习角度出发。现在依据实际情况做了个实物,因此就有了这款智能花盆。实现根据土壤湿度进行浇水,以维持在合适水平。
主要功能:
1、收集环境信息(土壤湿度,空气温湿度)上传至阿里物联网平台。
2、当土壤湿度低于控制值下限时,自动浇水。
3、可以通过安卓应用,设置土壤湿度控制值范围,以及手动浇水。
特点:
由于这次开发板设计,加入蓝牙模块,以便配置终端的连网设置(WIFI),比过往做的练习(固定WIFI信息),更具产品性。
这个想法是从家里的小米摄像头应用学习过来的,由于智能花盆是用WIFI网络联网,因此使用蓝牙模块进行WIFI网络配置(SSID,PWD),开发更方便。
设计背景
土壤湿度受【灌浇程度,空气温湿度,日照时长,植物生长活跃度】等影响。传统滴灌系统,即使通过定时浇灌,也不一定能够给予植物最合适的土壤湿度环境。
设计加入土壤湿度传感器,以获取准确湿度,进行定量水浇灌,以确保土壤保持合适湿度。
开发板设计
1. 系统框架示意图
2. 智能花盆连接图
3. 数据指令流向图
说明:初次使用时,[用户]通过[安卓终端]运行应用程序,启动[蓝牙设备],与智能花盆的[蓝牙模块],进行配对。配对成功后,便可通过蓝牙通讯,向智能花盆发送WIFI的SSID以及PWD。
采购物料清单
名称 | 图片 | 数量 | 单价 | 总价 | 描述 |
---|---|---|---|---|---|
nodeMCU | 1 | 14 | 14 | 微处理器 | |
人体红外感应 | 1 | 3 | 3 | 传感器 | |
蓝牙模块 | 1 | 7 | 7 | 通信模块 | |
触摸传感模块 | 2 | 1 | 2 | 传感器 | |
空气温湿模块 | 1 | 4 | 4 | 传感器 | |
面包板 | 3 | 2 | 6 | ||
杜邦线 | N | -- | -- | ||
0.96'OLED显示屏 | 1 | 11 | 11 | 输出模块 | |
电容式土壤湿度模块 | 1 | 8 | 8 | 传感器 | |
直流潜水泵 | 1 | 3 | 3 | 执行设备 | |
自制花洒 | 1 | -- | -- | 自制.。。。 执行设备 | |
单相继电器 | 1 | 4 | 4 | 执行设备 | |
薄荷 | 1 | 4 | 4 | 坚强的薄荷一盆 | |
合计 | 72 |
物联网平台
创建物模型
上图说明:属性中的 土壤湿度以及空气温湿控限,是浮点型[上限]与[下限]组成的结构体。实际开发中,仅用到土壤湿度下限,以触发浇水。
服务说明:
浇水服务:响应平台进行浇水,主要用于手动浇水。
设备参数设置:响应平台进行参数设置,主要用于设置终端运行参数[土壤湿度下限,浇水量]
上传数据:响应平台,即时进行环境信息上传。
事件说明:
浇水事件:停用了,改用浇水时终端更新属性[浇水记录],使用0,1区分手动与自动浇水。
代码部分
代码就不贴出来了,仅仅把需要引用的包以及注意事项的作个描述。
一、设备终端开发
说明:使用ArduinoIDE 对nodeMCU 进行代码编写以及烧写
引用包说明:均在库管理器查询即可
终端功能说明:
1、 蓝牙通讯:
设备与安卓应用APP匹配,以及WIFI网络配置
逻辑说明
● 先通过USB转串口方法,对蓝牙模块进行初始化,比如
主从模式:主 波特率:9600
蓝牙名称:Smart_Pot 配对码:8888
● 定义属于自己一套的命令头,命令关键字进行通信,以保障通信准确性,私密性。比如
命令头:+SP:
命令关键字:ConnectIOT(连接终端)
SSID:(WIFI的 SSID内容头) PWD:(WIFI的PWD内容头)等等
● 连接成功后,终端会把烧录好的三元组信息向安卓终端发送并保存,以确保应用与设备之间 一对一的管理关系。
2、 WIFI联网:
智能花盆通电启动或重启后,自动联网。
逻辑说明:
● 通过蓝牙接收到的WIFI配网信息(SSID,PWD)进行联网,联网成功后,ESP8266将自动保 存SSID以及PWD信息,即使断电亦不会丢失。
● 通过WIFI包提供的网络状态检查指令,在WIFI断网时进行重新连接,实现WIFI断网重连。
3、 数据采集及上传物联网平台:空气温度,湿度,土壤湿度
每15分钟,上传数据至物联网平台
逻辑说明:
● 空气温湿度直接改写Arduino提供的示例即可。
● 土壤湿度传感器,需要在纯水以及空气中进行一次湿度数据获取湿度100%~0%的电压范围。
● 土壤湿度除了每15分钟上传一次外,在达到控制下限浇水时,马上上传一次,以获取准确的下限触发时间点。
4、 LED显示屏:亮屏30秒后,自动关闭,作节能作用
当人靠近智能花盆时(1.5米左右),经由[人体红外传感器]感应,自动点亮屏幕。
信息显示内容:
环境信息:土壤湿度(%),空气温度(℃),空气湿度(%)
设备状态:WIFI网络状态(WIFI_OK),数据提交状态(POSTed)
5、 触摸按键
按键A:点亮屏幕
按键B:手动上传数据
6、 浇水
自动执行:
当检测到的实时土壤湿度低于控制下限时,自动按定义浇水量进行浇水。
逻辑说明:
● 每次自动浇水至少相隔15分钟。避免浇水后土壤湿度未及时提升,在下一次湿度下限判断时,造成连续触发浇水。
● 实质控制范围是大于 0 少于等于控制下限,因为有时接触不良的时候,会出现测量土壤湿度为0,造成误浇水,影响运行。考虑实际运行时,不可能出现土壤湿度为 0 的情况,因此作这个逻辑判断。
手动执行:
响应来自平台的浇水服务调用。
7、 运行参数维护
响应来自平台的属性修改
土壤湿度控制下限 以及 浇水量
逻辑说明:
对属性修改完成后,通过 nodeMCU 的 SPIFFS 进行数值保存持久化。以 确保智能花盆在断电重启后,或者断网时,仍然能以最后配置的属性运行。
二、后台开发
1、在阿里租用一台ECS云服务器。
2、使用ASP.NET MVC3 开发一个后台,通过TCP/IP以处理安卓终端与阿里物联网平台数据交互
相关的开发指引,阿里这边相当详细,不作过多描述。
三、安卓开发
功能说明:
1、蓝牙配置WIFI
a) 通过安卓设备蓝牙模块与智能花盆蓝牙模块匹配
逻辑说明:大抵逻辑在上面设备终端已经说明,仅作简单描述了
安卓扫描周边蓝牙设备,并筛选出指定设备名的列表。通过应用配对码连接完成后,保存来自终端设备的三元组信息。凭此三元组信息与平台交互,以访问及控制终端设备。完成应用与终端匹配的工作。
连接蓝牙时,安卓默认是弹出框,让用户输入配对码。但是这个配对码是用于保护终端设备蓝牙访问安全性,因此需要进行代码隐藏弹出框,并自动配对码发送。
保存本地的三元组信息,目前是以明文保存,进一步开发时,应该是需要加密保存。
b) 发送需要连接WIFI网络的SSID以及PWD
逻辑说明:大抵逻辑在上面设备终端已经说明,仅作简单描述了
安卓应用对终端设备的操作,必须按定义的命令头及指令关键字进行。
目前发送SSID以及PWD,都是需要手动填写,其实是可以自动发送SSID以及PWD的,但是我未能找到这方面的代码。
2、智能花盆控制端
a) 运行状态显示:定时刷新由花盆每15分钟上传到平台的运行数据
土壤湿度 空气温度 空气湿度
b) 运行参数设置:
● 土壤湿度下限 单位:百分比
● 浇水量 单位:秒
c) 更新环境信息
逻辑说明
由安卓终端通过后台执行物联网平台接口,调用智能花盆服务,即时上传运行数据到物联网平台
d) 浇水
逻辑说明
逻辑上同,仅调用智能花盆不同服务实现手动即时浇水。
四、整体运行(所在地:广州)
代码部分其实好早已经完成开发,但是为了获取稳定数据,花了很长很长时间调试
上图说明:整月的运行情况已经逐渐趋向稳定,其实从12月开始,已经在试运行收集数据,但是遇到大坑,后续会提到,直到1月才有令我产生信心的数据。
上图说明:放大1月下半月数据,已经趋向稳定,检测土壤湿度达下限时(60%),自动浇水,能看到土壤湿度拉高的情况。而1-21数据出现异常数据,是由于家里出现停电造成没法自动浇水,从而超过监控土壤湿度下限。
运行参数:土壤湿度下限:60% 浇水量:4.5秒
上图说明:浇水记录(0:自动浇水,1:手动浇水)
上图说明:空气温度与空气湿度历史数据
总结
遇到的大坑:
一、关于传感器:
这是第一大坑,千万别选购左图这边土壤湿度传感器,我已经玩坏3-4个,基本上2天就腐蚀掉引脚的金属涂层,由于这种传感器的问题,白花了我1个月的时候找原因,都快到要放弃这次设计的地步了,最后才发现是传感器问题。后更换新款的传感器,目前约1月余,传感器尚算稳定使用。
二、关于与阿里物联网交互数据,在ArudinoIDE对nodeMCU进行代码烧写时,当需要进行交互时,会出现异常。
最终在demo版块的前辈文章中找到方法,十分感谢。
https://dev.iot.aliyun.com/demo/detail/169050
附上前辈文章链接
具体修改内容
AliyunMqttArduino库依赖于Crypto库和PubSubClient库,用于MQTT连接
修改了PubSubClient库的MQTT最大包长为256和心跳频率为60s
三、关于LED显示屏
网上大多Arduino应用LED案例,大多引用U8glib.h 包,但是实际烧录到nodeMCU的时候,会报错,直到我改用U8g2lib.h 包。
四、关于蓝牙模块
由于蓝牙模块,占用nodeMCU的RX/TX引脚,所以在代码烧写时,先不要给蓝牙模块上电,否则会出现烧写不上的情况。
不足之处:
一、传感器取值目前为瞬间值,应该记录若干值,去除最高,最底,取平均值为妥。
二、目前开发板,使用杜邦线连接传感器,偶尔会接触不良,后续应该焊到板子上。
三、上图储水罐应该加个水位传感器,有助提示进行加水。
四、由于本人对园艺并不熟悉,没法真正掌握植物的合适土壤湿度范围。后续能对安卓进一步开发,通过拍照上传至智能服务平台(Bai度AI -- 植物识别)进行植株识别,返回植物名称,以及大数据提供光照时长,温度湿度建议等等,更完善系统。
未能解决问题:
当通过笔记本USB口给nodeMCU供电的时候,通电即运作。但是通过插座供电时,总是需要按一次nodeMCU上的RST按钮才运作,向大家请教这个问题。
总结:
从稳定的运行数据能看到,自动浇水的间隔并没有绝对固定,可以对比当天的空气温湿度,反应植物的生长旺盛情况对土壤湿度的影响,亦体现智能花盆基于实际土壤湿度进行浇水的实际性。
过往已经做过NB-IoT的练习,有空会造一个Arduino + 移远BC26的版本。
最后的最后,至2020-2-1,智能花盆运作2个月,未曾人工浇水,薄荷~还活着。
本人首次发文分享,不足不完善之处,万请指出,感谢。
如何利用阿里物联网做一个会自动浇水的花盆相关推荐
- 乐鑫Esp32学习之旅⑦ esp32上利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...
- 如何做一个股票自动交易系统的步骤
如何做一个股票自动交易系统的步骤 1. 数据获取 股票自动交易系统需要获取的数据非常丰富,涉及到市场价格.资金流向.基本面报告等多方面信息.这些数据对于制定交易策略和决策分析至关重要. 首先,对于股票 ...
- html与css编程证书,利用CSS布局做一个简单的荣誉证书(代码示例)
本篇文章将给大家介绍如何使用css布局制作一个简单的荣誉证书,有趣且实用,希望对需要的朋友有所帮助! 那么利用css布局实现简单荣誉证书样式的效果是非常简单的,主要用到以下几个基础属性: backgr ...
- 利用monment库做一个日历表
利用monment库做一个日历表 先看完成品 点击上月和下月根据当前系统的时间进行变化 这是布局 <div class="wapper"><div class=& ...
- 计算机硬盘 电机 利用,如何利用坏硬盘来做一个超强风扇,变废为宝 利用坏硬盘来做一个超强风扇,变废为宝的方法...
今天给大家带来如何利用坏硬盘来做一个超强风扇,变废为宝,利用坏硬盘来做一个超强风扇,变废为宝的方法,让您轻松解决问题. 店里好多坏硬盘,回收了又值不了几个钱.今天无事,突发奇想,为什么不做个7200风 ...
- 初学者笔记(三):利用python列表做一个最简单的垃圾分类
系列文章目录 初学者笔记(一):利用python求100的因数 初学者笔记(二):利用python输出一个1-100的奇数列表 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目 ...
- TCP传输:利用socket服务做一个文本转换器
转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/45665291 最近看了一个教学视频,学习socket编程,里面有一个例子感 ...
- 菜鸟实习——如何做一个PHP自动安装程序install.php
公司有很多个网站都需要使用留言功能,但目前还没时间写后台,就写了一个简易版的留言板,先顶一阵子,但想着网站在不同服务器上,每次去操作不同的数据库有点难受,于是想做一个像WP和DZ一样自动安装的程序,于 ...
- 沐风:做一个会自动赚钱的小程序
当下互联网最火的莫过于小程序了,小程序具有很多天生的优势: 一.扎根于微信生态,拥微信10亿级的海量用户可挖掘. 二.用户界面和流畅度体验,可媲美原生APP. 三.开发周期短,成本低,成本相对原生AP ...
最新文章
- Tir-Hi3559AV100镜像烧写
- 从绘画和雕塑中了解板甲的设计思路
- 总结:一款Loading动画的实现思路
- .NET Core应用类型(Portable apps amp; Self-contained apps)
- PowerDesigner使用技巧
- 2017.9.13 不等式组 思考记录
- 平衡二叉树、B树(B-树)、B+树
- 某些error page不加载_细说So动态库的加载流程
- 异构计算 软硬协同设计_优雅的设计CNN并行架构-软硬协同之位宽设置(2)
- AlignGAN: Learning to Align Cross-Domain Images with Conditional Generative Adversarial Networks
- python bp神经网络进行预测_python实现BP神经网络回归预测模型
- 网络布线指南:光纤基础知识大扫盲
- HP 招聘性能测试PM 北京/上海 长期招聘
- realtek audio console无法连接rpc服务_程序员修神之路设计一套RPC框架并非易事
- 有哪些好的网课软件推荐吗?3款实用学习软件蹭课必备
- 软件工程毕业设计选题c语言,经典软件工程专业论文选题 软件工程专业论文题目选什么比较好...
- 【信号处理】脉搏信号处理系统含Matlab源码
- Navicat数据备份、linux mysql定时备份定时删除、docker内部mysql定时备份定时删除
- 推荐系统实战--movieslens数据集实现UserCF算法
- AIL(Android init Language)
热门文章
- 编制项目预算的方法和步骤
- 深度增强学习:走向通用人工智能之路
- nomachine NX 远程连接相关问题
- 计算机网络之DNS面试题
- IDEA连接mysql后,schemas中无表格
- 关于自己看百度修改c盘下的用户名,更改了注册表里的profilelist文件,重启后恢复原始桌面并提示注销问题与解决方案。
- HARK学习(三)--文件格式
- Kylin源码解析——从CubingJob的构建过程看Kylin的工作原理
- python word.documents.open报错_Python教程:[43]Word基本操作
- 【论文笔记】基于强化学习的机器人手臂仿人运动规划方法