【初心者向け・MicroPythonコード有】SSD1306でグラフ表示

dht22-graph-topRaspberry Pi

本記事の内容

前回に引き続き、DHT22センサで取得した気温を直観的に見れるように、気温の変化を時系列グラフで表示させてみました。

Raspberry Pi Pico初心者でも作成しやすいように、サンプルコードとディスプレイ表示部分の解説を載せています。

必要なもの・配線

  • Raspberry Pi Pico
  • DHT22センサ
  • SSD1306有機ELディスプレイ

必要な部品と配線は前回と変わりありません。配線図に関しては、前回の記事を参考にしてください。

created by Rinker
Raspberry Pi
¥919(2024/04/15 11:03:51時点 Amazon調べ-詳細)
uxcell DHT22温湿度センサー DC 3V-5.5V 長距離信号伝送 デジタル 固定穴径2.9mm

グラフを表示させるプログラムコード

from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
from DHT22 import DHT22
import time

dht22 = DHT22(Pin(16,Pin.IN,Pin.PULL_UP))

i2c = I2C(1, scl=Pin(15), sda=Pin(14), freq=200000)
oled = SSD1306_I2C(128, 64, i2c)

oled.rect(8, 8, 112, 40, 1)
oled.text("measuring",24,16,1)
oled.text("in progress",16,32,1)
oled.show()
time.sleep(6)
oled.fill(0)

while True:
    
    oled.line(0,0,0,50,1)#グラフ縦軸
    oled.text("0",2,40,1)#縦軸メモリ
    oled.text("40",2,0,1)#縦軸メモリ

    for x in range(100):
        T, H = dht22.read()
        if T is None:
            T = 0
            H = 0
        oled.fill_rect(0, 56, 128, 64, 0)#最下部の気温湿度表示部分を消す
        oled.text("T={:3.1f}C".format(T),0,56)
        oled.text("H={:3.1f}%".format(H),64,56)
                
        oled.line(x+20,int(40-T),x+20,int(40-T)-1,1)  #プロットを書く
        if x == 99: #グラフ右端の時は、先頭を消す
            x = -1           
        oled.line(x+21,40,x+21,0,0)   # 一つ先のプロットを消す
        oled.show()
        time.sleep(60)

SSD1306有機ELディスプレイとはI2C通信で繋ぎ、DHT22はライブラリを読み込んでいます。

DHT22は、起動後数秒間は気温と湿度をNoneで返します。数値の変換エラー防止のため、初期表示画面を12秒表示させてから測定・ディスプレイ表示を開始させ、エラー時は0度となるようにしています。

最下段の「time.sleep(60)」は、任意の測定間隔に変更して問題ありません。

グラフ表示コードの詳細解説

①グラフのプロットと削除

1分(60秒)ごとにxを加算して、x軸を99まで右に移動します。100分(1時間40分)でグラフの左端に帰ってきます。

oled.lineで幅1pxの気温プロットを打つと同時に、色0(黒)で一つ右のグラフ部分を塗りつぶして、2周目以降も正しいグラフが一本だけ表示されるようにしています。

②測定した気温と湿度の表示

DHT22で測定された気温と湿度を表示します。そのままでは文字が上書きされて読めなくなってしまうため、こちらも色0(黒)で一度塗りつぶしてから表示させています。

動作確認

無事に気温の変化をグラフで表示させることができました。気温の変化量が大きくないと、グラフはとても平坦になります。

まとめ

DHT22で測定した気温を時系列データとして見えるように、グラフで表示させてみました。

気温測定のみならず、グラフ表示は色々な装置に応用できるので、是非ご活用ください。

コメント