MicroPython的午睡(133)M5Stack UIFlow2、DHT11温湿度センサ

Joseph Halfmoon

前回はUIFlow2版MicroPython搭載のM5Stackに定番の気圧センサBMP280を接続。今回はこれまた定番の温湿度センサDHT11を接続してみます。過去回でESP32版MicroPythonでDHT11を制御していたのでお楽。M5Stackらしくお愛想にLCDに温湿度を表示するようにいたしました。

※「MicroPython的午睡」投稿順 Indexはこちら

※M5Stack Grayに書き込んだUIFlow2.0 (Alpha-27)対応のMicroPython処理系とWindowsパソコン上で動作しているThonny 4.0.1で動作確認しています。

UIFlow2におけるDHT系温湿度センサのサポート

DHTxx系の温湿度センサ、何種類かあってそのインタフェースも異なるのですが、UIFlow2版のMicroPythonのサポートは充実しています。

まずI2CインタフェースのDHT12についてはUIFlow2のdriver群の中でサポートされています。DHT12supported

一方、独特な1線式インタフェースのDHT11とDHT22(AM2302)については、ESP32版MicroPythonの標準的な実装では dht モジュールとしてサポートされており、UIFlow2版でもこのモジュールは含まれます。DHT11_DHT22supported

今回接続するのはDHT11なので、dhtモジュール内のクラスを使って実験してみます。

過去回でのDHT11とESP32系の接続

既に何度か過去回でDHT11をESP32系マイコン上のMicroPythonで操作してみています。

    • M5ATOMLite

MicroPython的午睡(49) ATOMLite、温湿度を測ってNode-RED報告

    • ESP32-DevKitC

MicroPython的午睡(106) ESP32版、DHT11を接続してみる

今回は上記のESP32-DevKitCで作成したプログラムをチョイ変でM5Stackに載せてみてます。

M5Stack Grayへの接続

今回、接続したのは「Grove化」されたコネクタ付のDHT11モジュールです。DHT11は、5V電源でも3V電源でも動作OKのようなので、以下のように電源電圧3.3Vを使用し、M5Stackの側面のピンソケットに出ているGPIO2番端子にDATA線を直結してます。M5Stack_DHT11_Schematic

 

今回実験のMicroPythonスクリプト

先ほど述べたように、ESP32-DevKitC用に作成したMicroPythonスクリプトをM5 Stack用にチョイ直し(USBシリアルにprint出力するだけでなく、M5StackのLCD上にも温度、湿度を出力するように)したものであります。DHT11とのインタフェースはソフトウエア制御なので、pin番号を変更すれば他の端子に接続することもOKじゃないかと思います(確かめてないケド。)

# dht11.py

import dht
import machine
import M5
import time

dht11pin = 2

class ESP32DHT11:
    def __init__(self, pnum):
        self.dht11 = dht.DHT11(machine.Pin(pnum))
        self.TEMP = None
        self.HUMI = None
    
    def measure(self):
        self.dht11.measure()
        self.TEMP = self.dht11.temperature()
        self.HUMI = self.dht11.humidity()
        return (self.TEMP, self.HUMI)

def main():
    M5.begin()
    M5.Lcd.clear(0)
    print("M5STACK, test DHT11") 
    dht11 = ESP32DHT11(dht11pin)
    
    loopCounter = 0
    while True:
        loopCounter += 1
        tpl = dht11.measure()
        print("LOOPCOUNTER: ", loopCounter)
        print("TEMPERATURE: ", tpl[0])
        print("HUMIDITY   : ", tpl[1])        
        M5.Lcd.setCursor(16, 16)
        M5.Lcd.print("TEMP: "+str(tpl[0]))
        M5.Lcd.setCursor(16, 32)
        M5.Lcd.print("HUMI: "+str(tpl[1]))
        time.sleep(6)
            
if __name__ == "__main__":
    main()
実機動作確認

まずはUSBシリアルに出力された測定結果の一発目。最初19℃、相対湿度74%っす。ShellResults

しばらく動かし続けて安定したところの様子が以下に。LCDにTEMP: 20、HUMI: 71なる数字が出ております(ちょっと小さい文字で見ずらいけど。)

M5Stack_DHT11_DUT_EC

同じESP32系の実装、無問題。

MicroPython的午睡(132)M5Stack UIFlow2、BMP280圧力センサ へ戻る

MicroPython的午睡(134)M5Stack UIFlow2、CLOCK出力 へ進む