From ad1054a6aeece4e3d21013f1763bf857daaebd6d Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sun, 12 Apr 2020 18:17:35 +0200 Subject: [PATCH] Increase ESP32 compatibility Increase ESP32 compatibility (breaks current ESP32 configuration!) --- tasmota/support.ino | 14 ++++++++++- tasmota/support_command.ino | 5 ++++ tasmota/tasmota_template.h | 12 ++++++--- tasmota/tasmota_template_ESP32.h | 24 +++++++++--------- tasmota/xdrv_01_webserver.ino | 43 ++++++++++++++++++++++++-------- 5 files changed, 71 insertions(+), 27 deletions(-) diff --git a/tasmota/support.ino b/tasmota/support.ino index f6ee1b059..9ac48c3fc 100644 --- a/tasmota/support.ino +++ b/tasmota/support.ino @@ -1127,8 +1127,13 @@ void ModuleGpios(myio *gp) uint32_t j = 0; for (uint32_t i = 0; i < sizeof(mycfgio); i++) { +#ifdef ESP8266 if (6 == i) { j = 9; } if (8 == i) { j = 12; } +#endif // ESP8266 +#ifdef ESP32 + if (6 == i) { j = 12; } +#endif // ESP32 dest[j] = src[i]; j++; } @@ -1166,7 +1171,12 @@ void SetModuleType(void) bool FlashPin(uint32_t pin) { +#ifdef ESP8266 return (((pin > 5) && (pin < 9)) || (11 == pin)); +#endif // ESP8266 +#ifdef ESP32 + return ((pin > 5) && (pin < 12)); +#endif // ESP32 } uint8_t ValidPin(uint32_t pin, uint32_t gpio) @@ -1175,12 +1185,14 @@ uint8_t ValidPin(uint32_t pin, uint32_t gpio) return GPIO_NONE; // Disable flash pins GPIO6, GPIO7, GPIO8 and GPIO11 } +#ifdef ESP8266 // if (!is_8285 && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's if ((WEMOS == Settings.module) && !Settings.flag3.user_esp8285_enable) { // SetOption51 - Enable ESP8285 user GPIO's if ((pin == 9) || (pin == 10)) { return GPIO_NONE; // Disable possible flash GPIO9 and GPIO10 } } +#endif // ESP8266 return gpio; } @@ -1264,7 +1276,7 @@ bool JsonTemplate(const char* dataBuf) if (strlen(dataBuf) < 9) { return false; } // Workaround exception if empty JSON like {} - Needs checks - StaticJsonBuffer<400> jb; // 331 from https://arduinojson.org/v5/assistant/ + StaticJsonBuffer<600> jb; // 331 from https://arduinojson.org/v5/assistant/ JsonObject& obj = jb.parseObject(dataBuf); if (!obj.success()) { return false; } diff --git a/tasmota/support_command.ino b/tasmota/support_command.ino index 133298010..41a237802 100644 --- a/tasmota/support_command.ino +++ b/tasmota/support_command.ino @@ -1087,8 +1087,13 @@ void CmndTemplate(void) SettingsUpdateText(SET_TEMPLATE_NAME, "Merged"); uint32_t j = 0; for (uint32_t i = 0; i < sizeof(mycfgio); i++) { +#ifdef ESP8266 if (6 == i) { j = 9; } if (8 == i) { j = 12; } +#endif // ESP8266 +#ifdef ESP32 + if (6 == i) { j = 12; } +#endif // ESP32 if (my_module.io[j] > GPIO_NONE) { Settings.user_template.gp.io[i] = my_module.io[j]; } diff --git a/tasmota/tasmota_template.h b/tasmota/tasmota_template.h index 6ab153508..f235147bf 100644 --- a/tasmota/tasmota_template.h +++ b/tasmota/tasmota_template.h @@ -703,6 +703,8 @@ const char kAdc0Names[] PROGMEM = #define MAX_GPIO_PIN 17 // Number of supported GPIO #define MIN_FLASH_PINS 4 // Number of flash chip pins unusable for configuration (GPIO6, 7, 8 and 11) +#define ADC0_PIN 17 // Pin number of ADC0 +#define WEMOS_MODULE 17 // Wemos module const char PINS_WEMOS[] PROGMEM = "D3TXD4RXD2D1flashcFLFLolD6D7D5D8D0A0"; @@ -710,13 +712,17 @@ const char PINS_WEMOS[] PROGMEM = "D3TXD4RXD2D1flashcFLFLolD6D7D5D8D0A0"; // esp32 has more pins #define USER_MODULE 255 -#define MAX_GPIO_PIN 44 // Number of supported GPIO -#define MIN_FLASH_PINS 4 // Number of flash chip pins unusable for configuration (GPIO6, 7, 8 and 11) +#define MAX_GPIO_PIN 40 // Number of supported GPIO +#define MIN_FLASH_PINS 6 // Number of flash chip pins unusable for configuration (GPIO6, 7, 8, 9, 10 and 11) +#define ADC0_PIN 36 // Pin number of ADC0 +#define WEMOS_MODULE 0 // Wemos module -const char PINS_WEMOS[] PROGMEM = "00010203040506070809101112131415161718192021222324252627282930313233343536373839"; +const char PINS_WEMOS[] PROGMEM = "00TX02RX04050607080910111213141516171819202122232425262728293031A4A5A6A7A03738A3"; #endif // ESP8266 +#define MAX_USER_PINS MAX_GPIO_PIN-MIN_FLASH_PINS + /********************************************************************************************/ typedef struct MYIO { diff --git a/tasmota/tasmota_template_ESP32.h b/tasmota/tasmota_template_ESP32.h index 3f1b2b8c6..04e18af17 100644 --- a/tasmota/tasmota_template_ESP32.h +++ b/tasmota/tasmota_template_ESP32.h @@ -71,12 +71,12 @@ const mytmplt kModules[MAXMODULE] PROGMEM = { GPIO_USER, //3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 GPIO_USER, //4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER GPIO_USER, //5 IO GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK - 0, //6 - 0, //7 - 0, //8 - 0, //9 - 0, //10 - 0, //11 +// 0, //6 +// 0, //7 +// 0, //8 +// 0, //9 +// 0, //10 +// 0, //11 GPIO_USER, //12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) GPIO_USER, //13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER GPIO_USER, //14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 @@ -113,12 +113,12 @@ const mytmplt kModules[MAXMODULE] PROGMEM = { GPIO_USER, //3 IO RXD0 GPIO3, U0RXD, CLK_OUT2 GPIO_USER, //4 IO GPIO4, ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER GPIO_USER, //5 IO GPIO5, VSPICS0, HS1_DATA6, EMAC_RX_CLK - 0, //6 - 0, //7 - 0, //8 - 0, //9 - 0, //10 - 0, //11 +// 0, //6 +// 0, //7 +// 0, //8 +// 0, //9 +// 0, //10 +// 0, //11 GPIO_USER, //12 (I)O GPIO12, ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 (If driven High, flash voltage (VDD_SDIO) is 1.8V not default 3.3V. Has internal pull-down, so unconnected = Low = 3.3V. May prevent flashing and/or booting if 3.3V flash is connected and pulled high. See ESP32 datasheet for more details.) GPIO_USER, //13 IO GPIO13, ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER GPIO_USER, //14 IO GPIO14, ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 diff --git a/tasmota/xdrv_01_webserver.ino b/tasmota/xdrv_01_webserver.ino index f50f41d3f..0777e15ac 100644 --- a/tasmota/xdrv_01_webserver.ino +++ b/tasmota/xdrv_01_webserver.ino @@ -261,15 +261,22 @@ const char HTTP_SCRIPT_TEMPLATE[] PROGMEM = "as=o.shift();" // Complete ADC0 list "g=o.shift().split(',');" // Array separator "j=0;" - "for(i=0;i<13;i++){" // Supports 13 GPIOs +// "for(i=0;i<13;i++){" // Supports 13 GPIOs + "for(i=0;i<" STR(MAX_USER_PINS) ";i++){" // Supports 13 GPIOs +#ifdef ESP8266 "if(6==i){j=9;}" "if(8==i){j=12;}" +#endif +#ifdef ESP32 + "if(6==i){j=12;}" +#endif "sk(g[i],j);" // Set GPIO "j++;" "}" "g=o.shift();" // FLAG "os=as;" - "sk(g&15,17);" // Set ADC0 +// "sk(g&15,17);" // Set ADC0 + "sk(g&15," STR(ADC0_PIN) ");" // Set ADC0 "g>>=4;" "for(i=0;i<" STR(GPIO_FLAG_USED) ";i++){" "p=(g>>i)&1;" @@ -288,7 +295,8 @@ const char HTTP_SCRIPT_TEMPLATE[] PROGMEM = "function x2(a){" "os=a.responseText;" - "sk(17,99);" // 17 = WEMOS +// "sk(17,99);" // 17 = WEMOS + "sk(" STR(WEMOS_MODULE) ",99);" // 17 = WEMOS "st(" STR(USER_MODULE) ");" "}" @@ -313,12 +321,14 @@ const char HTTP_SCRIPT_MODULE2[] PROGMEM = "}" "function x3(a){" // ADC0 "os=a.responseText;" - "sk(%d,17);" +// "sk(%d,17);" + "sk(%d," STR(ADC0_PIN) ");" "}" "function sl(){" "ld('md?m=1',x1);" // ?m related to WebServer->hasArg("m") "ld('md?g=1',x2);" // ?g related to WebServer->hasArg("g") - "if(eb('g17')){" +// "if(eb('g17')){" + "if(eb('g" STR(ADC0_PIN) "')){" "ld('md?a=1',x3);" // ?a related to WebServer->hasArg("a") "}" "}" @@ -1467,7 +1477,8 @@ void HandleTemplateConfiguration(void) WSContentSend_P(PSTR("}1")); // Field separator for (uint32_t i = 0; i < sizeof(cmodule); i++) { // 17,148,29,149,7,255,255,255,138,255,139,255,255 - if ((i < 6) || ((i > 8) && (i != 11))) { // Ignore flash pins GPIO06, 7, 8 and 11 +// if ((i < 6) || ((i > 8) && (i != 11))) { // Ignore flash pins GPIO06, 7, 8 and 11 + if (!FlashPin(i)) { WSContentSend_P(PSTR("%s%d"), (i>0)?",":"", cmodule.io[i]); } } @@ -1489,13 +1500,16 @@ void HandleTemplateConfiguration(void) "" "
")); WSContentSend_P(HTTP_TABLE100); - for (uint32_t i = 0; i < 17; i++) { - if ((i < 6) || ((i > 8) && (i != 11))) { // Ignore flash pins GPIO06, 7, 8 and 11 + for (uint32_t i = 0; i < MAX_GPIO_PIN; i++) { +// if ((i < 6) || ((i > 8) && (i != 11))) { // Ignore flash pins GPIO06, 7, 8 and 11 + if (!FlashPin(i)) { WSContentSend_P(PSTR("" D_GPIO "%d"), ((9==i)||(10==i)) ? WebColor(COL_TEXT_WARNING) : WebColor(COL_TEXT), i, (0==i) ? " style='width:200px'" : "", i); } } +#ifdef ESP8266 WSContentSend_P(PSTR("" D_ADC "0"), WebColor(COL_TEXT)); +#endif WSContentSend_P(PSTR("")); gpio_flag flag = ModuleFlag(); if (flag.data > ADC0_USER) { @@ -1510,15 +1524,20 @@ void TemplateSaveSettings(void) { char tmp[TOPSZ]; // WebGetArg NAME and GPIO/BASE/FLAG byte value char webindex[5]; // WebGetArg name - char svalue[200]; // Template command string + char svalue[300]; // Template command string WebGetArg("s1", tmp, sizeof(tmp)); // NAME snprintf_P(svalue, sizeof(svalue), PSTR(D_CMND_TEMPLATE " {\"" D_JSON_NAME "\":\"%s\",\"" D_JSON_GPIO "\":["), tmp); uint32_t j = 0; for (uint32_t i = 0; i < sizeof(Settings.user_template.gp); i++) { +#ifdef ESP8266 if (6 == i) { j = 9; } if (8 == i) { j = 12; } +#endif // ESP8266 +#ifdef ESP32 + if (6 == i) { j = 12; } +#endif // ESP32 snprintf_P(webindex, sizeof(webindex), PSTR("g%d"), j); WebGetArg(webindex, tmp, sizeof(tmp)); // GPIO uint8_t gpio = atoi(tmp); @@ -1526,7 +1545,8 @@ void TemplateSaveSettings(void) j++; } - WebGetArg("g17", tmp, sizeof(tmp)); // FLAG - ADC0 +// WebGetArg("g17", tmp, sizeof(tmp)); // FLAG - ADC0 + WebGetArg("g" STR(ADC0_PIN), tmp, sizeof(tmp)); // FLAG - ADC0 uint32_t flag = atoi(tmp); for (uint32_t i = 0; i < GPIO_FLAG_USED; i++) { snprintf_P(webindex, sizeof(webindex), PSTR("c%d"), i); @@ -1656,7 +1676,8 @@ void ModuleSaveSettings(void) } } #ifndef USE_ADC_VCC - WebGetArg("g17", tmp, sizeof(tmp)); +// WebGetArg("g17", tmp, sizeof(tmp)); + WebGetArg("g" STR(ADC0_PIN), tmp, sizeof(tmp)); Settings.my_adc0 = (!strlen(tmp)) ? 0 : atoi(tmp); gpios += F(", " D_ADC "0 "); gpios += String(Settings.my_adc0); #endif // USE_ADC_VCC