ArduinoOTA — разница между ArduinoIDE и PlatfromIO
Я использовал OTA-скетчи и файлы данных с помощью инструментов ArduinoOTA
и ESP32 Sketch Data Upload
и набора средств разработки ESP32, например, при использовании Arduino IDE.
Версии:
- Arduino IDE-1.8.19
- ESP32 в Arduino IDE — 1.0.6
- ArduinoOTA 1.0.9
Переход на PlatformIO-
Начал новый проект с использованием набора для разработки ESP32, ArduinoOTA
был добавлен из реестра в проект (также 1.0.9, как в ArduinoIDE).
И теперь — при попытке скопировать пример BasicOTA
из примера ArduinoOTA
ArduinoIDE — компиляция не удалась.
Чтобы убедиться в отсутствии проблем с библиотекой/версией, я проверил:
WiFi
,ESPmDNS
является частьювстроенной
.WiFiUdp
не найден ни вовстроенном
,установленном
, ни вреестре
— не отображается в графе зависимостей во время компиляции -- ??ArduinoOTA
используется из реестра.
#include <WiFi.h> #include <ESPmDNS.h> #include <WiFiUdp.h> #include <ArduinoOTA.h> const char* ssid = "dvirz_iot"; const char* password = "GdSd13100301"; void setup() { Serial.begin(115200); Serial.println("Booting"); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.println("Connection Failed! Rebooting..."); delay(5000); ESP.restart(); } // Порт по умолчанию — 3232 // ArduinoOTA.setPort(3232); // Имя хоста по умолчанию — esp3232-[MAC] // ArduinoOTA.setHostname("myesp32"); // Без аутентификации по умолчанию // ArduinoOTA.setPassword("admin"); // Пароль также можно установить с помощью его значения md5 // MD5(админ) = 21232f297a57a5a743894a0e4a801fc3 // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3"); ArduinoOTA .onStart([]() { String type; if (ArduinoOTA.getCommand() == U_FLASH) type = "sketch"; else // U_SPIFFS type = "filesystem"; // ПРИМЕЧАНИЕ: при обновлении SPIFFS это будет место для размонтирования SPIFFS с помощью 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"); }); ArduinoOTA.begin(); Serial.println("Ready"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void loop() { ArduinoOTA.handle(); }
и получил эту ошибку компиляции:
* Executing task in folder esp32_OTA_from_scratch: platformio run --environment esp32dev
Processing esp32dev (platform: espressif32; board: esp32dev; framework: arduino)
-------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32dev.html
PLATFORM: Espressif 32 (6.1.0) > Espressif ESP32 Dev Module
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 @ 3.20007.0 (2.0.7)
- tool-esptoolpy @ 1.40500.0 (4.5.0)
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 34 compatible libraries
Scanning dependencies...
Dependency Graph
|-- ArduinoOTA @ 1.0.9
|-- ESPmDNS @ 2.0.0
|-- WiFi @ 2.0.0
Building in release mode
Compiling .pio/build/esp32dev/src/main.cpp.o
Building .pio/build/esp32dev/bootloader.bin
Generating partitions .pio/build/esp32dev/partitions.bin
esptool.py v4.5
Creating esp32 image...
Merged 1 ELF section
Successfully created esp32 image.
Compiling .pio/build/esp32dev/lib8f4/Update/HttpsOTAUpdate.cpp.o
Compiling .pio/build/esp32dev/lib8f4/Update/Updater.cpp.o
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFi.cpp.o
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFiAP.cpp.o
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFiClient.cpp.o
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFiGeneric.cpp.o
Archiving .pio/build/esp32dev/lib8f4/libUpdate.a
Indexing .pio/build/esp32dev/lib8f4/libUpdate.a
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFiMulti.cpp.o
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFiSTA.cpp.o
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFiScan.cpp.o
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFiServer.cpp.o
Compiling .pio/build/esp32dev/liba9d/WiFi/WiFiUdp.cpp.o
Compiling .pio/build/esp32dev/libc4b/FS/FS.cpp.o
Compiling .pio/build/esp32dev/libc4b/FS/vfs_api.cpp.o
Compiling .pio/build/esp32dev/lib263/SPI/SPI.cpp.o
Archiving .pio/build/esp32dev/liba9d/libWiFi.a
Indexing .pio/build/esp32dev/liba9d/libWiFi.a
Compiling .pio/build/esp32dev/lib494/SD/SD.cpp.o
Archiving .pio/build/esp32dev/lib263/libSPI.a
Indexing .pio/build/esp32dev/lib263/libSPI.a
Compiling .pio/build/esp32dev/lib494/SD/sd_diskio.cpp.o
Compiling .pio/build/esp32dev/lib494/SD/sd_diskio_crc.c.o
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/InternalStorage.cpp.o
Archiving .pio/build/esp32dev/libc4b/libFS.a
Indexing .pio/build/esp32dev/libc4b/libFS.a
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/InternalStorageAVR.cpp.o
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/InternalStorageESP.cpp.o
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/InternalStorageRP2.cpp.o
Archiving .pio/build/esp32dev/lib494/libSD.a
Indexing .pio/build/esp32dev/lib494/libSD.a
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/InternalStorageSTM32.cpp.o
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/OTAStorage.cpp.o
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/WiFiOTA.cpp.o
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/utility/rp2_flash_boot.c.o
Compiling .pio/build/esp32dev/lib624/ArduinoOTA/utility/stm32_flash_boot.c.o
Compiling .pio/build/esp32dev/lib6d4/ESPmDNS/ESPmDNS.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/Esp.cpp.o
Archiving .pio/build/esp32dev/lib624/libArduinoOTA.a
Compiling .pio/build/esp32dev/FrameworkArduino/FirmwareMSC.cpp.o
Indexing .pio/build/esp32dev/lib624/libArduinoOTA.a
Compiling .pio/build/esp32dev/FrameworkArduino/FunctionalInterrupt.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/HWCDC.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/HardwareSerial.cpp.o
Archiving .pio/build/esp32dev/lib6d4/libESPmDNS.a
Indexing .pio/build/esp32dev/lib6d4/libESPmDNS.a
Compiling .pio/build/esp32dev/FrameworkArduino/IPAddress.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/IPv6Address.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/MD5Builder.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/Print.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/Stream.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/StreamString.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/Tone.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/USB.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/USBCDC.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/USBMSC.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/WMath.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/WString.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/base64.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/cbuf.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-adc.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-bt.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-cpu.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-dac.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-gpio.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-i2c-slave.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-i2c.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-ledc.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-matrix.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-misc.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-psram.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-rgb-led.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-rmt.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-sigmadelta.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-spi.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-time.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-timer.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-tinyusb.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-touch.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/esp32-hal-uart.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/firmware_msc_fat.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/libb64/cdecode.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/libb64/cencode.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/main.cpp.o
Compiling .pio/build/esp32dev/FrameworkArduino/stdlib_noniso.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/wiring_pulse.c.o
Compiling .pio/build/esp32dev/FrameworkArduino/wiring_shift.c.o
Archiving .pio/build/esp32dev/libFrameworkArduino.a
Indexing .pio/build/esp32dev/libFrameworkArduino.a
Linking .pio/build/esp32dev/firmware.elf
Retrieving maximum program size .pio/build/esp32dev/firmware.elf
Checking size .pio/build/esp32dev/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [= ] 8.0% (used 26164 bytes from 327680 bytes)
Flash: [== ] 24.6% (used 322233 bytes from 1310720 bytes)
Building .pio/build/esp32dev/firmware.bin
esptool.py v4.5
Creating esp32 image...
Merged 2 ELF sections
Successfully created esp32 image.
========================================================= [SUCCESS] Took 13.72 seconds =========================================================
* Terminal will be reused by tasks, press any key to close it.
* Executing task in folder esp32_OTA_from_scratch: platformio run --environment esp32dev
Processing esp32dev (platform: espressif32; board: esp32dev; framework: arduino)
-------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32dev.html
PLATFORM: Espressif 32 (6.1.0) > Espressif ESP32 Dev Module
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 @ 3.20007.0 (2.0.7)
- tool-esptoolpy @ 1.40500.0 (4.5.0)
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 34 compatible libraries
Scanning dependencies...
Dependency Graph
|-- ArduinoOTA @ 1.0.9
|-- ESPmDNS @ 2.0.0
|-- WiFi @ 2.0.0
Building in release mode
Compiling .pio/build/esp32dev/src/main.cpp.o
src/main.cpp: In lambda function:
src/main.cpp:39:22: error: 'class ArduinoOTAMdnsClass<WiFiServer, WiFiClient, WiFiUDP>' has no member named 'getCommand'
if (ArduinoOTA.getCommand() == U_FLASH)
^~~~~~~~~~
src/main.cpp:39:38: error: 'U_FLASH' was not declared in this scope
if (ArduinoOTA.getCommand() == U_FLASH)
^~~~~~~
src/main.cpp: In function 'void setup()':
src/main.cpp:37:13: error: invalid use of 'void'
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);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
})
~~
src/main.cpp:49:6: error: expected primary-expression before ')' token
})
^
src/main.cpp:52:6: error: expected primary-expression before ')' token
})
^
src/main.cpp:60:6: error: expected primary-expression before ')' token
});
^
src/main.cpp:62:20: error: no matching function for call to 'ArduinoOTAMdnsClass<WiFiServer, WiFiClient, WiFiUDP>::begin()'
ArduinoOTA.begin();
^
In file included from src/main.cpp:5:
.pio/libdeps/esp32dev/ArduinoOTA/src/ArduinoOTA.h:91:8: note: candidate: 'void ArduinoOTAMdnsClass<NetServer, NetClient, NetUDP>::begin(IPAddress, const char*, const char*, OTAStorage&) [with NetServer = WiFiServer; NetClient = WiFiClient; NetUDP = WiFiUDP]'
void begin(IPAddress localIP, const char* name, const char* password, OTAStorage& storage) {
^~~~~
.pio/libdeps/esp32dev/ArduinoOTA/src/ArduinoOTA.h:91:8: note: candidate expects 4 arguments, 0 provided
*** [.pio/build/esp32dev/src/main.cpp.o] Error 1
========================================================== [FAILED] Took 2.69 seconds ==========================================================
* The terminal process "platformio 'run', '--environment', 'esp32dev'" terminated with exit code: 1.
* Terminal will be reused by tasks, press any key to close it.
В чем может быть проблема??
Парень
@Guy . D, 👍2
2 ответа
Все, что я вижу, это три проблемы (плюс, возможно, несколько дополнительных)
- Вы не можете использовать такие установщики обратного вызова последовательно, он возвращает void, и нет никакого смысла иметь void.onProgress... и эти обратные вызовы, похоже, не соответствуют текущей библиотеке, поэтому вам следует просто отказаться их полностью.
- Не существует
begin()
без параметров. См. примеры. - В библиотеке я вижу только установщики обратного вызова:
beforeApply
,onError
иonStart
- Возможно, вам не хватает
#include <Arduino.h>
(у него нет препроцессора, такого как ArduinoIDE, который добавляет это в первую строку без вашего ведома - Возможно, вам не хватает некоторых определений (вы можете сравнить команды компиляции Arduino и Pio)
В любом случае вам стоит взглянуть на примеры (по крайней мере, начало есть). Обратные вызовы выглядят так, будто они взяты неизвестно откуда (вероятно, из другой библиотеки или около того).
Но они обязательно должны быть полными, например:
ArduinoOTA.onStart([](){ /* started */ });
ArduinoOTA.onBeforeApply([](){ /* before aply */ });
РЕДАКТИРОВАТЬ:
После некоторого поиска библиотека ArduinoOTA находится непосредственно в ядре esp32 (google: "arduinoOTA onProgress esp32"), поэтому вам не нужно добавлять lib_deps для ArduinoOTA. Или, что более вероятно, вам не следует ничего добавлять, и тогда будет использоваться правильная библиотека. Если нет, вам придется скопировать (или загрузить) правильную библиотеку в подкаталог lib/.
Если вы проверите библиотеку ArduinoOTA в Github, то обнаружится, что эта библиотека не тестировалась на платформеIO. Также обратите внимание, что не все функции одинаковы, параметры при вызове в ArduinoIDE и на PlatformIO различны.
- Достаточно ли 1 МБ флэш-памяти для загрузки OTA в ESP-01?
- Тот же код работает на Arduino IDE, но не в PlatformIO IDE
- Код Arduino работает через IDE, а не через код Arduino PlatformIO
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
Привет @KIIV. Как вы можете объяснить тот факт, что пример взят из библиотеки ArduinoOTA (при использовании Arduino IDE), компилируется и работает как надо??, @Guy . D
Возможно, это другая библиотека (или версия). Иногда в ядрах есть библиотеки. Вы всегда можете найти ее местоположение и скопировать эту библиотеку в подкаталог lib вашего проекта (и удалить ссылку lib_deps ArduinoOTA), чтобы использовать правильную версию., @KIIV