文章目录

  • 1. 硬件、接线、环境配置
  • 2. 电容式土壤湿度传感器 (arduino)
  • 3. ESP32 与电容式土壤湿度传感器
    • 3.1 接线
    • 3.2 湿度数据读取
    • 3.3 湿度传感器标定 Why , What , How
      • 3.3.1 为什么要标定
      • 3.3.2 标定什么
      • 3.3.3 标定流程
      • 3.3.4 确定函数对应关系
      • 3.3.5 插入土壤深度
    • 3.4 ESP32 土壤湿度测量 UDP 传输例子

1. 硬件、接线、环境配置

  • 【物联网初探】- 01 - ESP32 开发环境搭建 (Arduino IDE)

  • 【物联网初探】- 02 - ESP32 利用 SPI 联通 TFT 彩屏 (Arduino IDE)

  • 【物联网初探】- 03 - ESP32 结合 TFT_eSPI 库标定 TFT 触摸屏 (Arduino IDE)

  • 【物联网初探】- 04 - ESP32 结合 LVGL 库开发环境搭建 (Arduino IDE)

  • 【物联网初探】- 05 - ESP32 上 LVGL 库的多个例程测试 (Arduino IDE)

  • 【物联网初探】- 06 - ESP32 利用 wifi 进行 TCP 通信(Arduino IDE)

  • 【物联网初探】- 07 - ESP32 利用 wifi 进行 UDP 通信(Arduino IDE)

2. 电容式土壤湿度传感器 (arduino)

  • 硬件外观,某宝购入,挑了一个便宜的,4.75元一个,宽压 DC 3.3 ~ 5.5 V 均可。

  • 参考资料 :电容式湿度传感器 - DFROBOT,该文档讲解非常详细。

3. ESP32 与电容式土壤湿度传感器

3.1 接线

  • 湿度传感器的板子上一共出来三根线,VCC 和 GND 正常接供电和接地即可,我这个传感器 3.3V 和 5V 输入都可以。

  • 重点就是数据输出的那根线,接一个不用的 GPIO 口即可,注意避开有特殊功能的口,接口定义参见 01 篇博客,这里我连接了 GPIO 4 ,对应我板子上标识的 G4 (这个 ESP32 的标识可能与你的不同,请参照你自己的电路图确定 GPIO 号),这里注意,如果同时使用 wifi 可能会有 GPIO 口冲突问题,简单的解决方法就是换不冲突的口来读,见 3.4。

3.2 湿度数据读取

  • 只需利用 analogRead() 函数,读取该 GPIO 口上的模拟数据。

  • 请注意,该数据并不是相对湿度,而是一个参考值,这里引用 dfrobot 官网的一段解释:

    问题:为什么我们不能用防水的相对湿度传感器去测量土壤湿度?

    解释:土壤湿度的定义是取1公斤土样,彻底烘干,减少的重量(水的重量)与1公斤的比值成为土壤湿度。空气相对湿度的定义是当前温度下的绝对湿度与当前温度下的饱和湿度的百分比。综上土壤湿度跟空气湿度不是一个概念,也不是一个数量级,土壤湿度10%时土壤中空气的湿度已经100%了。注意:利用防水型相对湿度传感器,将其埋在土壤里是不会损坏的,即使带电再水里煮也不会损坏,但当面对湿度稍大的土壤,土壤中空气湿度会长期是100%,测量就失去了意义。

  • 极简代码

    void setup() {Serial.begin(9600);
    }
    void loop() {Serial.println(analogRead(4));//湿度传感器接ESP32上的GPIO号delay(100);
    }
    

3.3 湿度传感器标定 Why , What , How

3.3.1 为什么要标定
  • 在 3.2 的解释基础上,我们明确了该传感器只能根据电容感应原理输出一个数值,而不同的土壤湿度会影响电容,导致不同的输出数据,虽然我们无法得知准确的土壤湿度数据,但是我们能根据测量值来定性的得知当前土壤相对的湿度关系。
3.3.2 标定什么
  • 标定的是该传感器在 干燥环境下的读数 ,和 潮湿环境下的读数 ,那么从植物浇水的角度来讲,我们可以在植物土壤比较干燥的情况下测一次读数,然后在浇透水之后测一次,以这两次的数值为干、湿的参考基准,然后设置一个相对湿度的对应关系函数。
3.3.3 标定流程
  • **参考 电容式湿度传感器 - DFROBOT 文档中对该传感器的标定建议,我们采用 空气中的读数水中的读数 ,作为 干、湿的参考区间 ,步骤如下:

    • 首先,烧录读取传感器数据的代码,参考 3.2 极简代码即可,并打开 Arduino 上的串口监视器。

    • 空气中观察读数,我手头这个传感器的读数大约稳定在 2590

  • 把传感器下半部分插入水中,观察读数,大约稳定在 1090,至此我们就获得了两个极值。

3.3.4 确定函数对应关系
  • 从上述测量值我们可以看出,模拟输出的数值与湿度是成反比的,我们可以根据两次测量值构造一个简单的线性函数,实际上湿度与电容式传感器测量值不一定是线性关系,如果想要得出稍微准确的对应关系,应该在不同湿度的土壤中做多次试验来拟合曲线。

  • 这里,我们就理想化的认为它符合线性关系,那么读数 1090 记为 cmaxc_{max}cmax​ , 对应土壤湿度 100% 记为 mmaxm_{max}mmax​; 读数 2590 记为 cminc_{min}cmin​ ,对应土壤湿度 0% 记为 mminm_{min}mmin​,当前土壤含水量为 mcurm_{cur}mcur​,ESP32 读数为 ccurc_{cur}ccur​,构造线性函数如式(1):
    mcur=(ccur−cmin)∗(mmax−mmin)(cmax−cmin)(1)m_{cur} = (c_{cur} - c_{min})* \frac{(m_{max}-m_{min})}{(c_{max}-c_{min})} \tag 1 mcur​=(ccur​−cmin​)∗(cmax​−cmin​)(mmax​−mmin​)​(1)

3.3.5 插入土壤深度
  • 推荐的插入深度如下图,绿色区间为建议的深度,不可越过红色线。

3.4 ESP32 土壤湿度测量 UDP 传输例子

  • wifi 与 adc 冲突问题,目前我偷懒解决,换了一个不冲突的 pin 口就好了,之前的 GPIO 4 无法读取数据。

  • 例程代码

    #include <WiFi.h>const char *ssid = "***";
    const char *password = "***";
    float c_min =  2590.0;  //readings in air
    float c_max = 1090.0;   //readings in water
    float m_min = 0.0;      //min soil moisture
    float m_max = 100.0;    //max soil moisture
    const int m_Pin = 32;   //与wifi不冲突的pinWiFiUDP Udp;
    IPAddress remote_IP(192, 168, 1, 22);
    unsigned int remoteUdpPort = 6060;  // 自定义远程监听端口void setup()
    {Serial.begin(9600);WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(200);Serial.print(".");}Serial.println("Connected");Serial.print("IP Address:");Serial.println(WiFi.localIP());
    }void loop()
    {Udp.beginPacket(remote_IP, remoteUdpPort);//配置远端ip地址和端口int c_cur = analogRead(m_Pin);//读取GPIO上的模拟数据int m_cur = (c_cur - c_min) * (m_max - m_min) / (c_max - c_min);//公式(1)String str_m_cur(m_cur);Udp.println(str_m_cur);//把数据写入发送缓冲区Udp.endPacket();//发送数据delay(1000);
    }
    
  • 测试结果正常,空气中 UDP 远端收到 0,水中收到 100 。

【物联网初探】- 08 - ESP32 操作电容式土壤湿度传感器(Arduino IDE)相关推荐

  1. ESP8266-Arduino编程实例-OLED显示电容式土壤湿度传感器数据

    OLED显示电容式土壤湿度传感器数据 本文将演示如何在OLED中显示土壤湿度传感器数据以及不同的数据值范围,使用不同的表情图片显示. 本次实例主要通过如下步骤来完成: 土壤湿度传感器数据采集 OLED ...

  2. 电容式加速度传感器(你会知道的文章)

    电容式加速度传感器(你会知道的文章) 加速度传感器是一种能够测量加速度力的设备,加速度力就是当物体在加速度过程中在物体上的力;比如地球引力.汽车加速时候的力.电梯上下的时候这些都是加速度力. 现代科技 ...

  3. MEMS电容式加速度传感器(简介)-传感器专题

    MEMS电容式加速度传感器(简介) MEMS传感器即微机电系统是在微电子技术基础上发展起来的多学科交叉的前沿研究领域,与传统的传感器相比,它具有体积小.重量轻.成本低.功耗低.可靠性高.适于批量化生产 ...

  4. 物联网应用入门--利用虚拟硬件模拟土壤湿度传感器应用编写

    本文为微软开源课程IoT-For-Beginners翻译,略有改动,首发于个人博客 探测土壤湿度 Sketchnote by Nitya Narasimhan. Click the image for ...

  5. 【物联网初探】- 02 - ESP32 利用 SPI 连通 TFT 彩屏 (Arduino IDE)

    文章目录 1. 硬件配置 1.1 ESP32 1.1 TFT 彩屏 1.2 TFT 彩屏上的触摸屏 2. 接线 2.1 SPI 接口简介 2.2 TFT SPI 与 ESP GPIO 连接 3. TF ...

  6. 【物联网初探】- 09 - 基于 ESP32 和微信小程序的土壤湿度监测【完结篇】

    文章目录 1. 硬件.接线.环境配置 2. 项目简介 2.1 初衷 2.2 技术路线 3. 实现方法 3.1 接线及电源选型 3.2 ESP32 端程序 3.2.1 源码 3.2.2 特别说明 3.3 ...

  7. arduino 土壤温湿度传感器_【雕爷学编程】Arduino动手做(70)---土壤湿度传感器...

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  8. 手把手带你使用EFR32 -- 土壤湿度传感器变身第二形态,以 ZigBee 形态出击

    文章目录 前言 硬件准备 软件准备 代码分析 总结 前言 后悔,总之就是非常后悔,我当时到底是为啥才会猪油蒙心,选择了 EFR32 来学习 ZigBee 使用啊? EFR32 这玩意看性能确实不错,但 ...

  9. Arduino UNO驱动土壤湿度传感器检测

    Arduino UNO驱动土壤湿度传感器检测 简介 运行要求 Arduino UNO与传感器接线 程序展示 实践效果 总结 简介 本次使用到是这个新款土壤湿度传感器! 这款电容式土壤湿度传感器区别于市 ...

最新文章

  1. 网页打开慢与服务器有关吗,网站打开好慢! 原来是这些原因造成的
  2. python简单代码画皮卡丘-实现童年宝可梦,教你用Python画一只属于自己的皮卡丘...
  3. php取指定长度,php截取指定长度的简单示例
  4. JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
  5. 【BCH码2】BCH码的快速BM迭代译码原理详解及MATLAB实现(不使用MATLAB库函数-代码见CSDN同名资源)
  6. git 报错:Please make sure you have the correct access rights and the repository exists
  7. 剑指offer-二叉树
  8. web前端期末大作业实例 (1500套) 集合
  9. Python入门篇(下)
  10. c代码生成matlab模块,使用 C Caller 模块集成 C 代码
  11. HBase数据结构与基本语法详解
  12. 基于python pyqt的围棋游戏制作
  13. HBUOJ--走台阶
  14. centos7安装ftp服务登录不上的坑总结
  15. 使用SecureCRT或Xshell上传文件
  16. Eclipse导入epf文件,一键更改背景及代码颜色。
  17. 使用正则表达式进行小说爬虫
  18. Oracle数据库(五):记录类型
  19. MTK SN号修改失效
  20. CSS介绍/音视频标签/字体/文本/选择器

热门文章

  1. Asp.net WebApi跨域_se7en3_新浪博客
  2. unreal-教程-第十章:蒙太奇实现拔剑动作
  3. 广州电子地图下载 来自谷歌电子地图库 地图展示15、17、19级
  4. Excel快速入门01
  5. 用计算机弹大白菜鸡毛菜,抖音大白菜、鸡毛菜是什么歌
  6. 【夜读】让自己更幸福的8件小事
  7. js拖拽360桌面悬浮球代码
  8. 利用非qq号码的QQ邮箱来获取qq号
  9. 关于mikefile 萌新用法
  10. 基于visual c++之windows核心编程代码分析(47)实现交换网络的QQ号嗅探