传感器概述

DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度20-90%RH, 温度0~50℃。分为3个接口,分别为:VCC, DATA, GND。

产品图片

在这里插入图片描述

主要用途

检测环境温湿度

GPIO控制DHT11温湿度传感器实操

引脚接线

我用的是三个头的dht11传感器,因此连线方式是:
VCC(或正极) — 树莓派的3v电源
GND (地线或者负极)— 树莓派的gnd接口
DATA (D或者out) —树莓派的GPIO引脚

1.VCC接上3V,可以选择1口或者17口
2.DATA接上GPIO口,我选的是GPIO4,第7口
3.GND接上接地口,我选的是第14口

模块原理图

在这里插入图片描述

硬件连接

硬件只涉及树莓派、DHT11传感器。
DHT11的信号引脚连接树莓派的GPIO17, DHT11的Vdd(+)和GND引脚(-)分别连接树莓派的电源正极和GND引脚。
在这里插入图片描述

实际线路

在这里插入图片描述

安装 Python3

本项目使用 Python3 进行开发,一般情况下,树莓派系统会内置 Python3,如果不确定系统内是否已经安装,可以使用下面的命令进行确认。

python3 --version

如果显示 Python 3.x.x(x 表示数字)则表示已经安装,否则请使用 apt 命令安装

sudo apt install python3

从源代码编译安装python3.9

如果你需要安装的Python版本不在apt仓库中,你可以从源代码编译安装。

wget https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tar.xz
tar -xf Python-3.9.1.tar.xz
cd Python-3.9.1
./configure --enable-optimizations
make -j 4
sudo make altinstall

使用altinstall可以避免与系统自带的Python版本冲突。

使用Pyenv管理Python版本

管理多个Python版本,可以使用pyenv。需要安装pyenv和pyenv-virtualenv:
1、安装依赖项:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git 

2、安装pyenv:

curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

3、配置环境变量(将以下内容添加到你的/.bashrc或/.profile文件中):

export PATH="HOME/.pyenv/bin:PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

4、重新加载配置文件:

source ~/.bashrc

5、使用pyenv安装最新版本的Python:

pyenv install -l  # 查看可用的Python版本
pyenv install 3.9.0 # 安装特定版本,例如3.9.0,
或者使用最新的稳定版号,如 pyenv install 3.9 或 pyenv install 3.10 等。
pyenv global 3.9.0  # 设置全局Python版本为3.9.0,或者使用最新的稳定版号。

Adafruit DHT库下载

sudo apt-get install git-core
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo apt-get install build-essential python-dev
sudo python3 setup.py install

注:安装失败,Adafruit_Python_DHT库无法安装成功,树莓派4b主板不支持。

关于虚拟环境

所谓虚拟环境是在python中把我们环境做成一个沙箱,不跟其他环境冲突。
另外,在类似树莓派这样的环境中不允许直接安装python的库,我们又需要用这些库,我们可以安装一个python的虚拟环境,由于虚拟环境不会影响外部环境,所以我可以在虚拟环境中安装python库。
python的虚拟环境安装步骤:

#创建一个文件夹用来安装虚拟环境:

mkdir adafruit_env
cd adafruit_env

安装虚拟环境:

sudo apt-get install python3-venv

创建虚拟环境:

python3 -m venv adafruit_env

激活虚拟环境:

source adafruit_env/bin/activate

在这里插入图片描述

退出虚拟环境:

deactivate

开启树莓派1-Wire接口

控制台终端输入命令

sudo raspi-config

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择确认退出即可。

安装adafruit-circuitpython-dht库

先进入虚拟环境
在这里插入图片描述
使用pip安装adafruit-circuitpython-dht库。打开终端,然后输入以下命令:

pip3 install adafruit-circuitpython-dht

在这里插入图片描述

GPIO控制传感器读取数据

编写Python获取温湿度代码,命名为demo1.py

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import numpy as np
import time
import sys
DHTPIN = 17
GPIO.setmode(GPIO.BCM)
def read_dht11_dat():try:GPIO.setup(DHTPIN, GPIO.OUT)GPIO.output(DHTPIN, GPIO.LOW)time.sleep(0.02)GPIO.output(DHTPIN, GPIO.HIGH)GPIO.setup(DHTPIN, GPIO.IN)# Wait for sensor responsetimeout = time.time() + 0.1while GPIO.input(DHTPIN) == GPIO.LOW:if time.time() > timeout:raise RuntimeError("Sensor response timeout (LOW)")timeout = time.time() + 0.1while GPIO.input(DHTPIN) == GPIO.HIGH:if time.time() > timeout:raise RuntimeError("Sensor response timeout (HIGH)")# Read 40 bits of datadata = []for _ in range(40):# Wait for start of bittimeout = time.time() + 0.001while GPIO.input(DHTPIN) == GPIO.LOW:if time.time() > timeout:raise RuntimeError("Bit start timeout")# Measure duration of high pulsestart = time.time()timeout = start + 0.001while GPIO.input(DHTPIN) == GPIO.HIGH:if time.time() > timeout:breakduration = time.time() - startdata.append(1 if duration > 0.00005 else 0)# Convert bits to valuesm = np.logspace(7, 0, 8, base=2, dtype=int)data_array = np.array(data)humidity = m.dot(data_array[0:8])humidity_point = m.dot(data_array[8:16])temperature = m.dot(data_array[16:24])temperature_point = m.dot(data_array[24:32])check = m.dot(data_array[32:40])tmp = humidity + humidity_point + temperature + temperature_pointif check == tmp and humidity + temperature < 1000:  # Sanity checkreturn humidity, temperaturereturn Falseexcept Exception as e:print(f"Error reading sensor: {str(e)}", file=sys.stderr)return Falsedef main():print("Raspberry Pi DHT11 Temperature test program\n")time.sleep(1)try:while True:result = read_dht11_dat()if result:humidity, temperature = resultprint(f"humidity: {humidity}%, Temperature: {temperature}C\n")else:print("Data are wrong, skip\n")time.sleep(1)except KeyboardInterrupt:passdef destroy():GPIO.cleanup()if __name__ == '__main__':try:main()finally:destroy()

运行脚本程序

可以看到humidity 和 Temperature数据打印在控制台。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/91828.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/91828.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/91828.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI原生数据库:告别SQL的新时代来了?

在2025年的今天&#xff0c;生成式AI的浪潮正以前所未有的力量重塑着各行各业。从代码生成到艺术创作&#xff0c;大型语言模型&#xff08;LLM&#xff09;的能力边界不断被拓宽。现在&#xff0c;这股浪潮正涌向信息技术领域最古老、最核心的基石之一&#xff1a;数据库。一个…

题单【模拟与高精度】

P1042 [NOIP 2003 普及组] 乒乓球 P1042 [NOIP 2003 普及组] 乒乓球 - 洛谷 #include<bits/stdc.h> using namespace std;char C; string S; int n,A,B;void Work(int Lim) {for(char i:S){if(iW) A;if(iL) B;if(max(A,B)>Lim && abs(A-B)>2){cout<<…

数据结构学习基础和从包装类缓存到泛型擦除的避坑指南

目录 1.数据结构的概念和算法 1.1 数据结构的概念 1.2 数据结构的集合框架 1.3 算法 1.3.1 时间复杂度 1.3.2 空间复杂度 2.包装类 2.1 为什么需要包装类&#xff1f; 2.2 装箱和拆箱 3. 初识泛型 3.1 认识泛型 3.2 泛型类的使用 3.3 泛型的编译 3.4 通配符 3.4.1 …

网络安全基础知识【6】

什么是防火墙1.防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、 专用网与公共网之间的界面上构造的保护屏障 2.防火墙实际上是一种隔离技术 3.防火墙重要的特征是增加了区域的概念防火墙的定义 隔离可信与不可信网络的设备/软件&#xff0c;基于策略控制流量…

Apache Doris数据库——大数据技术

Apache Doris一、简介1.1、Apache Doris简介1.2、Apache Doris 与传统大数据架构相比1.3、doris是java团队掌控大数据能力最优选择1.4、 OLTP&#xff08;在线事务处理&#xff09; 与 OLAP&#xff08;在线分析处理&#xff09;1.5、发展历程1.6、应用现状1.7、整体架构1.7.1、…

Conda和pip的使用记录

Conda和pip的使用记录一、创建新的 Conda 环境二、激活环境三、安装其他包&#xff08;可选&#xff09;四、查看已有环境五、删除环境&#xff08;可选&#xff09;⚙️ Conda 下载缓慢的解决方案&#xff08;推荐使用国内镜像&#xff09;&#x1f527; 方法一&#xff1a;**…

详解Python标准库之互联网数据处理

详解Python标准库之互联网数据处理 在互联网时代&#xff0c;数据的产生、传输和处理无处不在。从电子邮件的收发到 API 接口的数据交换&#xff0c;从二进制数据的编码到 MIME 类型的识别&#xff0c;Python 标准库提供了一整套强大的工具集&#xff0c;帮助开发者轻松应对各种…

适 配 器 模 式

前阵子&#xff0c;笔者在网上淘来一个二手显示屏来搭配我装好的主机&#xff0c;但是送到手上后我却找不到电源适配器的踪迹。于是我就在家找了根电源线接上了显示屏&#xff0c;倒是能亮&#xff0c;就是屏幕闪得和机关枪似的。这是因为我的显示屏需要12V的供电&#xff0c;我…

智慧零售商品识别准确率↑32%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构设计引用自《陌讯技术白皮书》&#xff0c;禁止任何形式的未经授权转载。一、行业痛点&#xff1a;智慧零售的 "看得见的障碍"在智慧零售场景中&#xff0c;从自助结算终端到智能货架管理&#xff0c;计算机…

Linux系统编程-gcc(黑马笔记)

1 gcc的编译流程gcc编译的整个过程并且整个过程下来的每个过程。并且给出了每个阶段产物和gcc命令。1.1 数据段合并其实就是因为“块” 一次是读多个字节而不是一个字节&#xff0c;所以会将一些地址段合并从而提升效率1.2 地址回填这张图也有些问题&#xff0c;正确的结论是:地…

Git踩坑

文章目录前言❓问题分析&#xff1a;为什么你的提交会“覆盖”别人的代码&#xff1f;✅ 正确的代码提交流程&#xff08;结合你原文的说明&#xff09;**1. 确认自己在正确的分支上****2. 从主开发分支&#xff08;如 dev&#xff09;拉取最新代码并合并****3. 解决冲突&#…

sqli-labs:Less-20关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $sql"SELECT * FROM users WHERE username$cookee LIMIT 0,1";注入类型&#xff1a;字符串型&#xff08;单引号包裹&#xff09;、GET操作提示&#xff1a;参数需以闭合关键参数&#xff1a;cookee php输出语句…

基于LevitUnet的超声图像分割

完整项目包获取&#xff1a;点击文末名片本项目旨在开发一个基于深度学习的图像分割模型&#xff0c;专门用于处理医学或遥感领域的图像数据&#xff08;以 TIFF 格式存储&#xff09;。通过结合 LeViT&#xff08;基于 Vision Transformer 的轻量模型&#xff09;和 U-Net 架构…

Java 17 新特性解析与代码示例

Java 17 新特性解析与代码示例 文章目录Java 17 新特性解析与代码示例引言1. 密封类&#xff08;JEP 409&#xff09;1.1. 介绍1.2. 详细说明1.3. 代码示例1.4. 与之前功能的对比1.5. 使用场景1.6. 总结2. switch 模式匹配&#xff08;预览&#xff0c;JEP 406&#xff09;2.1.…

SQL中的GROUP BY用法

GROUP BY 是 SQL 中用来“按列分组”的子句。 它把相同值的行分到同一个组&#xff0c;然后通常配合聚合函数&#xff08;COUNT, SUM, AVG, MAX, MIN 等&#xff09;对每个组做统计&#xff0c;最终每组只返回一行结果。✅ 1. 基本语法 SELECT 列1, 列2, 聚合函数(列3) FROM 表…

AI Agent开发学习系列 - LangGraph(10): 带有循环的Looping Graph(练习解答)

在AI Agent开发学习系列 - LangGraph(9): 带有循环的Looping Graph中&#xff0c;我们学习了如何创建带有循环的Looping Graph。为了巩固学习&#xff0c;我们来做一个练习。 用LangGraph创建如下图的一个Agent: 要求&#xff1a; 输入玩家姓名通过输入的上限值和下限值之间…

【保姆级 - 大模型应用开发】DeepSeek R1 本地部署全攻略:Ollama + vLLM + PyTorch 多选方案

DeepSeek R1 本地部署全攻略&#xff1a;Ollama vLLM PyTorch 多选方案 想部署 DeepSeek-R1 模型到本地&#xff0c;开启高性能推理体验&#xff1f;本文汇总了 Ollama、vLLM 及原生 PyTorch 的部署方法&#xff0c;适合不同开发者需求。 &#x1f3af; 下载模型 (必做) ----…

使用 Vive Tracker 替代 T265 实现位姿获取(基于 Ubuntu + SteamVR)

在Dexcap这篇工作列出第二版硬件清单时&#xff0c;我注意到其使用 Vive Tracker 替代 Intel T265 来获取位姿数据&#xff0c;对这个东西的性能感到好奇&#xff0c;最近因为需要跟进相关工作&#xff0c;参与了一部分实现&#xff0c;由于这方面的中文资料相对较少&#xff0…

博物馆 VR 导览:图形渲染算法+智能讲解技术算法实现及优化

本文面向博物馆数字化开发技术员、VR 系统工程师等技术同仁们&#xff0c;聚焦图形渲染算法在博物馆 VR 导览中的核心应用&#xff0c;解决虚拟展馆还原精度不足、多终端适配卡顿、智能讲解触发延迟等实际技术问题。如有项目合作及技术交流欢迎私信作者~一、VR导览技术痛点1.3D…

zset 中特殊的操作

首先 zset 与我们常规的 redis 操作有所不同, 这里的时间复杂度基本都是 O(log N) 起步的 目录 1. zcount 2. zpopmax 1. zcount zcount key min max : 这里求的是 key 中下标在 min 和 max 之间的 元素的数量, 这里是比区间 我们要是想排除端点, 就需要加上 ( , 无论是…