Lire la table des partitions des ESP32 déjà déployés avant d'activer l'OTA
Traduit de English par IA ·
Nous avons 31 cartes ESP32-WROOM-32 installées dans des remorques frigorifiques, qui envoient des températures à Hermetry via MQTT. Le firmware est le nôtre, compilé avec Arduino core 2.x. Nous aimerions commencer à utiliser les mises à jour firmware d’Hermetry au lieu de nous déplacer au dépôt avec un ordinateur portable.Problème : les 12 premières cartes ont été flashées par un prestataire, et personne n’a noté quel schéma de partitionnement il a choisi. Notre build actuel fait environ 1,4 Mo. Si certaines cartes ont été flashées avec une seule grande partition d’application, l’OTA n’a nulle part où écrire, et je préfère le savoir avant d’affecter quoi que ce soit et de voir la moitié de la flotte passer en Failed.Existe-t-il un moyen de lire la table des partitions d’une carte en fonctionnement sans la reflasher ? Idéalement à distance, car les remorques sont réparties sur trois dépôts.
We have 31 ESP32-WROOM-32 boards in refrigerated trailers reporting temperatures to Hermetry over MQTT. Firmware is ours, built with Arduino core 2.x. We’d like to start using Hermetry’s firmware updates instead of driving to the depot with a laptop.
Problem: the first 12 boards were flashed by a contractor and nobody wrote down which partition scheme he picked. Our current build is about 1.4 MB. If some boards were flashed with a single big app partition, OTA has nowhere to write to and I’d rather know that before I assign anything and watch half the fleet go to Failed.
Is there a way to read the partition table of a running board without reflashing it? Ideally remotely, since the trailers are spread over three depots.
Traduit de English par IA ·
esptool read_flash à 0x8000 ?
esptool read_flash at 0x8000?
Traduit de English par IA ·
Cela nécessite toutefois un port USB. Les trailers sont absents pendant la majeure partie de la semaine.
That needs USB though. The trailers are out most of the week.
Traduit de English par IA ·
Ce n’est pas ta question, mais puisque tu y es : enregistre une clé de signature et laisse « Autoriser les images non signées » désactivé sur ce profil. Le mode non signé est réservé aux appareils de test, et les remorques sur la route ne sont pas des appareils de test.
Not your question, but while you’re at it: register a signing key and keep « Allow unsigned images » off on that profile. Unsigned is meant for test devices only, and trailers on the road aren’t test devices.
Traduit de English par IA ·
Nous avons eu exactement ce cas avec des cartes compteurs installées par un prestataire. Vous pouvez interroger le firmware en cours : l’API de partitions d’ESP-IDF fonctionne très bien depuis le core Arduino. Envoyez un build aux cartes que vous pouvez atteindre (celles de votre propre lot), ou attendez que les autres soient au dépôt ; il remontera la table en attributs client une fois, après la connexion :
#include "esp_partition.h"
void reportPartitions() {
String json = "{";
esp_partition_iterator_t it =
esp_partition_find(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, NULL);
bool first = true;
while (it != NULL) {
const esp_partition_t *p = esp_partition_get(it);
if (!first) json += ",";
json += ""part." + String(p->label) + "":"" +
String(p->address, HEX) + "/" + String(p->size) + """;
first = false;
it = esp_partition_next(it);
}
esp_partition_iterator_release(it);
json += "}";
mqtt.publish("v1/attributes", json.c_str());
}
Ensuite, dans l’onglet Attributes, scope Client, vous verrez part.app0, part.app1, part.otadata etc. pour chaque carte. Ce qu’il faut voir : deux slots applicatifs (ota_0 et ota_1, appelés app0/app1 dans les tables Arduino) plus otadata, chacun au moins aussi grand que votre image. Si vous ne voyez qu’un seul app0 de 3 Mo et pas d’app1, c’est le schéma « Huge APP », pas d’OTA possible.Pour les cartes sur lesquelles vous ne pouvez pas envoyer un nouveau build, la méthode d’emily fonctionne au dépôt :
esptool.py --port /dev/ttyUSB0 read_flash 0x8000 0xc00 pt.bin
python gen_esp32part.py pt.bin
Les cartes avec le mauvais schéma nécessitent un reflash USB unique avec une table à deux slots. Ensuite, l’OTA fonctionnera durablement.
Had this exact situation with meter boards a contractor did. You can ask the running firmware: the partition API in ESP-IDF works fine from the Arduino core. Push one build to the boards you can reach (the ones from your own batch), or wait until the others are at the depot, that reports the table as client attributes once after connecting:
#include "esp_partition.h"
void reportPartitions() {
String json = "{";
esp_partition_iterator_t it =
esp_partition_find(ESP_PARTITION_TYPE_ANY, ESP_PARTITION_SUBTYPE_ANY, NULL);
bool first = true;
while (it != NULL) {
const esp_partition_t *p = esp_partition_get(it);
if (!first) json += ",";
json += ""part." + String(p->label) + "":"" +
String(p->address, HEX) + "/" + String(p->size) + """;
first = false;
it = esp_partition_next(it);
}
esp_partition_iterator_release(it);
json += "}";
mqtt.publish("v1/attributes", json.c_str());
}
Then the Attributes tab, Client scope, shows part.app0, part.app1, part.otadata and so on per board. What you want to see is two app slots (ota_0 and ota_1, called app0/app1 in the Arduino tables) plus otadata, each at least as big as your image. If you see one app0 of 3 MB and no app1, that’s the « Huge APP » scheme, no OTA possible.
For the boards you can’t get a new build on, emily’s way works at the depot:
esptool.py --port /dev/ttyUSB0 read_flash 0x8000 0xc00 pt.bin
python gen_esp32part.py pt.bin
Boards with the wrong scheme need one USB reflash with a two-slot table. After that OTA works for good.
Traduit de English par IA ·
C’est fait. 9 des 12 appareils du sous-traitant sont revenus avec une seule app0 de 3 Mo, donc pas d’OTA sur ceux-là sans intervention sur site. Les 3 autres et tous les nôtres ont app0/app1 à 1,25 Mo chacune, ce qui est juste pour notre build de 1,4 Mo. Je passe donc notre table à la version minimale avec SPIFFS et des slots de 1,9 Mo avant d’aller plus loin. Heureusement qu’on a vérifié d’abord.
Done. 9 of the contractor’s 12 came back with a single 3 MB app0, so no OTA on those without a visit. The other 3 and all of ours have app0/app1 at 1.25 MB each, which is tight against our 1.4 MB build, so I’m switching our table to the minimal SPIFFS one with 1.9 MB slots before we go further. Good thing we checked first.
Traduit de English par IA ·
En tant que personne qui valide les visites de dépôt : merci de vérifier ceci avant que le prochain lot ne soit flashé.
As the one who signs off on the depot visits: please check this before the next batch gets flashed.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

