Forum: Mikrocontroller und Digitale Elektronik ESP32 BLE OTA Arduino


von Alexander (alecxs)


Lesenswert?

Ich möchte auf dem ESP32 OTA nutzen. Nun gibt es verschiedene 
Möglichkeiten.

https://github.com/ayushsharma82/ElegantOTA

https://github.com/fbiego/ESP32_BLE_OTA_Arduino

https://github.com/michael-angerer/esp32_ble_ota

https://github.com/gb88/BLEOTA

Am besten gefällt mir die von (gb88) wegen der Sicherheit. Allerdings 
gibt es dazu keine App? Welche der Lösungen bietet sich an über einen 
Task im Hintergrund laufen zu lassen, so dass ein OTA während dem 
normalen Programm nebenher laufen kann, und dann nur ein Neustart 
ausgelöst wird?

von John P. (brushlesspower)


Lesenswert?

Ich nutze die Variante von fbiego.
funktioniert soweit ohne Probleme.

Alexander schrieb:
> elche der Lösungen bietet sich an über einen
> Task im Hintergrund laufen zu lassen, so dass ein OTA während dem
> normalen Programm nebenher laufen kann, und dann nur ein Neustart
> ausgelöst wird?

Wann der ESP das Update durchführen soll kannst du ja bestimmen. 
Letztlich wird das Update irgendwo hinkopiert (SD Karte/SPIFFS/FFAT) und 
dann der update prozess gestartet.

von Alexander (alecxs)


Lesenswert?

Wie sieht es da aus mit der Sicherheit? ESP32 läuft im Auto

von John P. (brushlesspower)


Lesenswert?

Alexander schrieb:
> Wie sieht es da aus mit der Sicherheit? ESP32 läuft im Auto

Hm....theoretisch kann jeder bei mir ein Update einspielen.

Müsste man mal ausprobieren ob es reicht die charakteristik oder service 
mit einer Pin zu sichern.

Eventuell reicht es dir das Update nur auf knopfdruck zu erlauben?

von Alexander (alecxs)


Lesenswert?

Nein komme nicht ran. Ist auch nur bei Zündung ein aktiv. Ich sag mal 
so, das Szenario ist sehr sehr unwahrscheinlich. Trotzdem muss ich es 
irgendwie absichern.

von John P. (brushlesspower)


Lesenswert?

Ist Bluetooth dauerhaft an?

Ansonsten nur 30 sek nach Zündung anlassen. Wenn bis dahin niemand 
connected wieder aus.

von Rüdiger B. (rbruns)


Lesenswert?

BLE Pairing mit PIN

von Alexander (alecxs)


Lesenswert?

Ich werde mal versuchen den Code als Task laufen zu lassen. Die beiden 
Tipps kann ich zusätzlich einbauen.

https://github.com/gb88/BLEOTA/blob/nimble/examples/nimble/bleota_secure/bleota_secure.ino

von Alexander (alecxs)


Lesenswert?

Alexander schrieb:
> 
https://github.com/gb88/BLEOTA/blob/nimble/examples/nimble/bleota_secure/bleota_secure.ino

Kann das mal jemand testen? Es sind zwei Zip's herunterzuladen und über
Sketch -> Include Library -> Add .ZIP Library... zu installieren,

BLEOTA-nimble.zip
https://github.com/gb88/BLEOTA/tree/nimble

NimBLE-Arduino.zip
https://github.com/h2zero/NimBLE-Arduino/tree/a79941c

dann unter
File -> Examples -> BLEOTA -> nimble -> bleota_secure -> die 
bleota_secure.ino zu öffnen.

Es kompiliert aber läuft nicht richtig auf dem ESP32 (Handyladegerät an 
USB). Es werden nur kryptische Zeichen angezeigt.
1
Manufacturer: H<�?
2
Model: <�?
3
HW Version: 8<�?
4
FW Version: (<�?
https://gb88.github.io/BLEOTA

: Bearbeitet durch User
von John P. (brushlesspower)


Lesenswert?

Alexander schrieb:
> Es werden nur kryptische Zeichen angezeigt.

Wo?
In Arduino Monitor?
Oder in der Nordic App?

von Alexander (alecxs)


Lesenswert?

Im Arduino Monitor wird es korrekt angezeigt, aber über Bluetooth nicht. 
Es scheint einen Konflikt zu geben mit dem ESP32 Framework, da wird die 
Standard BLE Lib mit kompiliert. Bin gerade dabei die NimBLEOTA zu 
patchen, lade es dann auf GitHub hoch.

von John P. (brushlesspower)


Lesenswert?

Gibt es dazu Neuigkeiten?

von Alexander (alecxs)


Lesenswert?

Ich hab es nicht weiter verfolgt, hängt in der Warteschleife - siehe 
Issues #21 und #16. Es könnte an meinem Android Chrome Browser liegen, 
muss das noch mal mit einem anderen Gerät testen.

https://github.com/gb88/BLEOTA/issues/21

Ich hab nun erstmal das ElegantOTA Lite verwendet, das geht über WLAN.

Dazu die folgenden Libraries installieren:
- 
https://codeload.github.com/ayushsharma82/ElegantOTA/zip/refs/tags/3.1.7
- 
https://codeload.github.com/ESP32Async/ESPAsyncWebServer/zip/refs/tags/v3.7.8
- https://codeload.github.com/ESP32Async/AsyncTCP/zip/refs/tags/v3.4.4

Dann in 
%UserProfile%\Documents\Arduino\libraries\ElegantOTA\src\ElegantOTA.h 
diese Zeile von 0 auf 1 ändern, sonst macht der Linker Probleme:
1
#define ELEGANTOTA_USE_ASYNC_WEBSERVER 1
Um das AsyncDemo.ino Sketch umzuschreiben von Client auf AP muss man nur 
die folgenden Zeilen ändern.
Das raus löschen:
1
 <!   WiFi.mode(WIFI_STA);
2
 <!   WiFi.begin(ssid, password);
3
 <!   Serial.println("");
4
 <! 
5
 <!   // Wait for connection
6
 <!   while (WiFi.status() != WL_CONNECTED) {
7
 <!     delay(500);
8
 <!     Serial.print(".");
9
 <!   }
10
 <!   Serial.println("");
11
 <!   Serial.print("Connected to ");
12
 <!   Serial.println(ssid);
13
 <!   Serial.println(WiFi.localIP());

und durch das ersetzen:
1
 !>   WiFi.mode(WIFI_AP);
2
 !>   WiFi.softAP(ssid, password);
3
 !>   Serial.println("Access Point started");
4
      Serial.print("IP address: ");
5
 !>   Serial.println(WiFi.softAPIP());

Dann kann man sich verbinden, geht auf http://192.168.4.1/update und 
lädt die 
%Temp%\arduino\sketches\6C73C7CAA43FACF93DFB43A7254684DB\AsyncDemo.ino.b 
in  hoch, geht schneller als Bluetooth.

In der main loop() ist nur eine Zeile. Die blockt bis zu 100ms könnte 
man noch auslagern in einen Task.
1
  ElegantOTA.loop();
Passwort steht als Klartext im Sketch, könnte man sicher noch base64 
maskieren aber ich denke das reicht mir so als Sicherheit.
1
const char* ssid = "ESP32";
2
const char* password = "12345678";

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.