M5StackでENV.ⅢSENSORを動かしてみました。
使用したもの:M5Stack Basic V2.7、Arduino IDE 2.2.1(Windows11)
QMP6988もI2Cの関数で読み取ろうと思いましたが計算結果が違うような気がするのでライブラリを使うことにしました。(計算が大変…)
Arduinoのinoファイルは以下のようになりました。
#include <M5Stack.h>
//#include <M5_ENV.h>
#include <QMP6988.h>
TFT_eSprite sprite = TFT_eSprite(&M5.Lcd);
QMP6988 qmp;
void setup() {
M5.begin();
dacWrite(25, 0);
Wire.begin(21,22);
qmp.init();
}
void loop() {
M5.update();
sprite.setColorDepth(8);
sprite.createSprite(M5.Lcd.width(),M5.Lcd.height());
sprite.setCursor(0,0);
sprite.printf("M5Stack Basic V2.7");
sprite.setCursor(60,230);
sprite.printf("A");
sprite.setCursor(155,230);
sprite.printf("B");
sprite.setCursor(250,230);
sprite.printf("C");
//eye
sprite.drawLine(104, 101, 104, 109, 0xFFFFFF);
sprite.drawLine(105, 100, 105, 110, 0xFFFFFF);
sprite.drawLine(106, 101, 106, 109, 0xFFFFFF);
sprite.drawLine(204, 101, 204, 109, 0xFFFFFF);
sprite.drawLine(205, 100, 205, 110, 0xFFFFFF);
sprite.drawLine(206, 101, 206, 109, 0xFFFFFF);
//mouth
sprite.drawLine(175, 168, 185, 168, 0xFFFFFF);
sprite.drawLine(135, 169, 185, 169, 0xFFFFFF);
sprite.drawLine(125, 170, 185, 170, 0xFFFFFF);
sprite.drawLine(125, 171, 155, 171, 0xFFFFFF);
sprite.drawLine(125, 172, 135, 172, 0xFFFFFF);
if(M5.BtnA.isPressed()){
sprite.drawLine(43, 210, 53, 220, 0xFFFFFF);
sprite.drawLine(63, 210, 63, 220, 0xFFFFFF);
sprite.drawLine(83, 210, 73, 220, 0xFFFFFF);
}
if(M5.BtnB.isPressed()){
sprite.drawLine(138, 210, 148, 220, 0xFFFFFF);
sprite.drawLine(158, 210, 158, 220, 0xFFFFFF);
sprite.drawLine(178, 210, 168, 220, 0xFFFFFF);
}
if(M5.BtnC.isPressed()){
sprite.drawLine(233, 210, 243, 220, 0xFFFFFF);
sprite.drawLine(253, 210, 253, 220, 0xFFFFFF);
sprite.drawLine(273, 210, 263, 220, 0xFFFFFF);
}
//SHT30
Wire.beginTransmission(0x44);
Wire.write(0x2C);
Wire.write(0x06);
Wire.endTransmission(true);
Wire.requestFrom(0x44,6);
unsigned int tmsb = Wire.read();
unsigned int tlsb = Wire.read();
unsigned int tcrc = Wire.read();
unsigned int hmsb = Wire.read();
unsigned int hlsb = Wire.read();
unsigned int hcrc = Wire.read();
float temp = -45+(175*((256*tmsb)+tlsb)/65535.0);
float humi = (100*((256*hmsb)+hlsb)/65535.0);
sprite.setCursor(0,10);
sprite.printf("Temp:%2.2f`C",temp);
sprite.setCursor(0,20);
sprite.printf("Humi:%2.1f%%",humi);
//
float pres = qmp.calcPressure() / 100;;
sprite.setCursor(0,30);
sprite.printf("Pres:%4.2fhPa",pres);
//
sprite.pushSprite(0,0);
}
ーおまけー
I2Cの関数で書こうと頑張っていた時の写真です。計算結果が違う気がします。なぜかはわかりません。
コメント