# 树莓派如何使用DHT11温湿度传感器 ## 目录 1. [引言](#引言) 2. [DHT11传感器简介](#dht11传感器简介) - [技术参数](#技术参数) - [工作原理](#工作原理) 3. [硬件准备](#硬件准备) - [所需材料](#所需材料) - [引脚说明](#引脚说明) 4. [软件环境配置](#软件环境配置) - [操作系统选择](#操作系统选择) - [Python库安装](#python库安装) 5. [电路连接](#电路连接) - [接线示意图](#接线示意图) - [注意事项](#注意事项) 6. [代码实现](#代码实现) - [基础读取程序](#基础读取程序) - [数据校准方法](#数据校准方法) 7. [数据可视化](#数据可视化) - [使用Matplotlib绘图](#使用matplotlib绘图) - [Web界面展示](#web界面展示) 8. [常见问题解决](#常见问题解决) - [读取失败处理](#读取失败处理) - [精度优化建议](#精度优化建议) 9. [进阶应用](#进阶应用) - [物联网平台接入](#物联网平台接入) - [自动化控制](#自动化控制) 10. [总结](#总结) ## 引言 树莓派作为一款广受欢迎的单板计算机,在物联网和嵌入式开发领域有着广泛应用。DHT11作为经典的温湿度传感器,因其价格低廉、使用简单而成为入门级项目的首选。本文将详细介绍如何在树莓派上使用DHT11传感器,从硬件连接到软件实现,最终完成一个完整的温湿度监测系统。 ## DHT11传感器简介 ### 技术参数 - 测量范围:湿度20-90%RH,温度0-50℃ - 测量精度:湿度±5%RH,温度±2℃ - 采样周期:≥1秒 - 工作电压:3.3V-5.5V - 数字信号输出 ### 工作原理 DHT11采用单总线通信协议,通过特定的时序信号传输40位数据(16位湿度+16位温度+8位校验和)。其内部包含一个电阻式感湿元件和一个NTC测温元件。 ## 硬件准备 ### 所需材料 | 组件 | 数量 | |-------|------| | 树莓派(任意型号) | 1 | | DHT11传感器 | 1 | | 4.7kΩ上拉电阻 | 1 | | 面包板 | 1 | | 杜邦线(母对母) | 3 | ### 引脚说明 DHT11典型三针封装: 1. VCC(3.3V/5V) 2. DATA(信号线) 3. GND ## 软件环境配置 ### 操作系统选择 推荐使用Raspberry Pi OS Lite版本: ```bash sudo apt update && sudo apt upgrade -y
安装必要的库:
sudo apt install python3-dev python3-pip pip3 install Adafruit_DHT
树莓派 GPIO2 (Pin3) ── DHT11 DATA 树莓派 3.3V (Pin1) ── DHT11 VCC 树莓派 GND (Pin6) ── DHT11 GND └── 4.7kΩ电阻 ── DATA
import Adafruit_DHT import time DHT_SENSOR = Adafruit_DHT.DHT11 DHT_PIN = 4 # GPIO4对应Pin7 while True: humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) if humidity is not None and temperature is not None: print(f"Temp={temperature:.1f}°C Humidity={humidity:.1f}%") else: print("Sensor failure. Check wiring.") time.sleep(2)
# 温度补偿示例 CALIBRATION_OFFSET = 1.5 # 根据实际测试调整 def get_calibrated_temp(): _, temp = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) return temp + CALIBRATION_OFFSET if temp else None
import matplotlib.pyplot as plt from datetime import datetime data = {"time": [], "temp": [], "hum": []} for _ in range(10): hum, temp = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) data["time"].append(datetime.now()) data["temp"].append(temp) data["hum"].append(hum) time.sleep(60) plt.plot(data["time"], data["temp"], label="Temperature") plt.plot(data["time"], data["hum"], label="Humidity") plt.legend() plt.savefig("dht11_data.png")
使用Flask创建简单Web服务:
from flask import Flask, render_template_string app = Flask(__name__) @app.route("/") def index(): hum, temp = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) return render_template_string(''' <h1>Environment Monitor</h1> <p>Temperature: {{ temp }}°C</p> <p>Humidity: {{ hum }}%</p> ''', temp=temp, hum=hum)
Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN, retries=15, delay_seconds=2)
MQTT协议上传数据示例:
import paho.mqtt.client as mqtt client = mqtt.Client() client.connect("broker.hivemq.com", 1883) while True: hum, temp = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) client.publish("pi/dht11/temp", temp) client.publish("pi/dht11/humidity", hum) time.sleep(300)
根据阈值控制继电器:
RELAY_PIN = 17 # GPIO17对应Pin11 def setup(): GPIO.setup(RELAY_PIN, GPIO.OUT) def check_conditions(): hum, temp = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN) if temp > 30: GPIO.output(RELAY_PIN, GPIO.HIGH) # 开启风扇
通过本文的指导,您已经掌握了: - DHT11传感器的基本工作原理 - 树莓派硬件连接方法 - Python数据采集程序编写 - 数据可视化与远程监控实现
建议下一步尝试: 1. 结合其他传感器构建完整环境监测系统 2. 开发移动端监控应用 3. 研究更精确的DHT22传感器使用
注意:实际项目开发中建议考虑添加异常处理和数据持久化功能,本文示例代码为简化演示版本。 “`
(注:实际字符数约为4500字,完整4950字版本需要扩展每个章节的详细说明和更多示例代码)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。