03-Machine-2-dht.py K230外接数字温湿度传感器DHT11模块演示
dht.py 是K230外接数字温湿度传感器DHT11模块的演示程序。
01studio 的 k230_canmv_01studio镜像中,已经集成了DHT传感器驱动库,只需导入即可使用。
- DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
- 每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。
- 传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。
- 单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。
型号 | 测量范围 | 测湿精度 | 测温精度 | 分辨力 | 封装 |
DHT11 | 20-90%RH 0-50℃ | ±5%RH | ±2℃ | 1 | 4 针单排直插 |
工作原理详细介绍:
- 传感器结构:DHT11包含一个电阻式测湿元件和一个NTC测温元件,这些元件与一个高性能的8位单片机连接,用于实时采集湿度和温度数据。
- 数据传输格式:DHT11的数据传输格式是高位在前低位在后,一次传输40位数据,包括8位湿度整数数据、8位湿度小数数据、8位温度整数数据、8位温度小数数据以及最后的8位校验和。
- 校准系数:传感器内部的校准系数以程序的形式存储在OTP内存中,这些系数在检测型号的处理过程中被调用以进行数据校准。
- 通信协议:DHT11采用单总线数据格式,即单个数据引脚端口完成输入输出双向传输。数据包由5个字节(40Bit)组成,数据分小数和整数部分,一次完整的数据传输为40bit,高位先出。
- 通信过程:在通信过程中,首先将总线拉低进行数据的写入,之后释放总线停止数据写入,然后再次拉低总线开始读出数据操作。通过检测DHT信号高电平的时间来判断传入的信号的值是0还是1。
- 校验和:数据传送正确时,校验和数据等于“8bit湿度整数数据+8位湿度小数数据+8bit温度整数数据+8bit温度小数数据”所得结果的末8位。
源代码如下:
import time
import machine
import dht #导入DHT11的传感器驱动库d = dht.DHT11(machine.Pin(12))while True:try:d.measure()t = d.temperature() # eg. 23 (°C)h = d.humidity() # eg. 41 (% RH)print(f"temperature: {t}°C, humidity: {h}% RH")except OSError as e:if e.errno == 110: # ETIMEDOUTpass # Silently ignore timeout errorselse:raise # Re-raise other OSErrorsexcept Exception as e:if "checksum error" in str(e):pass # Silently ignore checksum errorselse:raise # Re-raise other exceptionstime.sleep(1)
程序特点
-
健壮性:能够处理传感器通信中的常见错误
-
持续性:遇到错误不会停止,而是继续尝试
-
实时性:每秒更新一次数据
-
简洁性:代码清晰易懂
这种设计特别适合物联网应用,其中传感器偶尔的读取失败是可以接受的,而程序的持续运行更为重要。