2017年8月20日 星期日

MicroPython讀取DHT11

MicroPython讀取DHT11



前言:
      DHT12
是奧松家的一款數字溫濕度感測器,是我們所熟知的DHT11的升級版。DHT12溫度檢測範圍是-20~60℃,溫度解析度為0.1℃DHT11測量溫度為0~50℃,溫度測量解析度為1℃)。DHT12支援I2C和單匯流排通信,單匯流排模式下相容DHT11,但無法讀取0℃以下溫度,溫度測量解析度為1℃DHT12濕度測量範圍20~~99%,與DHT11無異。DHT12資料處理與DHT11有細微區別,所以自己稍微改了一下MicroPython官方模組以適配DHT12

硬體:
NodeMCU                           *1
DHT12                             *1
麵包板                            *1
杜邦線                            *4

軟體:
uPyCraft v0.25




本例使用的是單匯流排模式。
接線如下:
VDD->3V3
SDA->pin(4) ===> NodeMcu D2
GND->GND
SCL->GND


#==================DHT11.py=====================
#Pin(4) ==  D2
#=================
import DHTsensor
import machine
import time
d = DHTsensor.DHT11(machine.Pin(4))
while True:
  d.measure()
  print("temperature :",d.temperature())
  time.sleep(1)
  print("humidity :",d.humidity())



#==================DHTsencor.py===================

import esp

class DHTBase:
    def __init__(self, pin):
        self.pin = pin
        self.buf = bytearray(5)

    def measure(self):
        buf = self.buf
        esp.dht_readinto(self.pin, buf)
        if (buf[0] + buf[1] + buf[2] + buf[3]) & 0xff != buf[4]:
            raise Exception("checksum error")

class DHT11(DHTBase):
    def humidity(self):
        return self.buf[0]

    def temperature(self):
        return self.buf[2]

class DHT12(DHTBase):
    def humidity(self):
        return self.buf[0] + self.buf[1] * 0.1

    def temperature(self):
        t = self.buf[2] + self.buf[3] * 0.1
        if self.buf[2] & 0x80:
            t = -t
        return t

class DHT22(DHTBase):
    def humidity(self):
        return (self.buf[0] << 8 | self.buf[1]) * 0.1

    def temperature(self):
        t = ((self.buf[2] & 0x7f) << 8 | self.buf[3]) * 0.1
        if self.buf[2] & 0x80:
            t = -t
        return t

沒有留言:

張貼留言

Node-Red & ModeBus FC=1

Node-Red & ModeBus FC=1 write address=0..7   8bits read address=16..23 8bits  [{"id":"cf7c1253d4d997dd","type&q...