diff --git a/tasmota/i18n.h b/tasmota/i18n.h index c435348a8..e3cc2cf8a 100644 --- a/tasmota/i18n.h +++ b/tasmota/i18n.h @@ -814,7 +814,9 @@ const float kSpeedConversionFactor[] = {1, // none // xdrv_02_webserver.ino #ifdef USE_WEBSERVER // {s} = , {m} = , {e} = -const char HTTP_SNS_F_TEMP[] PROGMEM = "{s}%s " D_TEMPERATURE "{m}%*_f " D_UNIT_DEGREE "%c{e}"; +const char HTTP_SNS_F_TEMP[] PROGMEM = "{s}%s " D_TEMPERATURE "{m}%*_f " D_UNIT_DEGREE "%c{e}"; +const char HTTP_SNS_F_VOLTAGE[] PROGMEM = "{s}%s " D_VOLTAGE "{m}%*_f " D_UNIT_VOLT "{e}"; +const char HTTP_SNS_F_CURRENT_MA[] PROGMEM = "{s}%s " D_CURRENT "{m}%*_f " D_UNIT_MILLIAMPERE "{e}"; const char HTTP_SNS_HUM[] PROGMEM = "{s}%s " D_HUMIDITY "{m}%s " D_UNIT_PERCENT "{e}"; const char HTTP_SNS_DEW[] PROGMEM = "{s}%s " D_DEWPOINT "{m}%s " D_UNIT_DEGREE "%c{e}"; const char HTTP_SNS_PRESSURE[] PROGMEM = "{s}%s " D_PRESSURE "{m}%s " "%s{e}"; diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index 8cac58e71..5b97d04db 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -840,6 +840,14 @@ void WSContentSend_Temp(const char *types, float f_temperature) { WSContentSend_PD(HTTP_SNS_F_TEMP, types, Settings.flag2.temperature_resolution, &f_temperature, TempUnit()); } +void WSContentSend_Voltage(const char *types, float f_voltage) { + WSContentSend_PD(HTTP_SNS_F_VOLTAGE, types, Settings.flag2.voltage_resolution, &f_voltage); +} + +void WSContentSend_CurrentMA(const char *types, float f_current) { + WSContentSend_PD(HTTP_SNS_F_CURRENT_MA, types, Settings.flag2.current_resolution, &f_current); +} + void WSContentSend_THD(const char *types, float f_temperature, float f_humidity) { WSContentSend_Temp(types, f_temperature); diff --git a/tasmota/xdrv_10_scripter.ino b/tasmota/xdrv_10_scripter.ino index 5e920afba..c3097fc64 100755 --- a/tasmota/xdrv_10_scripter.ino +++ b/tasmota/xdrv_10_scripter.ino @@ -1845,7 +1845,7 @@ chknext: while (*lp==' ') lp++; float fvar1; lp = GetNumericArgument(lp, OPER_EQU, &fvar1, gv); - fvar = core2_setaxppin(fvar, fvar1); + fvar = Core2SetAxpPin(fvar, fvar1); lp++; len=0; goto exit; diff --git a/tasmota/xdrv_42_i2s_audio.ino b/tasmota/xdrv_42_i2s_audio.ino index a63918206..1ab15e4ee 100644 --- a/tasmota/xdrv_42_i2s_audio.ino +++ b/tasmota/xdrv_42_i2s_audio.ino @@ -69,8 +69,8 @@ #ifdef USE_M5STACK_CORE2 #undef AUDIO_PWR_ON #undef AUDIO_PWR_OFF -#define AUDIO_PWR_ON CORE2_audio_power(true); -#define AUDIO_PWR_OFF CORE2_audio_power(false); +#define AUDIO_PWR_ON Core2AudioPower(true); +#define AUDIO_PWR_OFF Core2AudioPower(false); #undef DAC_IIS_BCK #undef DAC_IIS_WS #undef DAC_IIS_DOUT diff --git a/tasmota/xdrv_84_esp32_core2.ino b/tasmota/xdrv_84_esp32_core2.ino index 9f0d3cc60..fd7f4acbd 100644 --- a/tasmota/xdrv_84_esp32_core2.ino +++ b/tasmota/xdrv_84_esp32_core2.ino @@ -17,15 +17,28 @@ along with this program. If not, see . */ -/* remaining work: - -i2s microphone as loudness sensor -rtc better sync - -*/ - #ifdef ESP32 #ifdef USE_M5STACK_CORE2 +/*********************************************************************************************\ + * M5Stack Core2 support + * + * Module 7 + * Template {"NAME":"M5Core2","GPIO":[1,1,1,1,6720,6368,0,0,0,1,1,6400,0,0,736,1,0,0,0,704,0,1,1,1,0,0,0,0,640,608,1,1,1,0,672,0],"FLAG":0,"BASE":7} + * + * Initial commands: + * - DisplayType 2 + * - DisplayCols 27 + * - (optional) DisplayMode 2 + * - Power on + * - Voltres 3 + * - Ampres 1 + * + * Todo: + * - i2s microphone as loudness sensor + * - rtc better sync +\*********************************************************************************************/ + +#define XDRV_84 84 #include #include @@ -36,8 +49,6 @@ rtc better sync #include #include -#define XDRV_84 84 - struct CORE2_globs { AXP192 Axp; BM8563_RTC Rtc; @@ -57,116 +68,9 @@ struct CORE2_ADC { float temp; } core2_adc; -// cause SC card is needed by scripter -void CORE2_Module_Init(void) { +/*********************************************************************************************/ - // m5stack uses pin 38 not selectable in tasmota - SPI.setFrequency(40000000); - SPI.begin(18, 38, 23, -1); - // establish power chip on wire1 SDA 21, SCL 22 - core2_globs.Axp.begin(); - I2cSetActiveFound(AXP_ADDR, "AXP192"); - - core2_globs.Axp.SetAdcState(true); - // motor voltage - core2_globs.Axp.SetLDOVoltage(3,2000); - - core2_globs.Rtc.begin(); - I2cSetActiveFound(RTC_ADRESS, "RTC"); - - core2_globs.ready = true; -} - - -void CORE2_Init(void) { - - if (Rtc.utc_time < START_VALID_TIME) { - // set rtc from chip - Rtc.utc_time = Get_utc(); - - TIME_T tmpTime; - TasmotaGlobal.ntp_force_sync = true; //force to sync with ntp - BreakTime(Rtc.utc_time, tmpTime); - Rtc.daylight_saving_time = RuleToTime(Settings.tflag[1], RtcTime.year); - Rtc.standard_time = RuleToTime(Settings.tflag[0], RtcTime.year); - AddLog(LOG_LEVEL_INFO, PSTR("Set time from BM8563 to RTC (" D_UTC_TIME ") %s, (" D_DST_TIME ") %s, (" D_STD_TIME ") %s"), - GetDateAndTime(DT_UTC).c_str(), GetDateAndTime(DT_DST).c_str(), GetDateAndTime(DT_STD).c_str()); - if (Rtc.local_time < START_VALID_TIME) { // 2016-01-01 - TasmotaGlobal.rules_flag.time_init = 1; - } else { - TasmotaGlobal.rules_flag.time_set = 1; - } - - } - -} - -void CORE2_audio_power(bool power) { - core2_globs.Axp.SetSpkEnable(power); -} - -#ifdef USE_WEBSERVER -const char HTTP_CORE2[] PROGMEM = - "{s}VBUS Voltage" "{m}%s V" "{e}" - "{s}VBUS Current" "{m}%s mA" "{e}" - "{s}BATT Voltage" "{m}%s V" "{e}" - "{s}BATT Current" "{m}%s mA" "{e}" - "{s}Chip Temperature" "{m}%s C" "{e}"; -#endif // USE_WEBSERVER - - -void CORE2_loop(uint32_t flg) { - -} - -void CORE2_WebShow(uint32_t json) { - - char vstring[32]; - char bvstring[32]; - char cstring[32]; - char bcstring[32]; - char tstring[32]; - dtostrfd(core2_adc.vbus_v, 3, vstring); - dtostrfd(core2_adc.batt_v, 3, bvstring); - dtostrfd(core2_adc.vbus_c, 1, cstring); - dtostrfd(core2_adc.batt_c, 1, bcstring); - dtostrfd(core2_adc.temp, 2, tstring); - - if (json) { - ResponseAppend_P(PSTR(",\"CORE2\":{\"VBV\":%s,\"BV\":%s,\"VBC\":%s,\"BC\":%s,\"CT\":%s}"), vstring, cstring, bvstring, bcstring, tstring); - } else { - WSContentSend_PD(HTTP_CORE2, vstring, cstring, bvstring, bcstring, tstring); - } -} - -const char CORE2_Commands[] PROGMEM = "CORE2|" - "SHUTDOWN"; - -void (* const CORE2_Command[])(void) PROGMEM = { - &CORE2_Shutdown}; - - -void CORE2_Shutdown(void) { - char *mp = strchr(XdrvMailbox.data, ':'); - if (mp) { - core2_globs.wakeup_hour = atoi(XdrvMailbox.data); - core2_globs.wakeup_minute = atoi(mp+1); - core2_globs.shutdownseconds = -1; - core2_globs.shutdowndelay = 10; - char tbuff[16]; - sprintf(tbuff,"%02.2d:%02.2d", core2_globs.wakeup_hour, core2_globs.wakeup_minute ); - ResponseCmndChar(tbuff); - } else { - if (XdrvMailbox.payload >= 30) { - core2_globs.shutdownseconds = XdrvMailbox.payload; - core2_globs.shutdowndelay = 10; - } - ResponseCmndNumber(XdrvMailbox.payload); - } - -} - -void CORE2_DoShutdown(void) { +void Core2DoShutdown(void) { SettingsSaveAll(); RtcSettingsSave(); core2_globs.Rtc.clearIRQ(); @@ -182,11 +86,75 @@ void CORE2_DoShutdown(void) { core2_globs.Axp.PowerOff(); } +void Core2GetADC(void) { + core2_adc.vbus_v = core2_globs.Axp.GetVBusVoltage(); + core2_adc.batt_v = core2_globs.Axp.GetBatVoltage(); + core2_adc.vbus_c = core2_globs.Axp.GetVinCurrent(); + core2_adc.batt_c = core2_globs.Axp.GetBatCurrent(); + + core2_adc.temp = ConvertTemp(core2_globs.Axp.GetTempInAXP192()); +} + +void Core2GetRtc(void) { + RTC_TimeTypeDef RTCtime; + core2_globs.Rtc.GetTime(&RTCtime); + RtcTime.hour = RTCtime.Hours; + RtcTime.minute = RTCtime.Minutes; + RtcTime.second = RTCtime.Seconds; + + RTC_DateTypeDef RTCdate; + core2_globs.Rtc.GetDate(&RTCdate); + RtcTime.day_of_week = RTCdate.WeekDay; + RtcTime.month = RTCdate.Month; + RtcTime.day_of_month = RTCdate.Date; + RtcTime.year = RTCdate.Year; + + AddLog(LOG_LEVEL_INFO, PSTR("CR2: Set RTC %04d-%02d-%02dT%02d:%02d:%02d"), + RTCdate.Year, RTCdate.Month, RTCdate.Date, RTCtime.Hours, RTCtime.Minutes, RTCtime.Seconds); +} + +void Core2SetUtc(uint32_t epoch_time) { + TIME_T tm; + BreakTime(epoch_time, tm); + RTC_TimeTypeDef RTCtime; + RTCtime.Hours = tm.hour; + RTCtime.Minutes = tm.minute; + RTCtime.Seconds = tm.second; + core2_globs.Rtc.SetTime(&RTCtime); + RTC_DateTypeDef RTCdate; + RTCdate.WeekDay = tm.day_of_week; + RTCdate.Month = tm.month; + RTCdate.Date = tm.day_of_month; + RTCdate.Year = tm.year + 1970; + core2_globs.Rtc.SetDate(&RTCdate); +} + +uint32_t Core2GetUtc(void) { + RTC_TimeTypeDef RTCtime; + // 1. read has errors ??? + core2_globs.Rtc.GetTime(&RTCtime); + core2_globs.Rtc.GetTime(&RTCtime); + RTC_DateTypeDef RTCdate; + core2_globs.Rtc.GetDate(&RTCdate); + TIME_T tm; + tm.second = RTCtime.Seconds; + tm.minute = RTCtime.Minutes; + tm.hour = RTCtime.Hours; + tm.day_of_week = RTCdate.WeekDay; + tm.day_of_month = RTCdate.Date; + tm.month = RTCdate.Month; + tm.year = RTCdate.Year - 1970; + return MakeTime(tm); +} + +/*********************************************************************************************\ + * Called from xdrv_10_scripter.ino +\*********************************************************************************************/ + extern uint8_t tbstate[3]; - // c2ps(a b) -float core2_setaxppin(uint32_t sel, uint32_t val) { +float Core2SetAxpPin(uint32_t sel, uint32_t val) { switch (sel) { case 0: core2_globs.Axp.SetLed(val); @@ -215,91 +183,91 @@ float core2_setaxppin(uint32_t sel, uint32_t val) { } break; default: - GetRtc(); + Core2GetRtc(); break; } return 0; } -void core2_disp_pwr(uint8_t on) { +/*********************************************************************************************\ + * Called from xdrv_42_i2s_audio.ino +\*********************************************************************************************/ + +void Core2AudioPower(bool power) { + core2_globs.Axp.SetSpkEnable(power); +} + +/*********************************************************************************************\ + * Called from xdsp_04_ili9341.ino and xdsp_17_universal.ino +\*********************************************************************************************/ + +void Core2DisplayPower(uint8_t on) { core2_globs.Axp.SetDCDC3(on); } // display dimmer ranges from 0-15 // very little effect -void core2_disp_dim(uint8_t dim) { -uint16_t voltage = 2200; +void Core2DisplayDim(uint8_t dim) { + uint16_t voltage = 2200; voltage += ((uint32_t)dim*1200)/15; core2_globs.Axp.SetLcdVoltage(voltage); - // core2_globs.Axp.ScreenBreath(dim); +} + +/*********************************************************************************************/ + +// cause SC card is needed by scripter +void Core2ModuleInit(void) { + // m5stack uses pin 38 not selectable in tasmota + SPI.setFrequency(40000000); + SPI.begin(18, 38, 23, -1); + // establish power chip on wire1 SDA 21, SCL 22 + core2_globs.Axp.begin(); + I2cSetActiveFound(AXP_ADDR, "AXP192"); + + core2_globs.Axp.SetAdcState(true); + // motor voltage + core2_globs.Axp.SetLDOVoltage(3,2000); + + core2_globs.Rtc.begin(); + I2cSetActiveFound(RTC_ADRESS, "RTC"); + + core2_globs.ready = true; +} + +void Core2Init(void) { + if (Rtc.utc_time < START_VALID_TIME) { + // set rtc from chip + Rtc.utc_time = Core2GetUtc(); + + TIME_T tmpTime; + TasmotaGlobal.ntp_force_sync = true; // Force to sync with ntp + BreakTime(Rtc.utc_time, tmpTime); + Rtc.daylight_saving_time = RuleToTime(Settings.tflag[1], RtcTime.year); + Rtc.standard_time = RuleToTime(Settings.tflag[0], RtcTime.year); + AddLog(LOG_LEVEL_INFO, PSTR("CR2: Set time from BM8563 to RTC (" D_UTC_TIME ") %s, (" D_DST_TIME ") %s, (" D_STD_TIME ") %s"), + GetDateAndTime(DT_UTC).c_str(), GetDateAndTime(DT_DST).c_str(), GetDateAndTime(DT_STD).c_str()); + if (Rtc.local_time < START_VALID_TIME) { // 2016-01-01 + TasmotaGlobal.rules_flag.time_init = 1; + } else { + TasmotaGlobal.rules_flag.time_set = 1; + } + } +} + +void Core2Loop(uint32_t flg) { } - -void GetRtc(void) { - RTC_TimeTypeDef RTCtime; - core2_globs.Rtc.GetTime(&RTCtime); - RtcTime.hour = RTCtime.Hours; - RtcTime.minute = RTCtime.Minutes; - RtcTime.second = RTCtime.Seconds; - - - RTC_DateTypeDef RTCdate; - core2_globs.Rtc.GetDate(&RTCdate); - RtcTime.day_of_week = RTCdate.WeekDay; - RtcTime.month = RTCdate.Month; - RtcTime.day_of_month = RTCdate.Date; - RtcTime.year = RTCdate.Year; - - AddLog(LOG_LEVEL_INFO, PSTR("RTC: %02d:%02d:%02d"), RTCtime.Hours, RTCtime.Minutes, RTCtime.Seconds); - AddLog(LOG_LEVEL_INFO, PSTR("RTC: %02d.%02d.%04d"), RTCdate.Date, RTCdate.Month, RTCdate.Year); - -} - -void Set_utc(uint32_t epoch_time) { -TIME_T tm; - BreakTime(epoch_time, tm); - RTC_TimeTypeDef RTCtime; - RTCtime.Hours = tm.hour; - RTCtime.Minutes = tm.minute; - RTCtime.Seconds = tm.second; - core2_globs.Rtc.SetTime(&RTCtime); - RTC_DateTypeDef RTCdate; - RTCdate.WeekDay = tm.day_of_week; - RTCdate.Month = tm.month; - RTCdate.Date = tm.day_of_month; - RTCdate.Year = tm.year + 1970; - core2_globs.Rtc.SetDate(&RTCdate); -} - -uint32_t Get_utc(void) { - RTC_TimeTypeDef RTCtime; - // 1. read has errors ??? - core2_globs.Rtc.GetTime(&RTCtime); - core2_globs.Rtc.GetTime(&RTCtime); - RTC_DateTypeDef RTCdate; - core2_globs.Rtc.GetDate(&RTCdate); - TIME_T tm; - tm.second = RTCtime.Seconds; - tm.minute = RTCtime.Minutes; - tm.hour = RTCtime.Hours; - tm.day_of_week = RTCdate.WeekDay; - tm.day_of_month = RTCdate.Date; - tm.month = RTCdate.Month; - tm.year =RTCdate.Year - 1970; - return MakeTime(tm); -} - -void CORE2_EverySecond(void) { +void Core2EverySecond(void) { if (core2_globs.ready) { - CORE2_GetADC(); + Core2GetADC(); - if (Rtc.utc_time > START_VALID_TIME && core2_globs.tset==false && abs(Rtc.utc_time - Get_utc()) > 3) { - Set_utc(Rtc.utc_time); - AddLog(LOG_LEVEL_INFO, PSTR("Write Time TO BM8563 from NTP (" D_UTC_TIME ") %s, (" D_DST_TIME ") %s, (" D_STD_TIME ") %s"), + if (Rtc.utc_time > START_VALID_TIME && core2_globs.tset==false && abs(Rtc.utc_time - Core2GetUtc()) > 3) { + Core2SetUtc(Rtc.utc_time); + AddLog(LOG_LEVEL_INFO, PSTR("CR2: Write Time TO BM8563 from NTP (" D_UTC_TIME ") %s, (" D_DST_TIME ") %s, (" D_STD_TIME ") %s"), GetDateAndTime(DT_UTC).c_str(), GetDateAndTime(DT_DST).c_str(), GetDateAndTime(DT_STD).c_str()); core2_globs.tset = true; } @@ -307,19 +275,56 @@ void CORE2_EverySecond(void) { if (core2_globs.shutdowndelay) { core2_globs.shutdowndelay--; if (!core2_globs.shutdowndelay) { - CORE2_DoShutdown(); + Core2DoShutdown(); } } } } -void CORE2_GetADC(void) { - core2_adc.vbus_v = core2_globs.Axp.GetVBusVoltage(); - core2_adc.batt_v = core2_globs.Axp.GetBatVoltage(); - core2_adc.vbus_c = core2_globs.Axp.GetVinCurrent(); - core2_adc.batt_c = core2_globs.Axp.GetBatCurrent(); +void Core2Show(uint32_t json) { + if (json) { + ResponseAppend_P(PSTR(",\"Core2\":{\"VBV\":%*_f,\"VBC\":%*_f,\"BV\":%*_f,\"BC\":%*_f,\"" D_JSON_TEMPERATURE "\":%*_f}"), + Settings.flag2.voltage_resolution, &core2_adc.vbus_v, + Settings.flag2.current_resolution, &core2_adc.vbus_c, + Settings.flag2.voltage_resolution, &core2_adc.batt_v, + Settings.flag2.current_resolution, &core2_adc.batt_c, + Settings.flag2.temperature_resolution, &core2_adc.temp); + } else { + WSContentSend_Voltage("VBus", core2_adc.vbus_v); + WSContentSend_CurrentMA("VBus", core2_adc.vbus_c); + WSContentSend_Voltage("Batt", core2_adc.batt_v); + WSContentSend_CurrentMA("Batt", core2_adc.batt_c); + WSContentSend_Temp("Core2", core2_adc.temp); + } +} - core2_adc.temp = core2_globs.Axp.GetTempInAXP192(); +/*********************************************************************************************\ + * Commands +\*********************************************************************************************/ + +const char kCore2Commands[] PROGMEM = "Core2|" + "Shutdown"; + +void (* const Core2Command[])(void) PROGMEM = { + &CmndCore2Shutdown}; + +void CmndCore2Shutdown(void) { + char *mp = strchr(XdrvMailbox.data, ':'); + if (mp) { + core2_globs.wakeup_hour = atoi(XdrvMailbox.data); + core2_globs.wakeup_minute = atoi(mp+1); + core2_globs.shutdownseconds = -1; + core2_globs.shutdowndelay = 10; + char tbuff[16]; + sprintf(tbuff, "%02.2d" D_HOUR_MINUTE_SEPARATOR "%02.2d", core2_globs.wakeup_hour, core2_globs.wakeup_minute ); + ResponseCmndChar(tbuff); + } else { + if (XdrvMailbox.payload >= 30) { + core2_globs.shutdownseconds = XdrvMailbox.payload; + core2_globs.shutdowndelay = 10; + } + ResponseCmndNumber(XdrvMailbox.payload); + } } /*********************************************************************************************\ @@ -330,31 +335,29 @@ bool Xdrv84(uint8_t function) { bool result = false; switch (function) { - - case FUNC_WEB_SENSOR: -#ifdef USE_WEBSERVER - CORE2_WebShow(0); -#endif - break; - case FUNC_JSON_APPEND: - CORE2_WebShow(1); - break; - case FUNC_COMMAND: - result = DecodeCommand(CORE2_Commands, CORE2_Command); - break; - case FUNC_MODULE_INIT: - CORE2_Module_Init(); - break; - case FUNC_INIT: - CORE2_Init(); + case FUNC_LOOP: + Core2Loop(1); break; case FUNC_EVERY_SECOND: - CORE2_EverySecond(); + Core2EverySecond(); break; - case FUNC_LOOP: - CORE2_loop(1); + case FUNC_JSON_APPEND: + Core2Show(1); + break; +#ifdef USE_WEBSERVER + case FUNC_WEB_SENSOR: + Core2Show(0); + break; +#endif + case FUNC_COMMAND: + result = DecodeCommand(kCore2Commands, Core2Command); + break; + case FUNC_INIT: + Core2Init(); + break; + case FUNC_MODULE_INIT: + Core2ModuleInit(); break; - } return result; } diff --git a/tasmota/xdsp_04_ili9341.ino b/tasmota/xdsp_04_ili9341.ino index 60b2dd646..b38a18eee 100644 --- a/tasmota/xdsp_04_ili9341.ino +++ b/tasmota/xdsp_04_ili9341.ino @@ -136,18 +136,18 @@ void ILI9341_InitDriver() } -void core2_disp_pwr(uint8_t on); -void core2_disp_dim(uint8_t dim); +void Core2DisplayPower(uint8_t on); +void Core2DisplayDim(uint8_t dim); void ili9342_bpwr(uint8_t on) { #ifdef USE_M5STACK_CORE2 - core2_disp_pwr(on); + Core2DisplayPower(on); #endif } void ili9342_dimm(uint8_t dim) { #ifdef USE_M5STACK_CORE2 - core2_disp_dim(dim); + Core2DisplayDim(dim); #endif } diff --git a/tasmota/xdsp_17_universal.ino b/tasmota/xdsp_17_universal.ino index 9ae3eeeb4..419a94d12 100644 --- a/tasmota/xdsp_17_universal.ino +++ b/tasmota/xdsp_17_universal.ino @@ -260,18 +260,18 @@ char *fbuff; /*********************************************************************************************/ -void core2_disp_pwr(uint8_t on); -void core2_disp_dim(uint8_t dim); +void Core2DisplayPower(uint8_t on); +void Core2DisplayDim(uint8_t dim); void udisp_bpwr(uint8_t on) { #ifdef USE_M5STACK_CORE2 - core2_disp_pwr(on); + Core2DisplayPower(on); #endif } void udisp_dimm(uint8_t dim) { #ifdef USE_M5STACK_CORE2 - core2_disp_dim(dim); + Core2DisplayDim(dim); #endif }