#include #include #include #include #include #define PIN_POWER_ON 15 TFT_eSPI tft = TFT_eSPI(); const char *ssid = "LilyGo-AABB"; const char *password = "xinyuandianzi"; void drawProgressBar(uint16_t x0, uint16_t y0, uint16_t w, uint16_t h, uint8_t percentage, uint16_t frameColor, uint16_t barColor) { if (percentage == 0) { tft.fillRoundRect(x0, y0, w, h, 3, TFT_BLACK); } uint8_t margin = 2; uint16_t barHeight = h - 2 * margin; uint16_t barWidth = w - 2 * margin; tft.drawRoundRect(x0, y0, w, h, 3, frameColor); tft.fillRect(x0 + margin, y0 + margin, barWidth * percentage / 100.0, barHeight, barColor); } void setup() { Serial.begin(115200); Serial.println("Booting"); pinMode(PIN_POWER_ON, OUTPUT); digitalWrite(PIN_POWER_ON, HIGH); tft.init(); tft.setRotation(1); tft.fillScreen(TFT_BLACK); tft.setCursor(0, 0); tft.println("OTA Start"); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.println("Connection Failed! Rebooting..."); tft.println("Connection Failed! Rebooting..."); delay(5000); ESP.restart(); } // Port defaults to 3232 // ArduinoOTA.setPort(3232); // Hostname defaults to esp3232-[MAC] // ArduinoOTA.setHostname("myesp32"); // No authentication by default // ArduinoOTA.setPassword("admin"); // Password can be set with it's md5 value as well // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3 // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); ArduinoOTA .onStart([]() { String type; if (ArduinoOTA.getCommand() == U_FLASH) type = "sketch"; else // U_SPIFFS type = "filesystem"; // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end() Serial.println("Start updating " + type); }) .onEnd([]() { Serial.println("\nEnd"); }) .onProgress([](unsigned int progress, unsigned int total) { Serial.printf("Progress: %u%%\r", (progress / (total / 100))); int percentage = (progress / (total / 100)); tft.setTextDatum(TC_DATUM); tft.setTextPadding(tft.textWidth(" 888% ")); tft.drawString(String(percentage) + "%", 145, 35); drawProgressBar(10, 30, 120, 15, percentage, TFT_WHITE, TFT_BLUE); }) .onError([](ota_error_t error) { Serial.printf("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); else if (error == OTA_END_ERROR) Serial.println("End Failed"); tft.fillScreen(TFT_BLACK); tft.drawString("Update Failed", tft.width() / 2 - 20, 55 ); delay(3000); tft.fillScreen(TFT_BLACK); }); ArduinoOTA.begin(); tft.println("IP address: "); tft.println(WiFi.localIP().toString()); Serial.println("Ready"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void loop() { ArduinoOTA.handle(); }