首页 > 其他分享 >ESP32检测家中温湿度上云,随时随地多端查看温湿度​

ESP32检测家中温湿度上云,随时随地多端查看温湿度​

时间:2023-11-19 15:32:54浏览次数:35  
标签:HTTP 温湿度 ESP32 上云 import PHP DHT11

ESP32检测家中温湿度上云,随时随地多端查看温湿度

背景介绍

上次说到用Arduino Uno板子结合DHT11温湿度传感器,在Serial里实时返回温湿度的方法,总觉得还差点意思,一是只能配合电脑查看,不够节能,也不环保,不够爱护地球母亲,毕竟诸如Arduino之类的板子的电耗最高也就几十个毫安,0.1瓦都不到,电脑一开机那可是一两百瓦的功耗;二是查看温湿度也不方便,只能在电脑的Serial端口上看或者在板子上加个液晶屏(无论是液晶屏还是数码管),都不太方便。

因此,我觉得使用ESP32板子来实现温湿度检测就有了非常大的优势,利用ESP32自带的WiFi模块,考虑到实现的便利性,使用HTTP协议可以轻松将采集到的温湿度信息上传到云服务器上,这样在服务器段只需要简单的编写2个网页即可实现信息的存储和读取,这样在手机或者办公室电脑上只需通过访问网页的方式就能查看家里的温湿度,真正做到随时随地监控家里的温湿度。


总体架构

总体加入如下图:

ESP32检测家中温湿度上云,随时随地多端查看温湿度​_MySQL


非常的简洁明了,就是通过ESP32读取DHT11传感器的温湿度信息,然后通过家里的WiFi使用HTTP的方式向云服务器上的PHP网页提交信息,该网页会向MySQL数据库中添加ESP32提交的信息,然后再编写一个查看数据的网页,读取MySQL数据里存储的温湿度信息即可。

通过HTTP传输数据就几个好处,一是技术上比较熟悉,笔者对网页后端编程比较熟悉,所以编写起来没有难度。二是实现也简单,还容易扩展。在服务器端只需要部署Web服务器,然后再编写相应的PHP代码即可。如果以后需要多点收集温湿度信息,也只需简单接入,稍加区分即可。不需要额外编写其他通信的模块。第三是使用方便,通过HTTP无论是提交数据还是查看数据都很简单,电脑手机平板都可兼容。

另外,关于云服务器,最近阿里云推出一个99元一年的云服务器真的很好,实惠好用,用来做实验或者假设小网站真的是绝佳(笔者不是打广告,没必要,反正又饭恰),本例中就是使用阿里云的服务器,安装个宝塔面板或者1号面板架设网站很方便,(宝塔现在商业化严重,到处都要你掏钱,很讨厌。),如果linux用的溜也可以用lnmp.org的一键脚本,无图像化界面,稍微有点门槛;当然,如果不想掏钱,也可以在本地搭建PHP环境,比较出名的有WAMPServer、PHPStudy等集成环境,一直点下一步即可安装完成,在本地局域网上也可以玩的很嗨。

本地端实现

本地端在硬件上主要是ESP32传感器+DHT11的组合,选择一个合适的引脚(任意GPIO口都可以),连接到DHT11的2脚,本例中使用22号引脚。

板子连接图,如下:

ESP32检测家中温湿度上云,随时随地多端查看温湿度​_数据库_02



ESP32检测家中温湿度上云,随时随地多端查看温湿度​_数据库_03


图中红色线连接DHT11的1脚,为3.3v供电,黑色线连DHT11的4脚,为GND,棕色线连接DHT11的2脚,数据传输线,此线另一头连接ESP32的22脚。连接好硬件后,需要在Thonny中输入相关的代码,确认代码无误后可以下载至ESP32中进行运行。

这里使用了network、urequests、machine、dht和time库。特别注意urequests库前面有个u,网上许多文章都直接使用requests对象,那是它们已经声明了import urequests as requests这行代码,不然会调不通。另外urequests的官方API文档也是语焉不详,我本希望使用POST方法,但是看了官方示例和网上其他的文章,发现都调不通,遂只能放弃,改而使用GET方法,如果大家有使用POST提交参数的使用经验,请一定留言赐教,感谢!

代码如下:

import network
import urequests
from machine import Pin# 导入Pin模块
from machine import Timer# 导入Timer模块
import dht	#导入dht传感器模块
import time

#import ujson
  
def send_http_message():
    ssid = 'WiFi的名字'  # 替换为您的Wi-Fi SSID  
    password = 'WiFi的密码'  # 替换为您的Wi-Fi密码  
    request_url = 'http://192.168.1.1/msg.php'  # 替换为您要发送HTTP请求的URL,IP或者域名。我这里替换成IP地址了
    sample_interval = 60	# 取样时间,单位秒
    
    # 连接到Wi-Fi网络  
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('正在连接网络...')
        wlan.connect(ssid, password) 
        while not wlan.isconnected():
            pass
    print('WiFi网络配置信息:', wlan.ifconfig())
  
    
    # DHT11传感器
    # 定义DHT11传感器引脚和采样间隔时间(单位:秒)  
    dht11=dht.DHT11(Pin(22))  # 22引脚,模式输入
    # 定义温湿度数据的变量  
    temperature = 0.0  
    humidity = 0.0
    
    while True:
        dht11.measure()		#使用DHT库里的测量函数
        temperature=dht11.temperature()	#温度
        humidity=dht11.humidity()		#湿度
        if temperature==None:
            print("DHT11温湿度检测失败!")
        else:
            print("temp=%d℃  humi=%dRH"%(temperature,humidity)) #在控制台打印温湿度信息
            # 通过urequests发送HTTP GET消息,提交温湿度信息
            response = urequests.get(request_url+"?msg=t:"+str(temperature)+",h:"+str(humidity));    
    
            print("HTTP响应码:",response.status_code) # 状态码,HTTP状态码200表示正常
            print(response.text)  # 打印响应内容
            time.sleep(sample_interval)	#休眠n秒
    
#程序入口
if __name__=="__main__":
    
    send_http_message()

Python代码注意缩进要对齐,以上代码写的比较琐碎,有需要大家可以自行调整一下。这是代码运行后的Shell输出,另外在Thonny中要主要选择正确的COM口,如下图:

ESP32检测家中温湿度上云,随时随地多端查看温湿度​_PHP_04



云端实现

云端采用PHP+MySQL的经典组合,近年总是有争议PHP已死,但是PHP真的非常方便,笔者的主力语言是Java,但是对于这种小工程,PHP真的是方便太多,如果换用Java实现服务器端那真的是一场噩梦,配置部署复杂、代码编写也十分庞大。所以我觉得PHP还是有它自身的优势的,语言就是一个工具,真的无所谓好坏,如果你PHP用得好,肯定也能有高薪。

好了,闲话少叙。

服务器端笔者编写了2个网页,一个用于接受本地端提交的信息,另一个用于显示已存储在MySQL里的数据。这2个网页写的都比较简单,后续还有很大的优化空间。这里作为示例,也是够用了。希望大家不要喷。

接收数据的PHP代码:

<?php  
$servername = "localhost";  // 数据库服务器名称或IP地址  
$username = "root";     // 数据库用户名  
$password = "password";     // 数据库密码  
$dbname = "dbname";       // 数据库名称  
  
// 1.获取提交的消息  
//$msg = $_POST["msg"];
$msg = $_REQUEST["msg"];
// 密钥
$key = $_REQUEST["key"];
// 接收 JSON 数据  
//$jsonData = $_POST['data']; // 或者 $_GET['data'],根据您的实际情况选择  
  
// 解析 JSON 数据  
//$data = json_decode($jsonData, true);  

// 访问解析后的数据  
//echo $data['key']; // 输出 "John"  
//echo $data['msg']; // 输出 30


// 验证密钥,否则不进行数据库连接(用于简单的验证)
if($key == "key_string"){
	// 2-1.向数据库中存入提交的消息
	

	// 将消息插入到数据库中  
	$sql = "INSERT INTO `simplemsg` (msg) VALUES ('$msg')";
	if(!empty($msg)){
	    // 创建连接
    	$conn = new mysqli($servername, $username, $password, $dbname);
    
    	// 检查连接是否成功  
    	if ($conn->connect_error) {
    		die("连接失败: " . $conn->connect_error);
    	}
	    
	    
	    if ($conn->query($sql) === TRUE) {
    		echo "消息已成功存储到数据库";
    	} else {
    		echo "错误: " . $sql . "<br>" . $conn->error;
    	}
	}else{
	    echo "消息为空,不予添加。";
	}
	
}else{
    echo "本网页为消息添加页面,需要授权才可访问!";
}
?>

数据显示页面代码:

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="utf-8">
    <title>消息内容显示</title>
    <!--link rel="stylesheet" type="text/css" href=""-->
</head>
<style rel="stylesheet" type="text/css">
table,
th,
td {
  border: 1px solid;
}

table {
  width: 100%;
  max-width: 1200px;
  border-spacing: 0;
}

</style>
</head>
<body>
<table>
    <tr><td>消息内容</td><td>添加时间</td></tr>
<?php 
$servername = "localhost";  // 数据库服务器名称或IP地址  
$username = "root";     // 数据库用户名  
$password = "password";     // 数据库密码  
$dbname = "mydb";       // 数据库名称  

// 连接到数据库  
$conn = new mysqli($servername, $username, $password, $dbname);  
  
// 检查连接是否成功
if ($conn->connect_error) {  
    die("连接失败: " . $conn->connect_error);  
}

// 查询所有消息并显示在页面上  
$sql = "SELECT msg,insertTime FROM `simplemsg` ORDER BY insertTime DESC LIMIT 100";  
$result = $conn->query($sql);  
if ($result->num_rows > 0) {  
    while($row = $result->fetch_assoc()) {  
        echo "<tr><td>".$row["msg"]."</td><td>".$row["insertTime"]."</td></tr>";  
    }  
} else {  
    echo "没有消息可显示";  
}  
?>
</table>
</body>
</html>

页面显示添加的信息,如下图:


ESP32检测家中温湿度上云,随时随地多端查看温湿度​_MySQL_05



数据表定义及参考查询语句:

/* 创建数据表格 */
CREATE TABLE simplemsg (  
  id INT AUTO_INCREMENT PRIMARY KEY,  
  msg TEXT NOT NULL,
  insertTime TIMESTAMP default CURRENT_TIMESTAMP /* 默认添加本机时间 */
);

/* 插入语句 */
INSERT INTO `simplemsg`(`msg`) VALUES ("");

/* 查询最新100条消息 */
SELECT * FROM `simplemsg`  
ORDER BY insertTime DESC  
LIMIT 100;
/* 查询2 */
SELECT msg,insertTime FROM `simplemsg`
ORDER BY insertTime DESC  
LIMIT 100;


后续

一点反思:1.ESP32光光来做温湿度监控还是非常的大材小用了。另外,如果考虑成本,其实可以用ESP8266板子替代ESP32,8266板子比ESP32还要便宜10多个元。2.DHT11的精度不高,读取出来的温湿度都是int型,如果追求更高精度需要更换更高级别的传感器。另外最好加上气压传感器,这样对天气更有参考意义。还可以考虑加入空气质量检测模块。

网页端在实际使用中要考虑用户验证。特别是云服务器这种公开的场合,数据风险很高。

另外,网页数据显示可以考虑引入图标显示库,以图标、仪表盘的方式显示气象信息,这样就更加的美观且直观。

使用HTTP Web的方式提交和查看数据具有天然的兼容性,无论是电脑、手机还是平板,只要带有浏览器都可以进行数据的查看,免去各种适配上的麻烦。


标签:HTTP,温湿度,ESP32,上云,import,PHP,DHT11
From: https://blog.51cto.com/tangxiaohu/8473623

相关文章

  • esp32笔记[10]-rust驱动ssd1306显示屏
    摘要使用rust(no-std)环境和esp-hal库实现SSD1306显示屏(128x64)显示bmp图片.平台信息esp32(模组:ESP32-WROOM-32D)(xtensalx6)(xtensa-esp32-none-elf)rust超链接esp32笔记[7]-使用rust+zig开发入门原理简介rust的include_bytes!宏Rust的include_bytes!宏可以用......
  • 在ESP32-C3上实现断电后RTC(Real-Time Clock)继续走时
    如果您想在ESP32-C3上实现断电后RTC(Real-TimeClock)继续走时,可以考虑以下几种方法:使用外部RTC芯片:您可以连接一个外部的RTC芯片,例如DS1307或DS3231等,这些芯片通常具有内置的锂电池,可以在断电时保持走时。将外部RTC芯片的VDD引脚连接到ESP32-C3的电池或电源,并将时钟信号线连接到ESP3......
  • Arduino UNO使用DHT11温湿度传感器通过串口向PC发送温湿度信息​
    ArduinoUNO使用DHT11温湿度传感器通过串口向PC发送温湿度信息硬件介绍笔者使用的开发板为ArduinoUNO国产兼容板,淘宝上大约卖20rmb左右。如下图DHT11传感器为四脚封装样式,从正面看引脚从左往右依次为1、2、3、4引脚,其中1引脚为VCC3~5V,2引脚为通信引脚要与单片机引脚相连,3引脚是个......
  • esp32-ledc(pwm)
    这个部分设置比较简单,分三步,配置定时器、配置管道、设置占空比配置定时器配置管道改变占空比......
  • Thonny+MicroPython+ESP32开发环境配置以及遇到烧录固件出现error解决方法
    本文主要介绍如何使用python和esp32来做嵌入式研发相关的开发环境搭建以及在搭建时遇到的一些问题一、ESP32板子与电脑通讯1.首先将ESP32的板子通过USB线连接到电脑,下载驱动并且安装https://pan.baidu.com/s/1eTHYnom  2.打开电脑的设备管理器,win10可以直接从搜索中查......
  • 校园安防监控升级改造方案:如何实现设备利旧上云与AI视频识别感知?
    一、背景与需求分析随着现代安防监控科技的兴起和在各行各业的广泛应用,监控摄像头成为众所周知的产品,也为人类的工作生活提供了很大的便利。由于科技的发达,监控摄像头的升级换代也日益频繁。每年都有不计其数的摄像头被拆掉闲置,有的进了库房,有的被扔进了垃圾桶。其实很多被淘汰遗弃......
  • esp32s3使用多串口
    esp32s3使用多串口我按照别人博客中设置串口2,串口打印有问题,因为没有看到esp32s3多串口,就总结了一下自己的经验下图为esp32的引脚图下图为esp32s3的引脚图ESP32-S3有三个UART(通用异步收发器)控制器,即UART0、UART1、UART2,支持异步通信(RS232和RS485)和IrDA,通信速率可达......
  • 安科瑞环网柜用温湿度控制器的选型以及功能介绍——安科瑞李笑曼
    功能:WHD系列温湿度控制器运用传感器检测柜内的温度与湿度值,并通过控制外接的风扇与加热器对温度与湿度值进行调节,可有效防止因低温、高温造成的设备故障以及受潮或结露引起的爬电、闪络事故的发生。应用范围:中高压开关柜、端子箱、环网柜、箱变......
  • 智能化农业温湿度数据采集网关
    随着科技的发展,各行各业对于环境参数的监测需求不断增加。尤其在某些特定行业,如温室农业、制药、食品、冷库等加工领域,温度和湿度的控制对于保障生产过程的稳定性至关重要。因此,温湿度数据的采集与监控具有越来越重要的意义。温湿度数据采集是通过安装在不同位置的传感器设备来实现......
  • 一文解读2023年天翼云全民上云节玩法攻略
    秋风送爽,又是一年双11。2023年天翼云全民上云节大促活动于10月20日正式开启,活动将一直持续到11月30日。此次天翼云全民上云节大促会有哪些活动?哪些产品值得抢购?此篇文章将一网打尽帮你清晰梳理。今年天翼云全民上云节大促活动由“56000元优惠券大礼包”、“限时秒杀”、“新手上云......