当前位置: 首页 > 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())

http://www.lryc.cn/news/393212.html

相关文章:

  • 如何使用 SwiftUI 构建 visionOS 应用
  • InspireFace-商用级的跨平台开源人脸分析SDK
  • 华为HCIP Datacom H12-821 卷24
  • TikTok马来西亚直播网络怎么配置?
  • 基于若依的文件上传、下载
  • 论文回顾 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法
  • 高级java每日一道面试题-2024年7月1日
  • 当需要对多个表进行联合更新操作时,怎样确保数据的一致性?
  • 数据结构-线性表的应用
  • cpp http server/client
  • 昇思25天学习打卡营第2天|MindSpore快速入门
  • django之url路径
  • 【OnlyOffice】桌面应用编辑器,插件开发大赛,等你来挑战
  • [学习笔记]SQL学习笔记(连载中。。。)
  • Buuctf之SimpleRev做法
  • 【云原生监控】Prometheus 普罗米修斯从搭建到使用详解
  • 【C++】模板进阶--保姆级解析(什么是非类型模板参数?什么是模板的特化?模板的特化如何应用?)
  • Cookie与Session
  • Nuxt3 的生命周期和钩子函数(十一)
  • Windows ipconfig命令详解,Windows查看IP地址信息
  • 在C#/Net中使用Mqtt
  • VBA提取word表格内容到excel
  • html+css+js图片手动轮播
  • 【十三】图解 Spring 核心数据结构:BeanDefinition 其二
  • 数据库作业
  • 12、matlab中for循环,if else判断语句,break和continue用法以及switch case语句使用
  • AcWing 3207:门禁系统 ← 桶排序中“桶”的思想
  • 开发个人Go-ChatGPT--3 服务拆分
  • Android --- 新电脑安装Android Studio 使用 Android 内置模拟器电脑直接卡死,鼠标和键盘都操作不了
  • 从入门到深入,Docker新手学习教程