树莓3上怎么用DHT11读取温湿度

发布时间:2021-12-29 17:18:19 作者:小新
来源:亿速云 阅读:175
# 树莓派3上怎么用DHT11读取温湿度

## 前言

DHT11是一款低成本、低功耗的数字温湿度传感器,广泛应用于物联网和嵌入式项目中。树莓派3作为一款功能强大的单板计算机,与DHT11结合可以轻松实现环境监测功能。本文将详细介绍如何在树莓派3上使用Python读取DHT11传感器的温湿度数据。

## 所需材料

- 树莓派3(已安装Raspbian系统)
- DHT11温湿度传感器
- 10kΩ电阻(上拉电阻)
- 面包板
- 杜邦线若干

## 硬件连接

DHT11传感器有3个引脚(部分型号为4引脚,其中1个为空脚):

1. **VCC**(3.3V电源)
2. **DATA**(数据线)
3. **GND**(接地)

接线方式如下:

| DHT11引脚 | 树莓派GPIO引脚 |
|-----------|----------------|
| VCC       | 3.3V (Pin 1)    |
| DATA      | GPIO4 (Pin 7)   |
| GND       | GND (Pin 6)     |

> **注意**:DATA引脚需要连接10kΩ上拉电阻到VCC,确保信号稳定。

![接线示意图](https://i.imgur.com/example.png)  
*(示意图仅供参考,实际引脚请以树莓派3的GPIO布局为准)*

---

## 软件配置

### 1. 启用树莓派GPIO接口

在终端执行以下命令:
```bash
sudo raspi-config

选择 Interfacing Options > GPIO,启用GPIO控制。

2. 安装依赖库

sudo apt-get update
sudo apt-get install python3-dev python3-pip
sudo pip3 install Adafruit_DHT

替代方案:如果使用libgpiod(Raspberry Pi OS Bullseye及以上版本推荐):

> sudo apt-get install python3-libgpiod
> ```

---

## Python代码实现

### 方法一:使用Adafruit库(简单)

```python
import Adafruit_DHT
import time

# 设置传感器类型和GPIO引脚
DHT_SENSOR = Adafruit_DHT.DHT11
DHT_PIN = 4  # GPIO4 (Pin 7)

while True:
    humidity, temperature = Adafruit_DHT.read_retry(DHT_SENSOR, DHT_PIN)
    
    if humidity is not None and temperature is not None:
        print(f"温度: {temperature:.1f}°C, 湿度: {humidity:.1f}%")
    else:
        print("传感器读取失败!")
    
    time.sleep(2)  # 每2秒读取一次

方法二:直接GPIO操作(更底层)

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)  # DATA引脚

def read_dht11():
    # 发送开始信号
    GPIO.output(4, GPIO.LOW)
    time.sleep(0.018)
    GPIO.setup(4, GPIO.IN)
    
    # 等待传感器响应(具体时序需参考DHT11手册)
    # ...(完整代码需包含数据解析逻辑)
    
try:
    while True:
        humidity, temperature = read_dht11()
        print(f"温度: {temperature}°C, 湿度: {humidity}%")
        time.sleep(2)
finally:
    GPIO.cleanup()

注意:方法二需要精确的时序控制,建议初学者优先使用方法一。


常见问题解决

1. 传感器返回None

2. 报错RuntimeError: No access to /dev/mem

3. 数据偶尔不准确


进阶应用

数据可视化(使用Matplotlib)

import matplotlib.pyplot as plt
from collections import deque

# 创建滚动数据存储
temp_history = deque(maxlen=20)
hum_history = deque(maxlen=20)

while True:
    # ...(读取传感器数据)
    temp_history.append(temperature)
    hum_history.append(humidity)
    
    plt.clf()
    plt.plot(temp_history, label="温度 (°C)")
    plt.plot(hum_history, label="湿度 (%)")
    plt.legend()
    plt.pause(0.1)

物联网上报(MQTT示例)

import paho.mqtt.client as mqtt

client = mqtt.Client()
client.connect("mqtt.broker.address", 1883)

while True:
    # ...(读取传感器数据)
    client.publish("sensors/dht11/temp", temperature)
    client.publish("sensors/dht11/hum", humidity)

结语

通过本文的指导,您已经成功在树莓派3上实现了DHT11温湿度数据的采集。下一步可以尝试: - 将数据存储到数据库(如SQLite) - 设置阈值报警功能 - 结合其他传感器构建环境监测系统

欢迎在评论区分享您的项目创意! “`

注:实际图片链接需替换为有效资源,代码中的时序控制部分需根据DHT11数据手册完善。

推荐阅读:
  1. 51单片机课程设计:基于DHT11的温湿度报警器
  2. 在树莓派3上如何安装Fedora

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

dht11

上一篇:怎么实现两个ABAP系统之间互连

下一篇:Windows Server 2012组策略的五大改进分别是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》