MicroPython的DHT20代码分享

 1 '''''''''
 2 本代码参考于以下页面
 3 http://47.106.166.129/Embeded/pico-micropython-grove
 4 '''''''''
 5 from machine import I2C
 6 from time import sleep_ms
 7 class DHT20(object):
 8     def __init__(self, i2c):
 9         self.i2c = i2c
10         if (self.read_status() & 0x80) == 0x80:
11             self.dht20_init()
12 
13     def measure(self):
14         self.i2c.writeto(0x38, bytes([0xac,0x33,0x00]))
15         sleep_ms(80)
16         cnt = 0
17         while (self.read_status() & 0x80) == 0x80:
18             sleep_ms(1)
19             if cnt >= 100:
20                 cnt += 1
21                 break
22         data = self.i2c.readfrom(0x38, 7, True)
23         n = []
24         for i in data[:]:
25             n.append(i)
26         self.data = n
27 
28     def read_status(self):
29         data = self.i2c.readfrom(0x38, 1, True)
30         return data[0]
31 
32     def dht20_init(self):
33         i2c.writeto(0x38, bytes([0xa8,0x00,0x00]))
34         sleep_ms(10)
35         i2c.writeto(0x38, bytes([0xbe,0x08,0x00]))
36 
37     def calc_crc8(self,data):
38         crc = 0xff
39         for i in data[:-1]:
40             crc ^= i
41             for j in range(8):
42                 if crc & 0x80:
43                     crc = (crc << 1) ^ 0x31
44                 else:
45                     crc = (crc << 1)
46         return crc
47 
48     def temperature(self):
49         data = self.data
50         Temper = 0
51         if 1:
52             Temper = (Temper | data[3]) << 8
53             Temper = (Temper | data[4]) << 8
54             Temper = Temper | data[5]
55             Temper = Temper & 0xfffff
56             Temper = Temper / 1048576) * 200 - 50
57         return Temper
58 
59     def humidity(self):
60         data = self.data
61         humidity = 0
62         if 1:
63             humidity = (humidity | data[1]) << 8
64             humidity = (humidity | data[2]) << 8
65             humidity = humidity | data[3]
66             humidity = humidity >> 4
67             humidity = humidity / 1048576 * 100
68         return humidity

 

调用的话,用以下代码

 1 import machine
 2 import time
 3 from machine import Pin, I2C
 4 from DHT20 import DHT20
 5 
 6 
 7 #定义我们DHT20的两个接口
 8 scl = Pin(5, Pin.OUT)
 9 sda = Pin(4, Pin.OUT)
10 
11 #初始化一个I2C对象,指定SCL 以及SDA脚
12 i2c = I2C(scl=scl, sda=sda)
13 
14 #初始化DHT20传感器
15 sensor = DHT20(i2c)
16 
17 while True:
18     sensor.measure()
19     print("温度:",str(sensor.temperature()))
20     print("湿度:",str(sensor.humidity()))
21     time.sleep(1)

 

 

代码在ESP8266上测试通过!

posted @ 2022-08-08 22:22  孤灯空明  阅读(259)  评论(0)    收藏  举报