# DHT114传感器的采集
import RPi.GPIO as GPIO
def Get_DHT114(channel=16): #获取DHT114传感器数值,默认使用端口16,按物理位置为16的口 (非wiringpi的)
data = [] #赋值data为空
j = 0 #赋值j为0
GPIO.setmode(GPIO.BOARD) #告诉程序按物理位置找GPIO头
time.sleep(1) #延时一秒
GPIO.setup(channel, GPIO.OUT) #设置channel口为输出
GPIO.output(channel, GPIO.LOW) #设置channel口为低电平
time.sleep(0.02) #延时0.02秒
GPIO.output(channel, GPIO.HIGH) #设置channel口为高电平
GPIO.setup(channel, GPIO.IN) #设置channel口为输入
while GPIO.input(channel) == GPIO.LOW: #获取将标号为channel的针的电平是否为低电平
continue #如果条件成立则则继续
while GPIO.input(channel) == GPIO.HIGH: #获取将标号为channel的针的电平是否为高电平
continue #如果条件成立则则继续
while j < 40:
k = 0 #赋值k为0
while GPIO.input(channel) == GPIO.LOW: #获取将标号为channel的针的电平是否为低电平
continue #如果条件成立则则继续
while GPIO.input(channel) == GPIO.HIGH: #获取将标号为channel的针的电平是否为高电平
k += 1 #如果条件成立则 k+1
if k > 100: #如果k大于100
break #如果条件成立则跳出
if k < 8: #如果k小于8
data.append(0) #如果条件成立则data数组加0
else:
data.append(1) #如果条件不成立则data数组加1
j += 1 # j+1
print ("sensor is working.")
print (data) #输出data数据
humidity_bit = data[0:8] #将data数组的0-8位赋值给改变量
humidity_point_bit = data[8:16] #将data数组的8-16位赋值给改变量
temperature_bit = data[16:24] #将data数组的16-24位赋值给改变量
temperature_point_bit = data[24:32] #将data数组的24-32位赋值给改变量
check_bit = data[32:40] #将data数组的32-40位赋值给改变量
##############################全部赋值为0
humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0
##############################
for i in range(8): #根据公式循环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, "%")
mytemp = '%f' %temperature
myhumi = '%f' %humidity
mycheck = '%d' %check
mytmp = '%d' %tmp
tmp_output = open(family_path+r'/tmp_data.txt', 'w') #创建一个 file 对象
hud_output = open(family_path+r'/hum_data.txt', 'w') #创建一个 file 对象
checks = open(family_path+r'/check.txt', 'w') #创建一个 file 对象
tmps = open(family_path+r'/tmp.txt', 'w') #创建一个 file 对象
tmp_output.write(mytemp) #将mytemp的值写入tmp_data.txt文件中 温度
hud_output.write(myhumi) #将myhumi的值写入hum_data.txt文件中 湿度
checks.write(mycheck) #将mycheck的值写入check.txt.txt文件中
tmps.write(mytmp) #将mytmp的值写入tmp.txt文件中
tmp_output.close
hud_output.close
checks.close
tmps.close
GPIO.cleanup()
else:
print ("wrong")
checks = open(family_path+'/check.txt', 'w') #创建一个 file 对象
tmps = open(family_path+'/tmp.txt', 'w') #创建一个 file 对象
checks.write('%d' %check) #将check的值写入check.txt.txt文件中
tmps.write('%d' %tmp) #将tmp的值写入check.txt.txt文件中
checks.close
tmps.close
print ("temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp)