失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python树莓派 是什么_树莓派通过Python读取DHT11温湿度传感器数据

python树莓派 是什么_树莓派通过Python读取DHT11温湿度传感器数据

时间:2018-07-07 10:44:23

相关推荐

python树莓派 是什么_树莓派通过Python读取DHT11温湿度传感器数据

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,虽然并不是一款高效的传感器,但价格便宜,连接方便。

1.性能指标和特性:

工作电压范围:3.5V-5.5V

工作电流 :平均 0.5mA

湿度测量范围:20-90%RH

温度测量范围:0-50℃

湿度分辨率 :1%RH 8 位

温度分辨率 :1℃ 8位

采样周期 :1S

2.DHT11 数据结构

DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输

入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,具

体格式在下面说明。

一次完整的数据传输为40bit,高位先出。

数据格式:8bit湿度整数数据+8bit湿度小数数据

+8bit温度整数数据+8bit温度小数数据

+8bit校验和

校验和数据为前四个字节相加。

传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间

应该分开处理。如果,某次从传感器中读取如下5Byte数据:

byte4 byte3 byte2 byte1 byte0

00101101 00000000 00011100 00000000 01001001

整数 小数 整数 小数 校验和

湿度 温度 校验和

由以上数据就可得到湿度和温度的值,计算方法:

humi (湿度)= byte4 . byte3=45.0 (%RH)

temp (温度)= byte2 . byte1=28.0 ( ℃)

jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)

注意:DHT11一次通讯时间最大3ms,主机连续采样间隔建议不小于100ms。

线路连接

使用公对公杜邦线直接与树莓派连接:

DHT11的正极(+/VCC)连接4号引脚(5V);数据脚连接18号引脚(BCM 24);负极(-/GND)连接20号引脚(GND)。*注意勿将正负极接反,模块会烧毁。

编写程序

#导入函数

import RPi.GPIO as GPIO

import time

#定义数据口

channel = 18

data = []

j = 0

#初始化模式

GPIO.setmode(GPIO.BOARD)

#一秒后开始工作

time.sleep(1)

#设置GPIO接口为写入数据模式

GPIO.setup(channel, GPIO.OUT)

#输出一个低电平信号

GPIO.output(channel, GPIO.LOW)

time.sleep(0.02)

#0.02秒后输出一个高电平信号,启动模块测量

GPIO.output(channel, GPIO.HIGH)

#设置GPIO接口为读取读取数据模式

GPIO.setup(channel, http://GPIO.IN)

#等待,获取到高电平信号

while GPIO.input(channel) == GPIO.LOW:

continue

#等待,获取到低电平信号

while GPIO.input(channel) == GPIO.HIGH:

continue

#获取到高底电平信号后,开始读取模块获取数据

while j < 40:

k = 0

while GPIO.input(channel) == GPIO.LOW:

continue

while GPIO.input(channel) == GPIO.HIGH:

k +=1

if k > 100:

Break

#把获取数据放到list中

if k < 20:

data.append(0)

else:

data.append(1)

j +=1

#模块数据读取完毕,打印显示

print ("sensor is working.")

print (data)

#根据获取数据定义解析数据(5组二进制数据)

humidity_bit = data[0:8]

humidity_point_bit = data[8:16]

temperature_bit = data[16:24]

temperature_point_bit = data[24:32]

check_bit = data[32:40]

humidity = 0

humidity_point = 0

temperature = 0

temperature_point = 0

check = 0

#根据公式定义,解析温湿度数据

for i in range(8):

humidity +=humidity_bit[i] * 2 ** (7-i)

humidity_point +=humidity_point_bit[i] * 2 ** (7-i)

temperature +=temperature_bit[i] * 2 ** (7-i)

temperature_point +=temperature_point_bit[i] * 2 ** (7-i)

check +=check_bit[i] * 2 **(7-i)

tmp = humidity + humidity_point + temperature + temperature_point

#打印显示由模块数据解释的温湿度数据

if check == tmp:

print ("temperature :", temperature, "*C, humidity :", humidity, "%")

else:

print ("wrong")

print ("temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ",tmp :", tmp)

#结束进程,释放GPIO引脚

GPIO.cleanup()

运行后获得结果。*如果结果异常可尝试调整if k < 20: 中的数值

确定硬件连接正常及稳固,接触不好会使模块工作出现错误导致程序卡住。

除了自己编写程序外,还可以使用已经编译好的库:

使用 Adafruit 读取 DHT11 温湿度传感器

更新软件包

sudo apt-get update

sudo apt-get install build-essential python-dev

从GitHub获取Adafruit库

sudo git clone /adafruit/Adafruit_Python_DHT.git

安装完成后pi文件夹下新增Adafruit_Python_DHT文件夹,进入该文件夹安装该库。

cd Adafruit_Python_DHT

sudo python setup.py install

sudo python3 setup.py install

安装完成后进入examples文件夹运行AdfruitDHT.py可以获得结果。

cd examples

Python AdafruitDHT.py 11 24

*后面两个数值11代表使用的是DHT11模块,24代表着所接的GIPO引脚编号(BCM)。

运行获得结果:

在其他Python 程序中使用这个库

参照下面的方法引入Adafruit库,可以使用 “read_retry” 方法来读取 DHT11 数据:

import Adafruit_DHT

# Set sensor type : Options are DHT11,DHT22 or AM2302

sensor=Adafruit_DHT.DHT11

# Set GPIO sensor is connected to

GPIO=24

# Use read_retry method. This will retry up to 15 times to

# get a sensor reading (waiting 2 seconds between each retry).

humidity, temperature = Adafruit_DHT.read_retry(sensor, GPIO)

# Reading the DHT11 is very sensitive to timings and occasionally

# the Pi might fail to get a valid reading. So check if readings are valid.

if humidity is not None and temperature is not None:

print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))

else:

print('Failed to get reading. Try again!')

END

如果觉得《python树莓派 是什么_树莓派通过Python读取DHT11温湿度传感器数据》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。