ESP32-CAM ArduinoIDE开发系列文章目录

第一篇:ESP32-CAM高性价比WIFI图传方案快速入门教程
第二篇:ESP32-CAM第一个无线点灯程序
第三篇:ESP32-CAM智能网关的设计与实现
第四篇:ESP32-CAM创建热点构成并发式DNS服务器
第五篇:ESP32-CAM高性价比温湿度监控系统


文章目录

  • ESP32-CAM ArduinoIDE开发系列文章目录
  • 前言
  • 一、ESP32-CAM高性价比温湿度监控系统是什么?
  • 二、软件开发过程
    • 1.引入库dht11.h和dht11.cpp
    • 2.读入数据
    • 3.移植到工程
  • 总结

前言

    daodanjishui物联网核心原创技术之ESP32 Arduino IDE开发之嵌入式网页服务器架设、http请求收发与解析、单片机IO口读写操作、AJAX技术、并发服务器技术、DNS技术和传感器DHT11整合组成:ESP32-CAM高性价比温湿度监控系统。


一、ESP32-CAM高性价比温湿度监控系统是什么?

    daodanjishui在上一篇的项目:ESP32-CAM创建热点构成并发式DNS服务器详细介绍了嵌入式服务器局域网DNS的应用,当时的服务器主页只能查询ESP32-CAM板载LED 灯的状态和控制LED灯的打开和关闭,但是没有查询环境参数功能,没有真正体现出物联网技术的精髓,也是上一篇不足的地方。
    daodanjishui在这一篇的项目中,保留上一篇的功能之外,将加入DHT11温湿度传感器模块,并且加入传感器驱动程序,这个模块只有一个数据接口data,所以只占用ESP32-CAM的一个GPIO14,所以很容易将上一期的项目改造成一个温湿度监控系统。系统的功能就是在表单的窗口中输入:data 再点击cmd按钮提交命令,ESP32服务器就会查询温湿度数据返回到服务器主页,用户就可以查询到环境参数,显示在反馈信息那里,对上一篇功能不清楚的买家可以去看看上一篇(第四篇)的介绍。硬件效果如下图所示:


程序运行效果如下所示(红色字体就是传感器采集回来的数据):

DHT11的驱动程序当时是在网上随便找一个驱动程序实现采集数据功能的,测试的效果不是很好,测几次才得一次数据,其实差不多就可以了,要准确就要好好修改驱动程序,后面找到一个靠谱一点的DHT驱动程序,在这里分享一下,一些常用的库可以在:http://www.taichi-maker.com/homepage/download/#library-download
免费下载得到。

二、软件开发过程

1.引入库dht11.h和dht11.cpp

dht11.h代码如下:

#ifndef dht11_h
#define dht11_h#if defined(ARDUINO) && (ARDUINO >= 100)
#include <Arduino.h>
#else
#include <WProgram.h>
#endif#define DHT11LIB_VERSION "0.4.1"#define DHTLIB_OK               0
#define DHTLIB_ERROR_CHECKSUM   -1
#define DHTLIB_ERROR_TIMEOUT    -2class dht11
{public:int read(int pin);int humidity;int temperature;
};
#endif
//
// END OF FILE
//

dht11.c代码如下:

//
//    FILE: dht11.cpp
// VERSION: 0.4.1
// PURPOSE: DHT11 Temperature & Humidity Sensor library for Arduino
// LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)
//
// DATASHEET: http://www.micro4you.com/files/sensor/DHT11.pdf
//
// HISTORY:
// George Hadjikyriacou - Original version (??)
// Mod by SimKard - Version 0.2 (24/11/2010)
// Mod by Rob Tillaart - Version 0.3 (28/03/2011)
// + added comments
// + removed all non DHT11 specific code
// + added references
// Mod by Rob Tillaart - Version 0.4 (17/03/2012)
// + added 1.0 support
// Mod by Rob Tillaart - Version 0.4.1 (19/05/2012)
// + added error codes
//#include "dht11.h"// Return values:
// DHTLIB_OK
// DHTLIB_ERROR_CHECKSUM
// DHTLIB_ERROR_TIMEOUT
int dht11::read(int pin)
{// BUFFER TO RECEIVEuint8_t bits[5];uint8_t cnt = 7;uint8_t idx = 0;// EMPTY BUFFERfor (int i=0; i< 5; i++) bits[i] = 0;// REQUEST SAMPLEpinMode(pin, OUTPUT);digitalWrite(pin, LOW);delay(18);digitalWrite(pin, HIGH);delayMicroseconds(40);pinMode(pin, INPUT);// ACKNOWLEDGE or TIMEOUTunsigned int loopCnt = 10000;while(digitalRead(pin) == LOW)if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;loopCnt = 10000;while(digitalRead(pin) == HIGH)if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;// READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUTfor (int i=0; i<40; i++){loopCnt = 10000;while(digitalRead(pin) == LOW)if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;unsigned long t = micros();loopCnt = 10000;while(digitalRead(pin) == HIGH)if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;if ((micros() - t) > 40) bits[idx] |= (1 << cnt);if (cnt == 0)   // next byte?{cnt = 7;    // restart at MSBidx++;      // next byte!}else cnt--;}// WRITE TO RIGHT VARS// as bits[1] and bits[3] are allways zero they are omitted in formulas.humidity    = bits[0]; temperature = bits[2]; uint8_t sum = bits[0] + bits[2];  if (bits[4] != sum) return DHTLIB_ERROR_CHECKSUM;return DHTLIB_OK;
}
//
// END OF FILE
//

2.读入数据

Arduino传感器驱动代码如下:

double Fahrenheit(double celsius)
{return 1.8 * celsius + 32;
}    //摄氏温度度转化为华氏温度double Kelvin(double celsius)
{return celsius + 273.15;
}     //摄氏温度转化为开氏温度// 露点(点在此温度时,空气饱和并产生露珠)
// 参考: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{double A0= 373.15/(273.15 + celsius);double SUM = -7.90298 * (A0-1);SUM += 5.02808 * log10(A0);SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;SUM += log10(1013.246);double VP = pow(10, SUM-3) * humidity;double T = log(VP/0.61078);   // temp varreturn (241.88 * T) / (17.558-T);
}// 快速计算露点,速度是5倍dewPoint()
// 参考: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{double a = 17.271;double b = 237.7;double temp = (a * celsius) / (b + celsius) + log(humidity/100);double Td = (b * temp) / (a - temp);return Td;
}#include <dht11.h>dht11 DHT11;#define DHT11PIN 2void setup()
{Serial.begin(9600);Serial.println("DHT11 TEST PROGRAM ");Serial.print("LIBRARY VERSION: ");Serial.println(DHT11LIB_VERSION);Serial.println();
}void loop()
{Serial.println("\n");int chk = DHT11.read(DHT11PIN);Serial.print("Read sensor: ");switch (chk){case DHTLIB_OK: Serial.println("OK"); break;case DHTLIB_ERROR_CHECKSUM: Serial.println("Checksum error"); break;case DHTLIB_ERROR_TIMEOUT: Serial.println("Time out error"); break;default: Serial.println("Unknown error"); break;}Serial.print("Humidity (%): ");Serial.println((float)DHT11.humidity, 2);Serial.print("Temperature (oC): ");Serial.println((float)DHT11.temperature, 2);Serial.print("Temperature (oF): ");Serial.println(Fahrenheit(DHT11.temperature), 2);Serial.print("Temperature (K): ");Serial.println(Kelvin(DHT11.temperature), 2);Serial.print("Dew Point (oC): ");Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));Serial.print("Dew PointFast (oC): ");Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));delay(2000);
}

3.移植到工程

    在上一篇的工程里面加入这个代码就可以用网页去触发查询环境参数了。

 if(!strcmp(value_buf, "data")){//查询温度和湿度dht11 DHT11;if (DHTLIB_OK == DHT11.read(14))//我用的是GPIO14{Serial.print("HUMID = ");Serial.print(DHT11.humidity);Serial.println(" %RH");Serial.print("TMEP = ");Serial.print(DHT11.temperature);Serial.println("^C");String  T=DHT11.temperature+"";String  H=DHT11.humidity+"";          return request->send(200, "text/plain", "temperature="+T+" humidity="+H);//返回温度和湿度}else return request->send(200, "text/plain", "no temperature and humidity");//返回温度和湿度}

总结


    daodanjishui这一期比上一期的源码多了两个文件,这两个文件就是arduino的dht11库,网上也比较难找,调试过程也出了不少问题,最终实现了温湿度查询的功能,上一期我也说过,这个姐妹篇的代码扩展程度很高,随意提升系统的功能,所以现在把姐妹篇的代码改造一下变成温湿度监控系统,读者想学习怎么拓展系统功能,可以考虑都看看这两套代码的异同点,一般人添加库函数进去肯定会出现不少错误的,不是那么容易成功的,对比过这两套代码,就会添加新的传感器代码进去了,肯定有所收获!!!
代码传送地址:https://www.cirmall.com/circuit/19388/
点击跳转下载

ESP32-CAM高性价比温湿度监控系统相关推荐

  1. ESP32-CAM高性价比温湿度监控系统配网与上网方案设计与实现

    ESP32-CAM ArduinoIDE开发系列文章目录 第一篇:ESP32-CAM高性价比WIFI图传方案快速入门教程 第二篇:ESP32-CAM第一个无线点灯程序 第三篇:ESP32-CAM智能网 ...

  2. 物联网毕业设计-基于stm32的温湿度监控系统

    一.引言 近年来,随着科技的进步,计算机和电子技术在各个领域的应用越来越广泛,人们对温湿度的要求也越来越高.现在用于食品.药品和环境监测的仪器.仪表和计算机等设备越来越多,它们与人们生产.生活的关系越 ...

  3. 环境温湿度监控系统(51+DHT11+1602液晶)

    环境温湿度监控系统(51+DHT11+1602液晶) 使用模块: DHT11 Datasheet:https://www.alldatasheetcn.com/datasheet-pdf/pdf/11 ...

  4. 智慧档案馆之档案库房温湿度监控系统方案

    智慧档案馆之档案库房温湿度监控系统方案 其他档案库房八防.档案库房十防环境监控系统相关:自动化恒温恒湿消毒净化系统.防火防盗系统.漏水视频门禁监控系统.防虫防鼠系统.短信声光报警系统均可做成一个大数据 ...

  5. 基于stm32、Android和Html的温湿度监控系统的设计

    系列文章目录 第一章ESP8266的java软件仿真测试 第二章ESP8266硬件与软件测试 第三章ESP8266客户端与Java后台服务器联调 第四章ESP8266客户端与JavaWeb服务器联调 ...

  6. 6. 毕业设计温湿度监控系统(ESP8266 + DHT11 +OLED 实时上传温湿度数据给公网服务器并在OLED显示屏上显示实时温湿度)

    文章目录 硬件环境 软件环境 1. WiFi联网和HttpPost配置 2. DHT11温湿度读取和OLED显示配置 3. Web服务器配置(用于接收HTTP数据请求) 实验过程 1. ESP8266 ...

  7. 【嵌入式Linux应用开发】温湿度监控系统——绘制温湿度折线图

    1. 概述 ​ 本篇的主要内容是使用SquareLine Studio绘制一个显示温湿度曲线图的表格,将其移植到100ASK STM32MP157开发板上显示,效果图如图所示: 温湿度监控系统应用开发 ...

  8. ESP8266自动上传DHT11数据给javaweb服务器的温湿度监控系统的设计与实现

    系列文章目录 第一章ESP8266的java软件仿真测试 第二章ESP8266硬件与软件测试 第三章ESP8266客户端与Java后台服务器联调 第四章ESP8266客户端与JavaWeb服务器联调 ...

  9. 食品生产车间温湿度监控系统

    在食品加工储运过程中,及时掌握食物所处的环境情况是否有处在食品安全条件下是非常重要的.环境中,温度与湿度的超标会直接导致食物变质,过低或者过高也会使食物口感变差降低品质.为保证日常工作的顺利进行,首要 ...

最新文章

  1. 基于OpenLDAP_MirrorMode的OpenLDAP高可用
  2. Linux RAR 安装和使用
  3. yii2 后台权限验证获取用户身份_前、后端分离权限控制设计与实现
  4. 繁琐又危险的任务(varchar--nvarchar)
  5. StyleCop(C#代码规范分析工具)---2.常用规则介绍(一)
  6. CTF——angr使用学习记录
  7. 网络电缆 计算机电缆,计算机电缆的技术参数
  8. 芯明天debug assertion failed_YJLV铝芯电力电缆的基本介绍
  9. 【长沙集训】2017.10.28
  10. poj1691 Painting A Board
  11. Java实现生成32位UUID工具类
  12. linux下的网络管理命令,【linux】常见的网络管理命令
  13. 老男孩教育侵权之后使出了八大“绝招“,撒谎水平爆炸!真相在这里!
  14. 快手提前批--Java开发面经
  15. 我对技术的态度是什么样的?
  16. shp文件格式说明(二)
  17. php获得当前时间差,PHP获取当前时间差8小时的问题
  18. 鸟哥的Linux 私房菜 (1-12) + my
  19. 移动网络运营商的大数据
  20. ICML的出版社问题

热门文章

  1. 重装Win10系统的非常简单的操作教程
  2. 基于Python的WebService与氚云系统集成
  3. 全栈开发工程师修炼指南
  4. CCNP---重发布
  5. PVE系统+NAS+WEB 折腾笔记 :3-安装黑群晖
  6. 一文项目阶段性评审报告及常见问题【附实例模板】
  7. 从零开始构建嵌入式实时操作系统3——任务状态切换
  8. 基于Tire树(字典树)与倒排索引实现文本词频统计工具
  9. FLEX 无法调试? 因为一些下载工具占用了端口
  10. 关于GPS与GIS的一些思考