ESP32 - Wie kann man dasselbe Image fuer verschiedene ESP Instanzen customizen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Nachdem ich jetzt Licht am Ende des Tunnels sehe wie ich Daemmerungssensoren mit dem ESP32 recht einfach aufbauen und nutzen kann frage ich mich wie ich meine drei ESP32 die dasselbe Image benoetigen - aber unterschiedlich konfiguriert werden muessen (MQTT topic). Auf einem Laptop wuerde ich entweder Environment Variablen dazu benutzen oder eine Konfigurationsdatei (z.B. in JSON). Wie macht man das am geschicktesten auf dem ESP32?

  • ESP32 - Wie kann man dasselbe Image fuer verschiedene ESP Instanzen customizen? Schau mal ob du hier fündig wirst!

  • Der hat eine unique ID, die benutze ich dafür. Die Konfiguration für alle ist dann im Code, und die richtige wird ausgewählt.

    Natürlich kann man dank Flash & Netzwerk auch nachträglich was einstellen, oder arbeitet mit verschiedenen builds. Aber der ID Weg ist am einfachsten.

  • Das ist ein statischer Ansatz aber in meinem Falle keine schlechte Idee. Einfach eine kleine Tabelle ins Image compilieren und zur Laufzeit ein Loockup nach der ID. Wie bekomme ich die ID in C raus? Das ist ein einfacher Ansatz der @home gehbar ist. Wenn man weitere ESPs hat erweitert man die Tabelle einfach.

    Mich wurde mal interessieren wie jemand der ESPs in seinem Produkt in grossen Mengen verkauft das Problem erschlaegt. Ad hoc faellt mir dazu nur ein dass ein Webserver auf dem ESP laufen muss ueber den man den ESP konfiguriert. Wie kann man auf dem ESP die per Webfrontend gesammelten Konfigurationsdaten auf dem ESP persistent ablegen?

  • Wie gesagt, der hat ein Flash filesystem.

    Wie der C call heißt kann ich erst morgen raussuchen. Ich denke aber der wird auch in der guten ESP Doku auftauchen.

  • Ich habe verschiedene Seiten gefunden wo die Mac Adresse als unique ID genannt wird. Das geht natürlich auch. Aber eine dedizierte ID wäre natürlich noch besser. Oder man benutzt eFuse. Die hat aber nur wenig Bits zur Verfügung.

  • Also auf meinem ESP8266 mache ich das immer mit einer Webpage. Die grundlegenden Daten (Zugriff auf Router) konfiguriere ich, indem ich mich direkt in den ESP einwähle (ESP als Access Point) - per Handy. Wenn ich mal im Netzwerk mit dem ESP bin, lade ich die restlichen HTML Seiten hoch und auch die Konfugurationsdateien... Damit ich den Flash als Dateisystem verwenden kann, verwende ich SPIFFS...

    Ich muss gestehen, ich bastle schon Monate und bin noch immer nicht so weit wie ich gerne wäre, aber die Möglichkeiten die sich damit auftun sind quasi unendlich...

    Edit: Ach, und um einen eindeutigen Namen für meinen ESP zu bekommen, verwende ich die Funktion ESP.getChipId(). Ich denke mir, dass der ESP32 über ähnliche Funktionalität verfügt?

    ...wenn Software nicht so hard-ware ;) ...

    Freue mich über jeden like :thumbup:

    Einmal editiert, zuletzt von VeryPrivat (11. Juli 2020 um 10:03)

  • Das ist die MAC, ja: https://github.com/deets/esp32pla…r/main/main.cpp

    Warum reicht die dir nicht?

    ich sagte nicht dass die nicht reicht :shy: ich sagte nur dass ich eine SerialNum wie z.B. beim Raspi besser faende. Der Kommentar im Code sagt es ja deutlich dass offensichtlich keine andere Moeglichkeit existiert wie beim Raspi der noch die Serialnumber hat.

    Bei diesem Code musste ich erst mal mein alten C++ Kenntnisse aus dem Hinterzimmer rauskramen um ihn zu verstehen. Ist aber eine nette Art die Mac rauszufummeln :thumbup:

  • Ich sehe da halt keinen substantiellen Unterschied. Es sollte eine eindeutige Nummer sein. Das war’s. Es gibt ja andere Wege rauszufinden, welche sonstigen Eigenschaften das System hat. Was eh besser ist, als da irgendwelche Bits in eine ID abzufragen, oder mindestens mal einfach wegabstrahiert gehört.

  • Also ich mach es wie VeryPrivate, aber bisher auch nur mit ESP8266. Die haben eine eigene Webseiten, auch für die Eingabe von SSID und Passwort.

    Dort kann ich MQTT-Server, Topic, Updateserver konfigurieren.

    Das Spiffs habe ich von hier, damit kann man die Wesbseiten auch nachträglich hochladen:

    https://fipsok.de/Esp8266-Webserver/esp8266#spiffs

    Ich weiss aber nicht ob das mit einem 32 auch so funktioniert.

    Holger

    openHAB2 / Node-Red / PiHole / Mosquitto / Thunderbird auf Raspi4 4GB & rocRail auf Raspi4 2GB

  • Ohne jetzt den anderen Thread gelesen zu haben, aber ich nutze für meine ESPs fast nur noch ESPEasy. Da kannst du deinem Gerät einen Namen geben und der wird automatisch in den MQTT Nachrichten genutzt.

    Ich weiß aber nicht wie gut die Software auf dem ESP32 läuft.

  • Vielen Dank fuer die Alternativen zu dem Vorschlag von @__deets__ . Es hat etwas gedauert bis ich die Mac auslesen konnte aber dann funktioniert sein Ansatz mit einer Lookuptabelle sehr gut um z.B. das MQTT Topic festzulegen.

    Die LAN Zugangsdaten (ssid und credential) werde ich hart ins Image flashen. Die beste Methode waere sicherlich ein Webinterface aber das ist mir momentan zu heavyweight. Wie gesagt fange ich gerade an mich mit dem ESP zu befassen und ich bin schon froh dass ich dem Sensor beigebracht habe das zu tun was ich von ihm erwarte. Primaeres Ziel meinerseits ist erst mal die Sensoren ans Node-RED anzubinden und meine 433MHz Schalter damit zu steuern. Ich denke das wird nicht mein letzter Einsatz von ESPs sein und wenn ich dann mal erfahrener mit ESPs bin baue ich sicherlich noch einen HTTP Server zur Konfiguration ein :shy:

  • Es hat etwas gedauert bis ich die Mac auslesen konnte

    ich sehe die mac der esp in der fritzbox ;) ...

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

  • Der ESP Code muss um einen Lookup in der Config Tabelle machen zu koennen seine eigene MAC Adresse abfragen. Das kann man sicherlich auch per automatisiertem Login in die Fritz und per HTML Parsing bekommt man dann auch die Mac heraus. Aber das ist so als kratzt man sich umstaendlich mit der rechten Hand am linken Ohr :lol:. Es gibt im ESP-IPF dazu einen Call der die interne eFuse in der die Mac steht abfragt und einfach zu benutzen ist. Da meine C Kenntnisse schon ziemlich angestaubt sind hat es einfach etwas gedauert bis ich das richtig hinbekommen habe aus dem 6 Byte Array eine 64 Bit UUID zu erzeugen. Aber letzendlich kratze ich mich damit jetzt effizient mit der rechten Hand am rechten Ohr ;)

    • Offizieller Beitrag

    framp Hast Du den Beitrag #12 von El_Zetto gesehen? ESPEasy kannte ich bis vorhin auch noch nicht, aber einfacher geht es imho kaum. Wenn man jetzt noch genau so leicht die Daten per MQTT oder sonstwie (in den paar Minuten habe ich nicht gesehe/verstanden wie das funktionieren könnte :blush:) abfragen kann, dann wäre das doch perfekt. :conf:

  • Gibts aber nicht für den ESP32.

    Doch, gibt es. https://github.com/letscontrolit/…_esp32_envs.ini

    Code
    ;;; ESP32 test build ********************************************************************;
    ; Status of the ESP32 support is still considered "beta"                                 ;
    ; Most plugins work just fine on ESP32.                                                  ;
    ; Especially some plugins using serial may not run very well  (GPS does run fine).       ;
    ; ***************************************************************************************;
  • Wenn man jetzt noch genau so leicht die Daten per MQTT oder sonstwie (in den paar Minuten habe ich nicht gesehe/verstanden wie das funktionieren könnte :blush:) abfragen kann, dann wäre das doch perfekt. :conf:

    Man kann bis zu 3 Controller konfigurieren und jedem einzelnen Sensor sagen, dass er den Wert alle x Sekunden an den Controller senden soll. Abfragen kann man die Werte einfach mit einem http request mittels <espeasy.ip>/json

    Ich habe mal angefangen einen python wrapper für ein paar grundlegende Kommandos zu schreiben um die json antwort nicht jedes mal händisch parsen zu müssen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!