m5stickc-plus2
Código
`#include <M5GFX.h>
#include <M5Unified.h>
// sensores
#include <M5UnitUnified.h>
#include <M5UnitUnifiedENV.h>
// tipografia
#include "mFont.h"
#include "hFont.h"
#include "sFont.h"
static int32_t Disw;
static int32_t Dish;
unsigned short grays[13];
// M5GFX display;
M5Canvas canvas(&M5.Display);
// sensores
m5::unit::UnitUnified Units;
m5::unit::UnitENV3 unitENV3;
auto& sht30 = unitENV3.sht30;
auto& qmp6988 = unitENV3.qmp6988;
int temp;
int umid;
int sx=35;
int sy=118;
String days[7]={"DO","SE","TE","QA","QI","SX","SA"};
int s,h,m=0; //sec,min,hour
// int ts=0; //temporerly s
String ho,mi,se; // hour, minute,seconds but strings
int da, mo, ye,wd; //day, month, year
unsigned short blue=0x1BB7;
// bateria
int vol=0;
int volE; // voltage segments
void setup() {
M5.begin();
M5.Rtc.setDateTime( { { 2025, 9, 14 }, { 14, 15, 0 } } );
// sensores
Serial.begin(115200);
M5.Display.setFont(&fonts::lgfxJapanMinchoP_20);
M5.Display.setTextSize(1);
auto pin_num_sda = M5.getPin(m5::pin_name_t::port_a_sda);
auto pin_num_scl = M5.getPin(m5::pin_name_t::port_a_scl);
M5_LOGI("getPin: SDA:%u SCL:%u", pin_num_sda, pin_num_scl);
Wire.begin(pin_num_sda, pin_num_scl, 400000U);
if (!Units.add(unitENV3, Wire) || !Units.begin()) {
M5_LOGE("Failed to begin Unit ENV3");
// M5.Display.clear(TFT_RED);
// while (true) {
// m5::utility::delay(10000);
// }
}
// Disw = M5.Lcd.width();
// Dish = M5.Lcd.height();
// M5.Lcd.fillScreen(TFT_BLACK);
// M5Canvas canvas(&M5.Lcd);
// canvas.begin();
// display.setBrightness(50);
// canvas.createSprite(135,240);
// canvas.createSprite(M5.Display.width(), M5.Display.height());
canvas.createSprite(135, 240);
// canvas.fillSprite(TFT_BLACK);
// canvas.createSprite(100, 100);//set sprite size
// canvas.fillSprite(TFT_PINK);//fill sprite with color XXX
// delay(1000);
// canvas.fillSprite(TFT_BLACK);//fill sprite with color XXX
// canvas.println("M5Canvas");
// canvas.pushSprite(&M5.Lcd, Disw / 2 - 50, Dish / 2 - 50, TFT_PINK);//"&M5.Lcd" is not necessary here
// canvas.deleteSprite();
//In this example, PINK will not be displayed
int co=220;
for(int i=0;i<13;i++)
{grays[i]=M5.Display.color565(co, co, co);
co=co-20;}
}
void draw_temperatura() {
canvas.fillSmoothRoundRect(5,86,60,64,3,grays[10]);
canvas.loadFont(mFont);
canvas.setTextDatum(4);
if(temp>=35) {
canvas.setTextColor(TFT_RED,TFT_RED);
} else if(temp>=30 && temp<35) {
canvas.setTextColor(TFT_ORANGE,TFT_ORANGE);
} else if(temp>=25 && temp<30) {
canvas.setTextColor(TFT_NAVY,TFT_NAVY);
} else {
canvas.setTextColor(TFT_BLUE,TFT_BLUE);
}
//canvas.setTextColor(grays[0],grays[9]);
canvas.drawString(String(temp)+" C",30,sy);
canvas.setTextDatum(0);
canvas.unloadFont();
}
void draw() {
canvas.fillSprite(TFT_BLACK);
// desenha hora
canvas.setTextDatum(0);
canvas.loadFont(hFont);
canvas.setTextColor(grays[0],TFT_BLACK);
canvas.drawString(ho+":"+mi,10,10);
canvas.unloadFont();
// desenha data
canvas.loadFont(mFont);
canvas.setTextColor(grays[2],TFT_BLACK);
canvas.drawString(String(da)+"/"+String(mo)+"/"+String(ye),12,60);
canvas.unloadFont();
// quadrado pos data com dia da semana
canvas.fillSmoothRoundRect(102,58,26,23,2,blue);
canvas.loadFont(sFont);
canvas.setTextColor(TFT_WHITE,blue);
canvas.drawString(days[wd],108,60);
// draw_temperatura();
// canvas.fillSmoothRoundRect(5,86,60,64,3,grays[10]);
// canvas.loadFont(mFont);
// canvas.setTextDatum(4);
// canvas.setTextColor(grays[0],grays[9]);
// canvas.drawString(String(temp)+" C",sx,sy);
// canvas.setTextDatum(0);
// canvas.unloadFont();
canvas.fillSmoothRoundRect(5,86,60,64,3,grays[10]);
canvas.loadFont(mFont);
canvas.setTextDatum(4);
canvas.setTextColor(grays[0],grays[9]);
canvas.drawString(String(temp)+"C",19,sy);
// canvas.setTextDatum(0);
// canvas.unloadFont();
// desenha a bateria
canvas.drawRect(118,13,12,30,grays[3]);
canvas.fillRect(121,9,6,4,grays[3]);
// desenha os quadrados verdes da bateria
for(int i=0;i<volE;i++)
canvas.fillRect(120,37-(i*5),8,3,TFT_GREEN);
// quadrado da direita
// quadrado da direita, ira receber umidade
canvas.fillSmoothRoundRect(70,86,60,64,3,grays[10]);
canvas.loadFont(mFont);
canvas.setTextDatum(4);
// if(umid>=60) {
// canvas.setTextColor(TFT_DARKGREEN,TFT_DARKGREEN);
// } else if(umid>=30 && umid<60) {
// canvas.setTextColor(TFT_BLUE,TFT_BLUE);
// } else {
// canvas.setTextColor(TFT_ORANGE,TFT_ORANGE);
// }
canvas.setTextColor(grays[0],grays[9]);
canvas.drawString(String(umid)+"%",86,sy);
canvas.setTextDatum(0);
canvas.unloadFont();
canvas.pushSprite(0, 0);
}
void loop() {
M5.update();
// sensores
Units.update();
if (sht30.updated()) {
// M5.Display.setCursor(0, 0);
// M5.Display.fillRect(0, 0, 320, 80, TFT_BLACK);
// M5.Display.printf(
// "\n>SHT30Temp:%.4f\n"
// ">Humidity:%.4f",
// sht30.temperature(), sht30.humidity());
temp=(int)sht30.temperature();
umid=(int)sht30.humidity();
}
// monta data hora
//M5.Rtc.setSystemTimeFromRtc();
auto dt = M5.Rtc.getDateTime();
h=dt.time.hours;
m=dt.time.minutes;
s=dt.time.seconds;
da=dt.date.date;
mo=dt.date.month;
ye=dt.date.year;
wd=dt.date.weekDay;
if(h<10) ho="0"+String(h); else ho=String(h);
if(m<10) mi="0"+String(m); else mi=String(m);
if(s<10) se="0"+String(s); else se=String(s);
// end monta hora
// pega valor bateria
vol = M5.Power.getBatteryVoltage();
volE=map(vol,3000,4180,0,5);
// end bateria
draw();
}