Dieses Tutorial zeigt dir Schritt für Schritt, wie du mit SinricPro Over-The-Air (OTA) Firmware-Updates für dein ESP32 oder ESP8266 Gerät einrichtest. Mit OTA aktualisierst du die Firmware deines Geräts aus der Ferne, ohne es an einen Computer anschließen zu müssen. Ideal für IoT-Geräte, die bereits im Einsatz sind!
SinricPro OTA (Over-The-Air) ist eine Funktion, mit der dein ESP-Gerät neue Firmware vom Server herunterlädt und installiert, sobald das Update im SinricPro Dashboard ausgelöst wird.
Bevor du anfängst, brauchst du:
APP_KEY und APP_SECRET aus portal.sinric.pro -> CredentialsSWITCH_ID usw.) deines Geräts aus portal.sinric.pro -> Devices💡 Vollständiger Code: hier
In der Arduino IDE:
SinricProKopiere den folgenden Beispielcode in deine Arduino IDE.
WICHTIG:
FIRMWARE_VERSIONist die Firmware-Version. Du siehst sie im Portal im Bereich Module. Sie muss oberhalb von SinricPro.h definiert sein
// Uncomment the following line to enable serial debug output
// #define SINRICPRO_NOSSL // Uncomment if you have memory limitation issues.
// #define ENABLE_DEBUG // Enable SDK logging.
// Your firmware version. Must be above SinricPro.h. Do not rename this.
#define FIRMWARE_VERSION "1.1.1"
#ifdef ENABLE_DEBUG
#define DEBUG_ESP_PORT Serial
#define NODEBUG_WEBSOCKETS
#define NDEBUG
#endif
#include <Arduino.h>
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include "ESP8266OTAHelper.h" // Ref: https://github.com/sinricpro/esp8266-esp32-sdk/tree/master/examples/OTAUpdate
#elif defined(ESP32)
#include <WiFi.h>
#include "ESP32OTAHelper.h" // Ref: https://github.com/sinricpro/esp8266-esp32-sdk/tree/master/examples/OTAUpdate
#elif defined(ARDUINO_ARCH_RP2040)
#include <WiFi.h>
#include "ESP8266OTAHelper.h" // Ref: https://github.com/sinricpro/esp8266-esp32-sdk/tree/master/examples/OTAUpdate
#endif
#include "SemVer.h"
#include "SinricPro.h"
#include "SinricProSwitch.h"
#define WIFI_SSID "YOUR-WIFI-SSID"
#define WIFI_PASS "YOUR-WIFI-PASSWORD"
#define APP_KEY "YOUR-APP-KEY" // Should look like "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx"
#define APP_SECRET "YOUR-APP-SECRET" // Should look like "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx"
#define SWITCH_ID "SWITCH_ID" // Should look like "5dc1564130xxxxxxxxxxxxxx"
#define BAUD_RATE 115200 // Change baudrate to your need
bool handleOTAUpdate(const String& url, int major, int minor, int patch, bool forceUpdate) {
Version currentVersion = Version(FIRMWARE_VERSION);
Version newVersion = Version(String(major) + "." + String(minor) + "." + String(patch));
bool updateAvailable = newVersion > currentVersion;
Serial.print("URL: ");
Serial.println(url.c_str());
Serial.print("Current version: ");
Serial.println(currentVersion.toString());
Serial.print("New version: ");
Serial.println(newVersion.toString());
if (forceUpdate) Serial.println("Enforcing OTA update!");
// Handle OTA update based on forceUpdate flag and update availability
if (forceUpdate || updateAvailable) {
if (updateAvailable) {
Serial.println("Update available!");
}
String result = startOtaUpdate(url);
if (!result.isEmpty()) {
SinricPro.setResponseMessage(std::move(result));
return false;
}
return true;
} else {
String result = "Current version is up to date.";
SinricPro.setResponseMessage(std::move(result));
Serial.println(result);
return false;
}
}
// setup function for WiFi connection
void setupWiFi() {
Serial.printf("\r\n[Wifi]: Connecting");
#if defined(ESP8266)
WiFi.setSleepMode(WIFI_NONE_SLEEP);
WiFi.setAutoReconnect(true);
#elif defined(ESP32)
WiFi.setSleep(false);
WiFi.setAutoReconnect(true);
#endif
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.printf(".");
delay(250);
}
Serial.printf("connected!\r\n[WiFi]: IP-Address is %s\r\n", WiFi.localIP().toString().c_str());
}
// setup function for SinricPro
void setupSinricPro() {
SinricProSwitch& mySwitch = SinricPro[SWITCH_ID];
// setup SinricPro
SinricPro.onConnected([]() {
Serial.printf("Connected to SinricPro\r\n");
});
SinricPro.onDisconnected([]() {
Serial.printf("Disconnected from SinricPro\r\n");
});
SinricPro.onOTAUpdate(handleOTAUpdate);
SinricPro.begin(APP_KEY, APP_SECRET);
}
// main setup function
void setup() {
Serial.begin(BAUD_RATE);
Serial.printf("\r\n\r\n");
setupWiFi();
setupSinricPro();
}
void loop() {
SinricPro.handle();
}
#define FIRMWARE_VERSION "1.1.1"
SinricPro.h eingebunden wird.MAJOR.MINOR.PATCH).In der Arduino IDE:
.bin-Datei in deinem Sketch-Ordner.Beispiel:
your_sketch.ino.esp32.bin
Melde dich bei deinem Sinric Pro Konto an.
Öffne links das Menü OTA Updates.
Klicke auf die Schaltfläche Add OTA Update.
Gib die neue Firmware-Version ein. Wähle die OTA-.bin-Datei (your_sketch.ino.esp32.bin) und die Module aus, auf die das OTA-Update angewendet werden soll.
Klicke auf Save

Sobald du auf Save klickst, sendet der Server eine OTA-Update-Anfrage an die ausgewählten Module. Ist dein Modul gerade offline, erhält es das Update, wenn es sich das nächste Mal mit dem Server verbindet.

Aktiviere die Debug-Ausgabe, indem du diese Zeile einkommentierst:
#define ENABLE_DEBUG
Achte im seriellen Monitor (115200 baud) auf:
Häufige Probleme:
| Symptom | Lösung |
|---|---|
Update failed: connection refused |
Prüfe, ob die URL öffentlich erreichbar ist |
Update failed: not enough space |
Verkleinere den Sketch oder verwende SINRICPRO_NOSSL |
Version not updating |
Stelle sicher, dass FIRMWARE_VERSION im Sketch erhöht wurde, bevor du die neue Binärdatei kompilierst |
Device not responding after OTA |
Prüfe auf Abstürze und füge Verzögerungen oder einen Watchdog-Reset ein |
1.0.0, 1.0.1, 2.0.0 usw.).loop() nach SinricPro.handle() eine Verzögerung von 5-10 Sekunden ein, wenn das Gerät instabil läuft.✅ Ja! Der OTA-Mechanismus ist unabhängig vom Gerätetyp. Registriere einfach SinricPro.onOTAUpdate(...), egal welche Geräteklasse du verwendest.
Das Gerät:
SinricPro.setResponseMessage(...).✅ Ja, standardmäßig. Wenn du auf dem ESP8266 Speicherprobleme hast, kommentiere diese Zeile ein:
#define SINRICPRO_NOSSL
⚠️ Das deaktiviert SSL. Verwende es nur in vertrauenswürdigen Netzwerken oder mit HTTP-URLs.
Das hängt ab von:
Im Durchschnitt: 30 Sekunden bis 3 Minuten.
Den vollständigen Beispielcode findest du hier: https://github.com/sinricpro/esp8266-esp32-sdk/tree/master/examples/OTAUpdate
Wenn du ein OTA-Update über das lokale WLAN suchst, findest du es hier