目次
1.前回のまとめ
2.温湿度と気圧を表示する
3.スタンドアロン化
4.完成品
5.まとめ
1.前回のまとめ
houwouです。
前回の投稿でRaspberry Pi Pico Wと有機ELディスプレイSSD1306、気圧センサMPL115A2、温湿度センサDHT20のI2C通信が無事に成功した。
今回は少し実用的なスタンドアロンの温湿度気圧計を設計してみる。
2.温湿度と気圧を表示する
まずはコーディング。
from machine import I2C, Pin
from time import sleep
from dht20 import DHT20
from mpl115a2 import MPL115A2
from ssd1306 import SSD1306_I2C
def show_display(display, temp, humi, pres):
display.fill(0)
display.text('SSD1306 TEST', 5, 2, True)
display.text(f'TEMP: {temp}C', 5, 18, True)
display.text(f'HUMI: {humi}%', 5, 34, True)
display.text(f'PRES: {pres}hPa', 5, 50, True)
display.show()
return
i2c = I2C(0, scl=Pin(13), sda=Pin(12))
dht20 = DHT20(i2c)
mpl115a2 = MPL115A2(i2c)
display = SSD1306_I2C(128, 64, i2c)
while True:
temp = dht20.dht20_temperature()
humidity = dht20.dht20_humidity()
air_pressure = mpl115a2.air_pressure()
show_display(display, str(round(temp,1)), str(round(humidity,1)), str(round(air_pressure,1)))
sleep(1)
main.pyとしてRaspberry Pi Pico W本体に保存して起動時に自動で走るようにする。
有機ELディスプレイへの出力はshow_displayとして関数化。
I2Cのfrequencyを100kHzにしていたらSSD1306が正常に動作しなかったのでデフォルトの400kHzに設定。
1秒ごとに温度、湿度、気圧を取り込んでディスプレイに表示させるようにループする。
温度、湿度、気圧が小数第5位や第3位まで表示してくれて非常に長いのでいずれも小数第1位に丸めるためにround関数を使用。(正確な四捨五入ではないらしいが、今回は正確さより手軽さを選択した。)
参考:note.nkmk.me - Pythonで小数・整数を四捨五入するroundとDecimal.quantize
そしてできたのがこちら。
それにしても「℃」や「°」というのが表示できなくて「C」で代用したためなんだか不格好。
3.スタンドアロン化
Raspberry Pi Pico WはUSBからだけでなく電池からの電源供給でも稼働するらしい。
参考:Introduction to Raspberry Pi Pico guide
この仕組みを使ってスタンドアロン化してみる。
RP2040のデータシートに詳細が載っていた。
VSYSに1.8~5.5Vを供給するらしい。(多分GNDはどこでもいいんだろうなぁ。)
今回は手元にあった単四電池3本の4.5Vを供給する。
あとは適当にスイッチと10μFの電解コンデンサを組み込んでできたのがこちら。
ラバースイッチと電池ボックスは古いおもちゃから抜き取ったものを再利用。
これでスイッチを押している間は1秒ごと自動更新する温湿度気圧計ができたはず。
4.完成品
無事に完成!
ただ、接触が悪いのかスイッチが悪いのか少々動作が不安定。
起動にコツがいる気難しい装置が出来上がった。
5.まとめ
気になったときに温度、湿度、気圧がわかるちょっとだけ便利な装置ができた。
動作が不安定だったりスイッチの使い勝手が悪かったりと課題はあるが、ひとまず使える温湿度気圧計が出来上がった。
次は折角Raspberry Pi Pico Wで実装したから無線LAN機能を活用してみたい。