ESP32 : Ce script injecte une version de firmware basée sur Git dans le firmware PlatformIO
Il s’agit d’un script Python que vous pouvez utiliser dans votre processus de build PlatformIO pour injecter une chaîne de version de firmware basée sur le tag Git actuel et le commit dans votre binaire de firmware ESP32. Cela est utile pour suivre quelle version du firmware s’exécute sur votre appareil.
Un exemple de version qu’il pourrait injecter est v1.0.0-123-gabc1234@2025-08-27T02:06:15.
inject_git_version.py
#!/usr/bin/env python3
import subprocess
from datetime import datetime
import argparse
import sys
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-e", "--environment", help="L'environnement de build à utiliser")
parser.add_argument("--chip", default="esp32", help="La puce à utiliser (pour esptool.py elf2image)")
parser.add_argument("--flash_freq", default="40m", help="La fréquence du flash (pour esptool.py elf2image)")
parser.add_argument("--flash_mode", default="dio", help="Le mode du flash (pour esptool.py elf2image)")
args = parser.parse_args()
# Déterminer la version Git et la date de build
version = subprocess.check_output("git describe --long --tags --dirty", shell=True).strip().decode("utf-8")
date = datetime.utcnow().isoformat()
# Joindre la version et la date
full_version_string = f"{version}@{date}".encode("utf-8")
firmware_version_template = b"================================================================================"
# Si aucun environnement n'est spécifié, afficher simplement la version et quitter
if not args.environment:
print(f"Version: {version}")
print("Aucun --environment spécifié, abandon...")
sys.exit(1)
with open(f".pio/build/{args.environment}/firmware.elf", "rb") as infile:
firmware_binary = infile.read()
# Les chaînes de remplacement doivent avoir exactement la bonne longueur !
version_replacement = full_version_string.ljust(len(firmware_version_template), b'\0')
# Remplacer !
firmware_binary = firmware_binary.replace(firmware_version_template, version_replacement, 1)
# Réécrire dans le fichier
with open(f".pio/build/{args.environment}/firmware-versioned.elf", "wb") as outfile:
outfile.write(firmware_binary)
# Écrire la version dans le fichier
with open(f".pio/build/{args.environment}/version.txt", "w", encoding="utf-8") as outfile:
outfile.write(version)
# Convertir en ELF
subprocess.check_output(f"esptool.py --chip {args.chip} elf2image --flash_freq {args.flash_freq} --flash_mode {args.flash_mode} .pio/build/{args.environment}/firmware-versioned.elf", shell=True)If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow