
温度・湿度計測用センサーモジュールのDHT を使ってみます。
DHT11 | DHT22 |
![]() |
![]() |
温度(範囲-20~+60℃ 、精度 ±2℃) 湿度(範囲 5~95% 、精度 25℃で±5%) |
温度(範囲 -40~+80℃ 、 精度 max ±1℃) 湿度(範囲 0~99.9% 、 精度 25℃で±2%) |
母艦としてラズパイ4。
開発環境は、Raspberry Pi OS にデフォルトでインストールされているThonny IDE。
MicroPython をインストールしておきます。
結線
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import dht import machine import time # Initialize DHT11 sensor on GPIO 16 d = dht.DHT11(machine.Pin(16)) # Continuously read and print temperature and humidity while True: d.measure() print("Temperature:" ,d.temperature()) # Print temperature print("Humidity:" ,d.humidity()) # Print humidity time.sleep_ms(1000) # Read every second |
同様に、pin番号がGP16でモジュールがDHT22の場合、コードは以下のようになります。
d = dht.DHT22(machine.Pin(16))
温度・湿度・気圧計測用センサーモジュールのAE-BME280 を使ってみます。
Pico とはI2C 接続する場合は、J3 に半田を流し込んでジャンパーしておきます。
結線
上記と同様に母艦はラズパイ4、開発環境はThonny IDE です。
PicoのI2Cシリアル通信は2系統あります(0,1)、そのうちの0を使用します。
以下を実行して接続を確認します。
1 2 3 4 5 |
import machine sda=machine.Pin(16) scl=machine.Pin(17) i2c=machine.I2C(0,sda=sda, scl=scl, freq=400000) print(i2c.scan()) |
[118]が表示されば正解。もし何も表示されない場合は、接続が間違っているか、USBケーブルを抜き差しして実行してみてください。
メニュのToolsのManage packages…を選択。
メニュが非表示の場合は、右端のSwitch to regular mode の文字リンクをクリックしてThonnyを再起動。元に戻す場合は、Tools ->Options…->UI mode -> simple で再起動。
フィールドにbme280と入力して、Search on PyPI をクリック。
インデックス画面からmicropython-bme280 を選択
installをクリック。
以下のコードを実行。
1 2 3 4 5 6 7 8 |
from machine import Pin, I2C from time import sleep from bme280 import BME280 i2c = I2C(0, sda = Pin(16), scl = Pin(17), freq = 40000) bme = BME280(i2c = i2c) while True: print(bme.values) sleep(2) |
このコードなら、2秒間隔で、温度・気圧・湿度の順で表示されます。
温度:bme.values[0]
気圧:bme.values[1]
湿度:bme.values[2]
より廉価なセンサーモジュール(HW-611 BMP280)で温度と気圧を測ってみます。
これはBME280から湿度計測の機能を省いたもので、これをI2C接続で使ってみます。
結線
上記と同様にThonny IDE の環境です。
接続を確認してみます。
1 2 3 4 5 |
import machine sda=machine.Pin(0) scl=machine.Pin(1) i2c=machine.I2C(0,sda=sda, scl=scl, freq=400000) print(i2c.scan()) |
118と表示されれば正解です。
BME280用のツールを読み込みます。
メニュから「ツール」->「Manage Packages」。
「bme280」と入力。
「micropython-bme280」を選んで「インストール」をクリック
測定してみます。
1 2 3 4 5 6 7 |
from machine import Pin, I2C from time import sleep from bme280 import BME280 i2c = I2C(0, sda = Pin(0), scl = Pin(1), freq = 40000) bme = BME280(i2c = i2c) print(bme.values) |
3つ目は湿度ですが、BMP280では機能が省かれているので「0.00%」になっています。
Appendix
AE-BME280をラズパイで使う場合
第39回「ラズベリーパイ(ラズパイ)で温度・湿度・気圧をまとめて取得!AE-BME280でIC2通信」
あるいは、BME280 搭載のSwitchScience のセンサーモジュールをラズパイで使ってみる
Appendix2
I2C の0にアサインしたBME280 のデータをI2C の1にアサインしたOLEDに表示
動いているかどうかはインナーLEDの点滅で確認
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
from machine import Pin, I2C import time from time import sleep from bme280 import BME280 import ssd1306 #BME280 i2c0 = I2C(0, sda = Pin(16), scl = Pin(17), freq = 40000) bme = BME280(i2c = i2c0) #OLED i2c1 = I2C(1, sda = Pin(18), scl = Pin(19), freq = 400000) oled = ssd1306.SSD1306_I2C(128, 64, i2c1) #inner LED led = Pin('LED', Pin.OUT) while True: #print(bme.values) temp = bme.values[0] pres = bme.values[1] humd = bme.values[2] oled.fill(0) now = time.localtime() oled.text("Tempe:" + str(temp), 0, 5) oled.text("Humid:" + str(humd), 0, 20) oled.text("Press:" + str(pres), 0, 35) oled.text(str(now[3])+":"+str(now[4])+":"+str(now[5]),0,50) oled.show() led.on() sleep(1.0) led.off() sleep(1.0) |
Appendix3
BME280 を使った他のモジュールとして、SWITCHSCIENCE 社のものがあります。
結線
Leave a Reply