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上测试通过!

浙公网安备 33010602011771号