当前位置: 首页 > news >正文

使用 ESP32-WROOM + DHT11 做个无屏温湿度计

最近梅雨天,有个房间湿度很大,而我需要远程查看温湿度,所以无所谓有没有显示屏,某宝上的温湿度计都是带屏的,如果连WIFI查看温湿度操作也比较麻烦,还需要换电池,实在不能满足我的需求,于是买了ESP32-WROOM和DHT11。

ESP32是乐鑫开发的一系列低成本、低功耗的片上系统微控制器,具有 Wi-Fi 和蓝牙无线功能以及双核处理器。手上的ESP32-WROOM-32是38针角版,板载一颗蓝色LED可由Pin1控制。

DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,内部由一个 8 位单片机控制一个电阻式感湿元件和一个 NTC 测温元件。DHT11 采用单总线协议。

手上的DHT11板是把DHT11传感器封装在板上了,板载10k上拉电阻,使用时直接接单片机,引脚定义为:

1:data(S)

2:VCC

3:GND(-)

接线用杜邦线,data接G22,VCC接3V3(3.3V,接5V也可以):

最后用阳光板做了个外壳(红白线交换了)

胶带固定,留LED窗口

工作原理是定时测量温湿度后通过webhook推送到钉钉的,钉钉消息包括成功连接WIFI,成功同步网络时间,时间是GMP0时区时间,未换算为8区,我尝试输出摄氏度符号℃,但网络请求会报错,所以暂时用C代替。

程序是用python,具体说是使用MicroPyhton编写的,MicroPython是一种适用于微控制器的Python3编程语言实现。它基于Python语言,并且与标准的Python解释器具有相同的语法和语义。MicroPython可以在微型计算机上运行,比如Arduino、ESP8266和ESP32等。它可以通过串口或WiFi连接进行编程和传输,可以控制各种传感器、执行各种操作和处理各种数据。它提供了便捷的开发环境,具有高效的脚本语言和小巧的代码大小,更容易理解和编写代码。它是一个非常流行的嵌入式开发语言,可用于开发各种物联网、机器人和嵌入式系统。

使用MicroPyhton需先刷入MicroPyhton固件,可以使用Thonny就很方便地刷入,步骤:工具->设置->Install or update firmware->Port+Firmware->安装。

MicroPyhton固件下载地址(MicroPython - Python for microcontrollers)

需要把WEBHOOK_DINGDING改为自己的机器人webhook,上电后会尝试连接WIFI,成功后会收到钉钉,然后马上同步到网络时间,成功也会钉钉,然后马上测量温湿度,同时LED会闪烁,直到测量成功(如果传感器有问题会一直闪),并钉钉。

# -*- coding: UTF-8 -*-import network
import urequests
import ntptime
import time
import dht
from machine import Pin,RTC,Timerssid = 'ssid'
password = '123456'
WEBHOOK_DINGDING = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxx'
TIME_MINUTES = 15rtc = RTC()# 设置温湿度传感器引脚
dht_pin = Pin(22, Pin.IN, Pin.PULL_UP)  # 将传感器引脚连接到ESP32的GPIO 22引脚
# 创建DHT对象
dht_sensor = dht.DHT11(dht_pin)# 连接WIFI
def connect_wifi(ssid,password):wlan = network.WLAN(network.STA_IF)wlan.active(True)print('scan wifi',wlan.scan())wlan.connect(ssid,password)while not wlan.isconnected():print('.',end='')time.sleep(0.2)text = 'WIFI connect OK'print(text)r = dingMe(text)print(r)# 同步时间
def sync_time():print(rtc.datetime())print('Sync time')for i in range(60):   #时间校准try:print('.',end='')ntptime.settime()print('time ok')break;except:time.sleep(3)print(rtc.datetime())(y,m,d,H,M,S,w,dd) = time.localtime()text = '{}-{} {}:{} sync time OK'.format(m,d,H,M)print(text)r = dingMe(text)print(r)def measure():try:# 读取传感器数据dht_sensor.measure()# 获取温度和湿度temperature = dht_sensor.temperature()humidity = dht_sensor.humidity()data=[temperature,humidity]return dataexcept:return [0,0]# 发送消息到钉钉
# https://open.dingtalk.com/document/orgapp/custom-robot-access
def dingMe(content,WEBHOOK_DINGDING=WEBHOOK_DINGDING):mHeader = {'Content-Type': 'application/json; charset=UTF-8'}mBody = {"text": {"content":'WT:'+content},"msgtype": "text"}# 注意:json=mBody  必须用json    r = urequests.post(url=WEBHOOK_DINGDING, json=mBody, headers=mHeader)return r.text# 读取传感器数据并传到钉钉
def push_message():# 声明LED引脚对象led_pin = Pin(1, Pin.OUT)for i in range(60):data = measure()# 测量失败,闪烁LEDled_pin.value(0)time.sleep(0.5)led_pin.value(1)time.sleep(0.5)if [0,0] != data:break(y,m,d,H,M,S,w,dd) = time.localtime()text = '{}-{} {}:{} {}C {}%'.format(m,d,H,M,data[0],data[1])print(text)r = dingMe(text)print(r)if __name__ == '__main__':connect_wifi(ssid,password)sync_time()push_message()# 创建定时器对象timer = Timer(0)# 设置定时器触发时间为TIME_MINUTES分钟timer.init(period=TIME_MINUTES*60*1000, mode=Timer.PERIODIC, callback=lambda t: push_message())

相关文章:

使用 ESP32-WROOM + DHT11 做个无屏温湿度计

最近梅雨天,有个房间湿度很大,而我需要远程查看温湿度,所以无所谓有没有显示屏,某宝上的温湿度计都是带屏的,如果连WIFI查看温湿度操作也比较麻烦,还需要换电池,实在不能满足我的需求&#xff0…...

如何使用 SwiftUI 构建 visionOS 应用

文章目录 前言WindowsVolumes沉浸式空间结论 前言 Apple Vision Pro 即将推出,现在是看看 SwiftUI API 的完美时机,这使我们能够将我们的应用程序适应 visionOS 提供的沉浸式世界。苹果表示,构建应用程序的最佳方式是使用 Swift 和 SwiftUI。…...

InspireFace-商用级的跨平台开源人脸分析SDK

InspireFace-商用级的跨平台开源人脸分析SDK InspireFaceSDK是由insightface开发的⼀款⼈脸识别软件开发⼯具包(SDK)。它提供了⼀系列功能,可以满⾜各种应⽤场景下的⼈脸识别需求,包括但不限于闸机、⼈脸⻔禁、⼈脸验证等。 该S…...

华为HCIP Datacom H12-821 卷24

1.单选题 企业大楼有大量员工通常都在上班时在大厅开始接入到公司的WLAN网络,随着每位员工走到各自的工位过程中,每个人的移动端叶通过漫游的方式漫游到各自的网络覆盖区域。为了尽量保证每个终端的IP地址是固定的,建议的做法是? A、配置VLAN Pool并配置顺序算法 B、…...

TikTok马来西亚直播网络怎么配置?

TikTok是一款全球流行的社交媒体应用,在东南亚地区拥有大量用户。在马来西亚这个多元化的国家,配置高效稳定的直播网络对TikTok的运营至关重要。 配置马来西亚直播网络的必要性 广泛的地理覆盖:马来西亚包括大片陆地和众多岛屿,网…...

基于若依的文件上传、下载

基于若依实现文件上传、下载 文章目录 基于若依实现文件上传、下载1、前端实现-文件上传1.1 通用上传分析1.2 修改实现上传接口 2、后端实现-文件上传3、后端实现-文件下载4、前端实现-文件下载 官网其实也写了,但是我是自己改造封装了一下,再次迈向全栈…...

论文回顾 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法

论文速览 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法 1 引言 在计算机视觉和机器人领域,相机校准一直是一个基础而又重要的问题。传统的相机校准方法主要依赖于从已知校准图案中提取角点,然后通过优化算法求解相机的内参和外参。这…...

高级java每日一道面试题-2024年7月1日

题目:请解释 Java 中的内存泄漏,并说明如何检测和避免内存泄漏。 答案: 内存泄漏指的是程序中不再使用的对象,由于某些原因没有被垃圾回收器回收,仍然占据着内存空间,导致可用内存逐渐减少,最…...

当需要对多个表进行联合更新操作时,怎样确保数据的一致性?

文章目录 一、问题分析二、解决方案三、示例代码(以 MySQL 为例)四、加锁机制示例五、测试和验证六、总结 在数据库管理中,经常会遇到需要对多个表进行联合更新的情况。这种操作带来了一定的复杂性,因为要确保在整个更新过程中数据…...

数据结构-线性表的应用

目录 前言一、有序表的合并1.1 顺序表实现1.2 单链表实现 二、稀疏多项式的相加和相乘2.1 稀疏多项式的相加2.2 稀疏多项式的相乘 总结 前言 本篇文章介绍线性表的应用,分别使用顺序表和单链表实现有序表的合并,最后介绍如何使用单链表实现两个稀疏多项…...

cpp http server/client

httplib 使用httplib库 basedemo server.cpp #include "httplib.h" #include <iostream> using namespace httplib;int main(void) {Server svr;svr.Get("/hello", [](const Request& req, Response& res) {std::cout << "lo…...

昇思25天学习打卡营第2天|MindSpore快速入门

打卡 目录 打卡 快速入门案例&#xff1a;minist图像数据识别任务 案例任务说明 流程 1 加载并处理数据集 2 模型网络构建与定义 3 模型约束定义 4 模型训练 5 模型保存 6 模型推理 相关参考文档入门理解 MindSpore数据处理引擎 模型网络参数初始化 模型优化器 …...

django之url路径

方式一&#xff1a;path 语法&#xff1a;<<转换器类型:自定义>> 作用&#xff1a;若转换器类型匹配到对应类型的数据&#xff0c;则将数据按照关键字传参的方式传递给视图函数 类型&#xff1a; str: 匹配除了”/“之外的非空字符串。 /test/zvxint: 匹配0或任何…...

【OnlyOffice】桌面应用编辑器,插件开发大赛,等你来挑战

OnlyOffice&#xff0c;桌面应用编辑器&#xff0c;最近版本已从8.0升级到了8.1 从PDF、Word、Excel、PPT等全面进行了升级。随着AI应用持续的火热&#xff0c;OnlyOffice也在不断推出AI相关插件。 因此&#xff0c;在此给大家推荐一下OnlyOffice本次的插件开发大赛。 详细信息…...

[学习笔记]SQL学习笔记(连载中。。。)

学习视频&#xff1a;【数据库】SQL 3小时快速入门 #数据库教程 #SQL教程 #MySQL教程 #database#Python连接数据库 目录 1.SQL的基础知识1.1.表(table)和键(key)1.2.外键、联合主键 2.MySQL安装&#xff08;略&#xff0c;请自行参考视频&#xff09;3.基本的MySQL语法3.1.规…...

Buuctf之SimpleRev做法

首先&#xff0c;查个壳&#xff0c;64bit&#xff0c;那就丢进ida64中进行反编译进来之后&#xff0c;我们进入main函数&#xff0c;发现里面没什么东西&#xff0c;那就shiftf12搜索字符串&#xff0c;找到关键字符串&#xff0c;双击进入然后再选中该字符串&#xff0c;ctrl…...

【云原生监控】Prometheus 普罗米修斯从搭建到使用详解

目录 一、前言 二、服务监控概述 2.1 什么是微服务监控 2.2 微服务监控指标 2.3 微服务监控工具 三、Prometheus概述 3.1 Prometheus是什么 3.2 Prometheus 特点 3.3 Prometheus 架构图 3.3.1 Prometheus核心组件 3.3.2 Prometheus 工作流程 3.4 Prometheus 应用场景…...

【C++】模板进阶--保姆级解析(什么是非类型模板参数?什么是模板的特化?模板的特化如何应用?)

目录 一、前言 二、什么是C模板&#xff1f; &#x1f4a6;泛型编程的思想 &#x1f4a6;C模板的分类 三、非类型模板参数 ⚡问题引入⚡ ⚡非类型模板参数的使用⚡ &#x1f525;非类型模板参数的定义 &#x1f525;非类型模板参数的两种类型 &#x1f52…...

Cookie与Session

Cookie Set-Cookie: sessionIdabc123; ExpiresWed, 09 Jun 2024 10:18:14 GMT; Path/; Secure; HttpOnlySession session作用域 首先需要了解servlet容器可能包含多个web应用。 在servlet容器中同一应用的servlet 对 session数据是可见的&#xff0c;不同应用之间session是相互…...

Nuxt3 的生命周期和钩子函数(十一)

title: Nuxt3 的生命周期和钩子函数&#xff08;十一&#xff09; date: 2024/7/5 updated: 2024/7/5 author: cmdragon excerpt: 摘要&#xff1a;本文详细介绍了Nuxt3中几个关键的生命周期钩子和它们的使用方法&#xff0c;包括webpack:done用于Webpack编译完成后执行操作…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...