はじめに
この記事は以前投稿した記事を最新情報をもとにアップデートする目的で投稿しました。
対象の過去記事については以下のリンク先をご確認ください。
https://fa-vivorock-mura.com/enviii/
趣旨
以前ENV IIIを用いたM5stick c Plus用のプログラムを投稿していましたが、includeファイルのアップデートが行われたそうです。プログラム修正を行ったので最新版を投稿します。変更したのはプログラムのみで、機器構成も実行結果も変更はありません。
プログラム
2024年2月24日時点での最新プログラムです。
#include <M5StickCPlus.h>
#include "M5UnitENV.h"
SHT3X sht3x;
QMP6988 qmp;
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バスを追加。
if (!qmp.begin(&Wire, QMP6988_SLAVE_ADDRESS_L, 32, 33, 400000U)) {
M5.lcd.println("Couldn't find QMP6988");
while (1) delay(1);
}
if (!sht3x.begin(&Wire, SHT3X_I2C_ADDR, 32, 33, 400000U)) {
M5.lcd.println("Couldn't find SHT3X");
while (1) delay(1);
}
M5.lcd.println(F("ENVIII Unit(SHT30 and QMP6988) test"));
}
void loop() {
pressure = qmp.calcPressure();
if (sht3x.update()) {
tmp = sht3x.cTemp; // SHT30から得られた温度を保存。
hum = sht3x.humidity; // SHT30から得られた湿度を保存。
}
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);
}
プログラムを書き込む際、エラーのような赤文字文章が続きましたが、書き込みはでき、問題なく実行もできました。
変更の備忘録
元のプログラムからがっつり変わりました。今回のincludeファイルの更新に伴い、スケッチ例「Unit_ENVIII_M5stickCPlus.ino」も更新されています。スケッチ例では検出結果をシリアルモニタに表示させるものでした。私の元のプログラムでは画面に表示するものだったのでその機能は残しつつ、スケッチ例を参考に試行錯誤しながら修正しました。
スケッチ例はArduino IDEの「ファイル」→「スケッチ例」→「M5Unit-ENV」の中にありました。
感想(というか愚痴?聞き流してください)
includeファイルが変わってしまうと昔あったプログラムが使えなくなってしまう可能性もあるんだと今回経験できました。会社のプログラムでは基本ラダープログラムが主だったので、アップデートでプログラムを変更するという機会があまりありませんでした。大手のPLCとラダープログラミングソフトの組み合わせと違い、格安のマイコンと無料プログラミングソフトの組み合わせはコストを安く抑えられるのですが、その分自己責任の範囲が大きくなりますね。会社で構築する際はこのリスクを意識したうえで推進しようと思います。