简介: 学习物联网一段时间,做过若干练习,但都是从练习角度出发。现在依据实际情况做了个实物,因此就有了这款智能花盆。实现根据土壤湿度进行浇水,以维持在合适水平。

主要功能:

  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个月,未曾人工浇水,薄荷~还活着。
  本人首次发文分享,不足不完善之处,万请指出,感谢。

如何利用阿里物联网做一个会自动浇水的花盆相关推荐

  1. 乐鑫Esp32学习之旅⑦ esp32上利用GPIO中断做一个按键的短按和长按的回调事件,再也无须担心触发源。(附带Demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 1. 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 " ...

  2. 如何做一个股票自动交易系统的步骤

    如何做一个股票自动交易系统的步骤 1. 数据获取 股票自动交易系统需要获取的数据非常丰富,涉及到市场价格.资金流向.基本面报告等多方面信息.这些数据对于制定交易策略和决策分析至关重要. 首先,对于股票 ...

  3. html与css编程证书,利用CSS布局做一个简单的荣誉证书(代码示例)

    本篇文章将给大家介绍如何使用css布局制作一个简单的荣誉证书,有趣且实用,希望对需要的朋友有所帮助! 那么利用css布局实现简单荣誉证书样式的效果是非常简单的,主要用到以下几个基础属性: backgr ...

  4. 利用monment库做一个日历表

    利用monment库做一个日历表 先看完成品 点击上月和下月根据当前系统的时间进行变化 这是布局 <div class="wapper"><div class=& ...

  5. 计算机硬盘 电机 利用,如何利用坏硬盘来做一个超强风扇,变废为宝 利用坏硬盘来做一个超强风扇,变废为宝的方法...

    今天给大家带来如何利用坏硬盘来做一个超强风扇,变废为宝,利用坏硬盘来做一个超强风扇,变废为宝的方法,让您轻松解决问题. 店里好多坏硬盘,回收了又值不了几个钱.今天无事,突发奇想,为什么不做个7200风 ...

  6. 初学者笔记(三):利用python列表做一个最简单的垃圾分类

    系列文章目录 初学者笔记(一):利用python求100的因数 初学者笔记(二):利用python输出一个1-100的奇数列表 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目 ...

  7. TCP传输:利用socket服务做一个文本转换器

    转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/45665291 最近看了一个教学视频,学习socket编程,里面有一个例子感 ...

  8. 菜鸟实习——如何做一个PHP自动安装程序install.php

    公司有很多个网站都需要使用留言功能,但目前还没时间写后台,就写了一个简易版的留言板,先顶一阵子,但想着网站在不同服务器上,每次去操作不同的数据库有点难受,于是想做一个像WP和DZ一样自动安装的程序,于 ...

  9. 沐风:做一个会自动赚钱的小程序

    当下互联网最火的莫过于小程序了,小程序具有很多天生的优势: 一.扎根于微信生态,拥微信10亿级的海量用户可挖掘. 二.用户界面和流畅度体验,可媲美原生APP. 三.开发周期短,成本低,成本相对原生AP ...

最新文章

  1. Tir-Hi3559AV100镜像烧写
  2. 从绘画和雕塑中了解板甲的设计思路
  3. 总结:一款Loading动画的实现思路
  4. .NET Core应用类型(Portable apps amp; Self-contained apps)
  5. PowerDesigner使用技巧
  6. 2017.9.13 不等式组 思考记录
  7. 平衡二叉树、B树(B-树)、B+树
  8. 某些error page不加载_细说So动态库的加载流程
  9. 异构计算 软硬协同设计_优雅的设计CNN并行架构-软硬协同之位宽设置(2)
  10. AlignGAN: Learning to Align Cross-Domain Images with Conditional Generative Adversarial Networks
  11. python bp神经网络进行预测_python实现BP神经网络回归预测模型
  12. 网络布线指南:光纤基础知识大扫盲
  13. HP 招聘性能测试PM 北京/上海 长期招聘
  14. realtek audio console无法连接rpc服务_程序员修神之路设计一套RPC框架并非易事
  15. 有哪些好的网课软件推荐吗?3款实用学习软件蹭课必备
  16. 软件工程毕业设计选题c语言,经典软件工程专业论文选题 软件工程专业论文题目选什么比较好...
  17. 【信号处理】脉搏信号处理系统含Matlab源码
  18. Navicat数据备份、linux mysql定时备份定时删除、docker内部mysql定时备份定时删除
  19. 推荐系统实战--movieslens数据集实现UserCF算法
  20. AIL(Android init Language)

热门文章

  1. 编制项目预算的方法和步骤
  2. 深度增强学习:走向通用人工智能之路
  3. nomachine NX 远程连接相关问题
  4. 计算机网络之DNS面试题
  5. IDEA连接mysql后,schemas中无表格
  6. 关于自己看百度修改c盘下的用户名,更改了注册表里的profilelist文件,重启后恢复原始桌面并提示注销问题与解决方案。
  7. HARK学习(三)--文件格式
  8. Kylin源码解析——从CubingJob的构建过程看Kylin的工作原理
  9. python word.documents.open报错_Python教程:[43]Word基本操作
  10. 【论文笔记】基于强化学习的机器人手臂仿人运动规划方法