Hi,
I use vsc with platformio to program esp32.
In platformio.ini I define several env (about 10).
I ask chatgpt to write a ptyhon script to rename firmware.bin
But I have to run twice the build command : in the first pass, the script says firmware.bin doesn’t exist.
When I run the build command a second time, there is no pb.
I asked again chatgpt, which tell me to add à timer, but it doesn’t fix my pb.
So what do I miss ?
The script is in a line in env section
extra_scripts = post:rename_firmware.bin
Doesn’t post executed AFTER the compilation ?
Want do I have to change ?
Thank you for your help.
Here is my py script.
import shutil
import os
import time
from SCons.Script import DefaultEnvironment, ARGUMENTS
# Obtenir l'environnement de compilation PlatformIO
env = DefaultEnvironment()
# Récupérer le nom de l'environnement courant
env_name = env['PIOENV']
build_flags = ARGUMENTS.get("BUILD_FLAGS", "")
afficheur = "true" if "-D AFFICHEUR=true" in build_flags else "false"
# Pour SIMPLE, on va extraire la valeur numérique, qui est entre 1 et 6
simple_value = None
for flag in build_flags.split():
if flag.startswith("-D SIMPLE="):
simple_value = flag.split("=")[1]
# Si SIMPLE n'est pas défini, on met une valeur par défaut
simple = simple_value if simple_value is not None else "1"
# Récupérer le numéro de version à partir du fichier 'versioning'
version_file = 'versioning'
try:
with open(version_file, 'r') as vf:
version = vf.readline().strip() # Lire la version depuis le fichier
except FileNotFoundError:
version = "V0" # Valeur par défaut si le fichier n'existe pas
print(f"VERSION : {version}")
# Construire le nouveau nom de fichier avec le nom de l'environnement et la version
new_filename = "firmware.bin"
if env_name=="AFFICHEUR_PLUS_SIMPLE_IDEASPARK":
new_filename = f"firmware - IDEASPARK - V{version} - version simple.bin"
elif env_name=="AFFICHEUR_PLUS_2RELAIS_IDEASPARK":
new_filename = f"firmware - IDEASPARK - V{version} - version 2 relais.bin"
elif env_name=="AFFICHEUR_TACTILE_SIMPLE":
new_filename = f"firmware - TACTILE - V{version} - version simple.bin"
elif env_name=="AFFICHEUR_TACTILE_2RELAIS":
new_filename = f"firmware - TACTILE - V{version} - version 2 relais.bin"
elif env_name=="AFFICHEUR_SIMPLE_TTGO":
new_filename = f"firmware - TTGO - V{version} - version simple.bin"
elif env_name=="AFFICHEUR_2RELAIS_TTGO":
new_filename = f"firmware - TTGO - V{version} - version 2 relais.bin"
elif env_name=="AFFICHEUR_PLUS_SIMPLE_LILYGO":
new_filename = f"firmware - S3 - V{version} - version simple.bin"
elif env_name=="AFFICHEUR_PLUS_2RELAIS_LILYGO":
new_filename = f"firmware - S3 - V{version} - version 2 relais.bin"
elif env_name=="DELESTEUR_2CH_KIT":
new_filename = f"firmware - DELESTEUR - V{version} - version kit.bin"
elif env_name=="DELESTEUR_2CH_AUTONOME":
new_filename = f"firmware - DELESTEUR - V{version} - version autonome.bin"
elif env_name=="DELESTEUR_2CH_AUTONOME_VERSION_BATTERIE":
new_filename = f"firmware - DELESTEUR - V{version} - version autonome batterie.bin"
elif env_name=="DELESTEUR_6CH":
new_filename = f"firmware - DELESTEUR - V{version} - version 6CH.bin"
# Emplacement du fichier généré par PlatformIO (firmware.bin)
firmware_path = os.path.join(env.subst("$BUILD_DIR"), "firmware.bin")
# Emplacement avec le nouveau nom
new_firmware_path = os.path.join(env.subst("$BUILD_DIR"), new_filename)
# Attendre que le fichier firmware soit disponible avant de le renommer
timeout = 20 # Délai d'attente en secondes
start_time = time.time()
while not os.path.exists(firmware_path):
if time.time() - start_time > timeout:
print(f"Erreur : le fichier firmware.bin n'a pas été trouvé dans le délai imparti.")
exit(1)
time.sleep(0.5)
# Renommer le fichier firmware
shutil.move(firmware_path, new_firmware_path)
print(f"Firmware renamed to: {new_filename}")