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

主要功能:

  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. 2019年汽车行业深度投资研究
  2. java判断一个数是不是质数(素数)
  3. oracle分片键,数据库SQL语句及性能优化
  4. ECharts - 背景透明
  5. java代码自动生成的插件_如何使用插件生成自定义Java 8代码
  6. 现在的挂黑链外链链接的手法非常的高级
  7. CentOS7系统服务管理systemctl
  8. Eclipse无法修改字体
  9. 2.性能测试类型或方法
  10. centos配置网络
  11. 内存映射(Memory Map)
  12. 手把手教你制作可以上线官方商店的微信动态表情包
  13. iOS16 中的 3 种新字体宽度样式
  14. 为何能力越强越不被重用?不懂这3点,你到哪里都混不好,不服不行
  15. 带你认识有源晶振的分类和英文缩写
  16. java生僻字解决方案
  17. 编写Java程序,做一个MPG和L/100KM的转换器
  18. python字典修改键所对应值_详解如何修改python中字典的键和值
  19. 旅游流的概念_旅游流的概念界定与理论内涵新论
  20. 关于DrawText的基准线纵坐标的计算

热门文章

  1. 蜡笔小新钢达姆机器人_蜡笔小新作文500字_小学四年级作文 - 作文库
  2. python(decorator)
  3. 怎么把录音转文字?只需三步,手把手教会你
  4. 记录一下家里双路由实现wifi漫游功能
  5. 除了青蛙旅行,我们还有哪些大事不是被机器人搞砸的?
  6. 盲盒app源码,可搭建部署二开.模式功能介绍.
  7. linux redhate7 yum源,CentOS6.x网易163yum源配置
  8. 阿里云-云开发平台计算篇——加强应用本身的计算能力
  9. Telsa显卡时间轴
  10. Ps编程脚本开发零基础学脚本(一)