Over The Air - Pro­gram­me mit WiFi hochladen

Lese­zeit: 3 Minu­ten

Im Regel­fall wird für das Hoch­la­den des Pro­gramms ein USB-Anschluss ver­wen­det. Bei den Mikro­con­trol­lern mit einem WiFi-Modul besteht die Mög­lich­keit, das Pro­gramm über die draht­lo­se Ver­bin­dung hoch­zu­la­den. Wenn die Mikroon­trol­ler mit einem exter­nen Netz­teil betrie­ben wer­den, kön­nen Pro­gramm auch ohne Com­pu­ter und USB-Anschluss hoch­ge­la­den werden.

Instal­lie­re zunächst die benö­tig­te Bibliothek:

Das Basis­pro­gramm für die Nut­zung von Over The Air (OTA):

// ESP8266
// #include "ESP8266WiFi.h"
// #include "ArduinoOTA.h"

// ESP32
#include "WiFi.h"
#include "ArduinoOTA.h"

// Name des Router/Passwort
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";

void setup() 
{
  Serial.begin(9600);
  delay(1000);

  Serial.println("Starte ...");

  // Verbindung aufbauen
  WiFi.begin(Router, Passwort);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) 
  {
    Serial.println("Keine Verbindung, neuer Versuch...");
    delay(2000);
    ESP.restart();
  }

  // OTA starten
  ArduinoOTA.begin();

  // Rechnername setzen
  ArduinoOTA.setHostname("ESP");

  // Passwort zum Hochladen setzen
  // Passwortabfrage vor dem Hochladen entfällt
  ArduinoOTA.setPassword("xxxxxxxx");


  Serial.println("Verbindung erfolgreich hergestellt!");
  Serial.print("IP Adresse: ");
  Serial.println(WiFi.localIP());
}

void loop() 
{
  // Updates über OTA ermöglichen
  ArduinoOTA.handle();
}

Im Seri­el­len Moni­tor siehst du die IP-Adres­se mit der die Ver­bin­dung her­ge­stellt wurde.

Nach dem Hoch­la­den siehst du neben dem bis­her ver­wen­de­ten USB-Port den hin­zu­ge­füg­ten Netzwerkport.

Nach der Ein­ga­be eines belie­bi­gen Pass­worts wird das Hoch­la­den gestar­tet. Wenn du ein Pass­wort gesetzt hast (ArduinoOTA.setPassword("xxxxxxxx") ent­fällt die­ser Schritt.

Am Bei­spiel des Blink-Pro­gramms soll die Ver­wen­dung von OTA erläu­tert werden.

// ESP8266
// #include "ESP8266WiFi.h"
// #include "ArduinoOTA.h"

// ESP32
#include "WiFi.h"
#include "ArduinoOTA.h"

char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";

/*
 interne LEDs
 Arduino Nano ESP32 -> D13
 Wemos D1 Mini D4
 ESP32-Wroom -> 2
*/
 
int LED = D13;

void setup() 
{
  Serial.begin(9600);
  delay(1000);
  Serial.println("Starte ...");

  WiFi.begin(Router, Passwort);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) 
  {
    Serial.println("Keine Verbindung, neuer Versuch...");
    delay(2000);
    ESP.restart();
  }

  ArduinoOTA.begin();
  ArduinoOTA.setHostname("ESP");
  ArduinoOTA.setPassword("xxxxxxxx");

  Serial.println("Verbindung erfolgreich hergestellt!");
  Serial.print("IP Adresse: ");
  Serial.println(WiFi.localIP());
  pinMode(LED, OUTPUT);
}

void loop() 
{
  ArduinoOTA.handle();
  digitalWrite(LED, HIGH);
  delay(1000);
  digitalWrite(LED, LOW);
  delay(1000); 
}