本記事の内容
Raspberry Pi PicoにDHT11デジタル温度湿度センサを取り付けて、気温と湿度を測定してみました。
SSD1306有機ELディスプレイを用いて、測定した気温と湿度を画面表示させるコードも用意しています。
DHTセンサのおさらい
DHTセンサとは、空気中の温度と湿度を同時に測定することができる汎用デジタルセンサです。
DHT11とDHT22の二種類が広く知られていますが、違いは以下の通りです。測定範囲と精度が優れている方がDHT22で、安価な方がDHT11と理解すればいいでしょう。
基本的にDHT11の測定範囲があれば、たいていの環境では気温も湿度も測定できます。
DHT11 | DHT22 | |
測定温度 | 0~50°C(±2°C) | -40~80°C(±0.5°C) |
測定湿度 | 20~80%(±5%) | 0~100%(±2-5%) |
サンプリング時間 | 1秒 | 2秒 |
値段 | 310円/個~ | 620円/個~ |
必要なもの
- Raspberry Pi Pico
- DHT11センサ
- (SSD1306有機ELディスプレイ)
配線
DHT11とRaspberry Pi Picoは以下の通り繋ぎます。DHT11のデジタル出力ピンは、Raspberry Pi Picoの任意のGPIOピンに繋ぎ、GNDの隣のピンは今回は使用しません。
DHT11 | Raspberry Pi Pico | SSD1306 |
VCC | ㊱3V3(OUT) | VDD |
OUT | ⑳GP15 | |
NONE | ||
GND | ㊳GND | GND |
㉒GP17 | SCK | |
㉑GP16 | SDA |
DHT11の配線を逆にすると、ショートして一瞬で焼け焦げかねないので、くれぐれも気を付けてください。
プログラムコード
dht.pyの用意
先人の知恵を拝借して、Githubよりdht.pyをいただきます。ファイル名はdht.pyで問題ありません。
ssd1306.pyの用意
こちらも同様に先人の功績を拝借して、Githubから頂きます。ファイル名はssd1306.pyで問題ありません。
dht11-calc.pyの作成
本題のコードは、How to Electronics様のサイトから引用させていただきます。I2Cのピンと、DHT11と繋いだGPIOピンの記載部分のみ書き換えています。
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import utime as time
from dht import DHT11, InvalidChecksum
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=200000)
print("I2C Address : "+hex(i2c.scan()[0]).upper())
print("I2C Configuration: "+str(i2c))
oled = SSD1306_I2C(128, 64, i2c)
while True:
time.sleep(1)
pin = Pin(15, Pin.OUT, Pin.PULL_DOWN)
sensor = DHT11(pin)
t = (sensor.temperature)
h = (sensor.humidity)
print("Temperature: {}".format(sensor.temperature))
print("Humidity: {}".format(sensor.humidity))
oled.fill(0)
oled.text("Temp: ",10,10)
oled.text(str(sensor.temperature),50,10)
oled.text("*C",90,10)
oled.text("Humi: ",10,30)
oled.text(str(sensor.humidity),50,30)
oled.text("%",90,30)
time.sleep(1)
oled.show()
実行結果とまとめ
問題なくDHT11センサから取得した気温と湿度の値を、SSD1306有機ELディスプレイに表示させることができました。
DHT11センサと22センサの両方を使ってみましたが、これと言った違いは感じられませんでした。DHT11の方が安くて小さいので、案外使い勝手が良いかもしれません。
コメント