Sauvegarde d'un sketch chargé dans un arduino

Bonjour

J'ai une application qui fonctionne très bien mais dont j'ai perdu le fichier arduino
Y a-t-il un moyen de relire et sauvegarder ce fichier pour le modifier ensuite?

non... vous pouvez extraire le fichier binaire compilé mais impossible de revenir au sketch arduino

Pffff ... a recréer complètement donc

oui... la compilation transforme le code C++ en langage machine et l'optimiseur ré-agence le code pour que ce soit .. optimisé. Les fonctions non utilisées des bibliothèques ne sont plus dans le code. Il est quasiment impossible donc de revenir au code d'origine avec les include des bibliothèques que vous aviez et bien sûr les noms de variables, les commentaires etc, tout cela a disparu.

vous n'avez pas un timeMachine ou le back up iCloud sur votre Mac ?

si le programme ne date pas d'il y a trop longtemps, il y a peut être une copie dans le dossier de compilation Arduino

Le problème est que j'ai conservé plusieurs étapes du sketch et je ne sais plus lequel est téléchargé et fonctionne très bien
Il me reste plus qu'à les essayer une par une sur une autre carte arduino afin de ne pas massacrer la carte qui fonctionne

ah OK... bon tout n'est pas perdu alors :slight_smile:

quand on fait plusieurs versions c'est bien d'avoir au début du code un truc qui imprime cette version

par exemple

#define version F("Gestion Anniv - version 1.05")
...

void setup() {
  Serial.begin(115200);
  Serial.println(version);
  ...
}

ll faut bien sûr penser à la modifier dans chaque fichier

bonne idée

je voudrais reprendre ma version d'horloge pilotée par wifi et lui integrer le calendrier anniversaire dont on vient de débattre

tu peux essayer d'extraire le binaire, pour connaitre sa taille.
de l'autre coté tu compile les différentes version des sources que tu as.
Il y a de forte probabilité que le fichier source le plus proche de ton binaire, soit celui qui génère la taille la plus proche.

Comme tu commences à avoir pas mal de programme différent, avec pas mal d'itération différentes, tu pourrais voir pour avoir un système d'archivage.
EDIT: Sinon, la bonne veille variable contenant un numéro de version qui s'impprime sur le moniteur série au lancement de ton programme est aussi terriblement efficace.

Tu as quand même un système de sauvegarde au cas ou tu crache ton disque?

Oui bien sûr .. Time machine
"extraire le binaire" ... comment on fait?

Sur l'environnement Arduino, je ne sais pas si il y a un truc intégré.

Moi j'utilise ESP8266Flasher.exe, je ne sais pas si il y a une version pour Mac. visiblement, ils l'ont compilé uniquement sur Windows, mais
Je ne sais plus si ca utilise esptool.py ou pas.

si vous l'affichez il suffit d'ouvrir la console série :slight_smile:

sinon il faut jouer de l'avrdude pour aller extraire le binaire puis utiliser un outil qui vous montre ce binaire sous forme d'octets et ASCII et on verra alors le texte

par exemple si vous compilez

#define version F("Gestion Anniv - version 1.05")

void setup() {
  Serial.begin(115200);
  Serial.println(version);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(100);
  digitalWrite(LED_BUILTIN, LOW);
  delay(100);
}

le .bin qui sera transféré sur l'arduino commence par cela et on voit le texte

Avrdude peut lire des esp8266 ?

oops - je n'avais pas vu que c'était un ESP

il faut dans ce cas utiliser esptool.py avec l'option read_flash

quelque part dans le segment data vous trouvez le texte

J'ai trouvé cette commande sur internet ... pour un ESP-M3 vous l'écririez comment?

avrdude -c arduino -P COM1 -b 115200 -p atmega328p -D -U flash:w:objs/blink.hex:i

Avrdude est un logiciel développer par les fabricants des µC ATmel pour leur propre µC.

Tu as python d'installer sur ta machine, je ne sais plus si c'est installé d'office sur Mac ?

c'est esptool.py qu'il faut utiliser pour un ESP

c'est un script python, il se trouve dans ~/Library/Arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/esptool sur votre Mac

si votre ESP est sur le port série /dev/cu.usbserial-0001

vous faites un truc du genre

~/Library/Arduino15/packages/esp8266/hardware/esp8266/3.1.2/tools/esptool/esptool.py -p /dev/cu.usbserial-0001 -b 460800 read_flash 0 0x200000 content.bin

460800 c'est le baud rate, c'est peut être élevé
0x200000 c'est la partie à lire, c'est là que normalement le programme est rangé je pense
content.bin c'est le fichier résultat

faudrait regarder en détail ce qui est mis lors d'un upload pour avoir les bons paramètres


oui (et l'IDE en a besoin)

Bon je me lance dans le test de mes sketch sur une autre carte
Mais dès le 1er essai , j'ai cette erreur de compilation

J'ai bien trouvé ce fichier dans "document" "arduino" "librairies"
Mais alors où devrait se trouver physiquement cette librairie?

capture 2023-10-03 à 12.44.53

c'est sans doute la bibliothèque GFX de Adafruit

EDIT: oui ➜ https://github.com/adafruit/Adafruit-GFX-Library/tree/master/Fonts

Compris ... je n'avais pas vu que ce font ne se trouvait pas (plus) dans la libraire Fonts
Fonts/FreeSans6pt7b.h ... j'ai du FreeSans9pt7B.h mais pas celui-là

je ne sais plus comment j'ai fait pour créer ce font?

C’est expliqué dans la doc