M5StackでENV.Ⅲを動かしてみた

M5Stack

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の関数で書こうと頑張っていた時の写真です。計算結果が違う気がします。なぜかはわかりません。

コメント

タイトルとURLをコピーしました