M5Stack クレードルの温湿度センサー(DHT12)を使ってみる

 以前この記事でも書きましたが、 M5Stack を Maker Faire Tokyo 2018 のスイッチサイエンスさんのブースで購入した時に、特典としてクレードルをいただきました。

blog.akanumahiroaki.com

 このクレードルには温湿度センサー DHT12 が付属していたようなので、今回は MicroPython で DHT12 の値を読み取って表示してみたいと思います。ちなみにこのクレードルは単品でもこちらで販売されているようです。

Buy Products Online from China Wholesalers at Aliexpress.com

ハードウェア

 クレードルの裏面は下記写真のようになっています。右下に埋め込まれている青いものが DHT12 です。

f:id:akanuma-hiroaki:20180915215550j:plain

 クレードルは M5Stack の下部のピンに接続されます。今回は DHT12 との接続にクレードル経由で I2C を使用しますので、 SDA, SCL を使用します。ピン番号は上部のピンと同じになりますので、SDA が 21、 SCL が 22 になります。

f:id:akanuma-hiroaki:20180915215707j:plain

 クレードルと DHT12 は、ちょっと基板での記載部分が見辛いですが、左から SCL, GND, SDA, 3V3 が接続されています。

f:id:akanuma-hiroaki:20180915215744j:plain

ファームウェア

 今回は m5cloud を使用して MicroPython でファームウェアを書いていきます。 DHT12 の使用については、 m5cloud のリポジトリにライブラリが公開されていました。

github.com

 サンプルについても同じリポジトリに公開されていました。 SDA, SCL のピン番号も 21, 22 になっているので、これをこのまま使用できます。

github.com

 これを dht12.py として m5cloud 上にアップロードもしくはコピペで配置します。

f:id:akanuma-hiroaki:20180915221513p:plain

 そして main.py は下記のような内容にしました。温湿度計ということで Hygrothermograph に処理内容をまとめ、コンストラクタで RTC を同期し、 DHT12 を初期化しています。フォントの指定もしておきます。

 measure() メソッドでは DHT12 から温度と湿度を取得し、インスタンス変数に格納しておきます。

 display() メソッドでは LCD に時刻、温度、湿度を表示しています。

from m5stack import lcd
from machine import RTC
import time
import dht12

class Hygrothermograph:
    def __init__(self):
        rtc = RTC()
        rtc.ntp_sync('ntp.nict.jp', tz = 'JST-9')
        for i in range(100):
            if rtc.synced():
                break
            time.sleep_ms(10)
            
        self.sensor = dht12.DHT12()
        
        lcd.font(lcd.FONT_DejaVu24)
        lcd.setColor(lcd.WHITE)
        self.fw, self.fh = lcd.fontSize()
        
    def measure(self):
        self.sensor.measure()
        self.temperature = self.sensor.temperature()
        self.humidity = self.sensor.humidity()

    def display(self):
        lcd.clear()
        lcd.print("Time:", 0, self.fh * 0)
        lcd.print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), 10, self.fh * 1)
        lcd.print("Temperature:", 0, self.fh * 2)
        lcd.print("{} deg.".format(self.temperature), 10, self.fh * 3)
        lcd.print("Humidity:", 0, self.fh * 4)
        lcd.print("{} %".format(self.humidity), 10, self.fh * 5)

hygrothermograph = Hygrothermograph()

while True:
    hygrothermograph.measure()
    hygrothermograph.display()
    time.sleep(10)

実行結果

 それでは実行してみます。 m5cloud から upload ボタンをクリックして本体にアップロードして実行します。結果は下記の写真のようになり、時刻、温度、湿度が表示されて10秒毎に更新されていきます。

f:id:akanuma-hiroaki:20180915222531j:plain

 ちなみにクレードルの DHT12 は本体のすぐ下にあって、本体の熱の影響を受けると思いますので、実際の温度を測るには何らか工夫する必要があると思われます。

まとめ

 M5Stack の LCD にすぐに確認したい内容を表示させている場合、クレードルは見やすい角度で本体の位置をキープできるのでとても良い感じですね。とりあえず m5cloud と MicroPython でセンサーの値を読み出すこともできたので、画面表示の方も今後色々と試してみたいと思います。