M5stick c PlusとENV IIIを使用したプログラム|温度、湿度、気圧の値を液晶パネルに表示(旧情報)

2024年02月24日 更新

この記事はプログラム更新前のものです。記事に記載されているプログラム内容を更新した最新の記事を投稿しました。

詳しくは以下のリンク先をご確認ください。

https://fa-vivorock-mura.com/m5stick-c-plusenv-iii-ver240224/

はじめに

たくさんの先輩プログラマさんたちが投稿しまくった内容で、ほとんどの人はご存じかもしれません💦

初めてのブログということもあり、最初のプログラム投稿は比較的ハードルの低いものにさせてください<(_ _)>

またちょっと嵌ってしまったので、その改善策も含め記録します。

概要

使用するもの

    • M5 stick c Plus
    • ENV III Unit

 

  • chat GPT(お好み)

プログラム環境と言語

  • Arduino IDE
  • C++

プログラム開始

まずArduino IDEを立ち上げ、ファイル→スケッチ例→M5Unit-ENV→Unit_ENVIII_M5stickCPlusを選択しクリックします。

そうしたら下図のように中国語のコメント入りのプログラムが出力されます。

これではわかりづらいため、1行目から15行目のコメントは消し、chat GPTに日本語コメントの追加を依頼します。

Arduino IDE内のプログラムをCtrl+A→Ctrl+Cでコピペし、chat GPTにCtrl+Vで貼り付けます。すると以下のようなコメント付きのプログラムが返ってきました。

#include <M5StickCPlus.h>
#include "M5_ENV.h"


SHT3X sht30;
QMP6988 qmp6988;


float tmp      = 0.0;
float hum      = 0.0;
float pressure = 0.0;


void setup() {
    M5.begin();             // M5StickCPlusの初期化
    M5.Lcd.setRotation(3);  // 画面を回転させる
    Wire.begin(32,
               33);  // Wireの初期化、I2Cバスを追加
    qmp6988.init(); //気圧センサの初期化
    M5.lcd.println(F("ENVIII Unit(SHT30 and QMP6988) test"));
}


void loop() {
    pressure = qmp6988.calcPressure();
    if (sht30.get() == 0) {  // SHT30のデータを取得
        tmp = sht30.cTemp;   // SHT30から得られた温度を保存。                        
        hum = sht30.humidity;  // SHT30から得られた湿度を保存。                               
    } else {
        tmp = 0, hum = 0;
    }
    M5.lcd.fillRect(0, 20, 100, 60,
                    BLACK);  // 画面を黒で塗りつぶす(画面をクリアする)。
    M5.lcd.setCursor(0, 20);
    M5.Lcd.printf("Temp: %2.1f  \r\nHumi: %2.0f%%  \r\nPressure:%2.0fPa\r\n",
                  tmp, hum, pressure);
    delay(2000);
}

これで書き込みましたが、うまくいきませんでした。

液晶パネルが「ENVIII Unit(SHT30 and QMP6988) test」を表示したまま、動きません。

少し前に私が作成したENVIIIを使用した別のプログラムを確認すると温湿度センサの初期化命令の「sht30.init();」というのが入っていませんでした。

早速「sht30.init();」を追加し、また文字も小さいため文字サイズの命令も追加しました。

最終的なプログラムは以下のようになりました。

#include <M5StickCPlus.h>
#include "M5_ENV.h"


SHT3X sht30;
QMP6988 qmp6988;


float tmp      = 0.0;
float hum      = 0.0;
float pressure = 0.0;


void setup() {
    M5.begin();             // M5StickCPlusの初期化
    M5.Lcd.setRotation(3);  // 画面を回転させる。
    Wire.begin(32,
               33);  // Wireの初期化、I2Cバスを追加。
    qmp6988.init(); //気圧センサの初期化
    sht30.init();   //温湿度センサの初期化
    M5.lcd.println(F("ENVIII Unit(SHT30 and QMP6988) test"));
}


void loop() {
    pressure = qmp6988.calcPressure();
    if (sht30.get() == 0) {  // SHT30のデータを取得。 
        tmp = sht30.cTemp;   // SHT30から得られた温度を保存。              
        hum = sht30.humidity;  // SHT30から得られた湿度を保存。                               
    } else {
        tmp = 0, hum = 0;
    }
    M5.lcd.fillRect(0, 20, 100, 60,
                    BLACK);  // 画面を黒で塗りつぶす(画面をクリアする)。
    M5.lcd.setCursor(0, 20);
    M5.Lcd.setTextSize(2); //文字サイズ指定
    M5.Lcd.printf("Temp: %2.1f  \r\nHumi: %2.0f%%  \r\nPressure:%2.0fPa\r\n",
                  tmp, hum, pressure);
    delay(2000);
}

「sht30.init();」はvoid setupの中に、またセンサ値だけ大きく表示させたかったので、「M5.Lcd.setTextSize(2);」をM5.Lcd.printfの前に書き込みました。

結果は以下の写真のようになりました。

無事温度、湿度、気圧が表示されるようになりました。

一度やったことのあるプログラムとは言え、まさか嵌ってしまうとは、、。

元のサンプルプログラムにも入っていませんでしたし、数か月前にプログラムした際は無くても正常に動いたはずなのですが、ここ最近でライブラリプログラムが変わってしまったんですかね?

冷静に考えれば、気圧センサの初期化指令は必要で、温湿度センサの初期化は無くてもOKのほうが不思議ではありますが、、、。

知っている人がいらっしゃったらコメントで教えてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA



reCaptcha の認証期間が終了しました。ページを再読み込みしてください。