Pular para conteúdo

Início

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();
}    

Meu mapa da Web

Teste

stateDiagram-v2 [*] --> select_time select_time --> current_status current_status --> cancel: status_available current_status --> [*]: status_over cancel --> [*]
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js">
</script>
<script>
    mermaid.initialize({ startOnLoad: true });
</script>