ArduinoOTA i supla-device (aktualizacja PlatformIO)

jaku2k
Posts: 862
Joined: Sun May 24, 2020 8:40 pm

Post

Dzień dobry,
próbuję dodać aktualizację "ArduinoOTA" (espresiff32) do szkicu w PlatformIO. Zależy mi na możliwości wgrywania softu za pośrednictwem LAN-u.
Na jednym urządzeniu udało mi się to zrobić poprzez dodanie w

Code: Select all

void setup () {
   while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  ArduinoOTA.begin(); 
}
oraz w

Code: Select all

void loop () {
  ArduinoOTA.handle();
}
licząc, że nie będzie kolidowało to z suplową implementacją Wi-Fi. W jednym przypadku próba zakończyła się powodzeniem, jednak w drugim, bliźniaczym (bardzo podobny szkic, różniący się jedynie układem kanałów) - Supla na urządzeniu uruchamia się i tworzy AP, ale nie generuje GUI strony konfiguracyjnej.

Odnoszę wrażenie, że zastosowana przeze mnie metoda jest niewłaściwa. Czy dodawał ktoś ArduinoOTA do szkicu z supla-device? Jak należy to zrobić?
Last edited by jaku2k on Tue Jun 04, 2024 8:37 pm, edited 2 times in total.
Pozdrawiam
Jakub
jaku2k
Posts: 862
Joined: Sun May 24, 2020 8:40 pm

Post

Dzięki pomocy @klew udało się rozwiązać problem.
SuplaDevice.begin() nie startuje wifi. To się dzieje gdzieś automatycznie w iterate.
Należało umieścić
w setupie:

Code: Select all

  // Hostname domyślnie esp3232-[MAC]
  ArduinoOTA.setHostname("hostname");

  // No authentication by default
  ArduinoOTA.setPassword("haslo");

  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)));
    })
    .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");
      }
    });
i w loopie:

Code: Select all

  SuplaDevice.iterate();
  if (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("OTA działa");
    ArduinoOTA.begin();  // Start OTA
  }
  ArduinoOTA.handle();
Pozdrawiam
Jakub

Return to “Pomoc”