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のほうが不思議ではありますが、、、。
知っている人がいらっしゃったらコメントで教えてください。