added flashscript
This commit is contained in:
parent
cbcdc34e6c
commit
e4770f2fa2
97
Software/codegen/README_flash_esp8266.md
Normal file
97
Software/codegen/README_flash_esp8266.md
Normal file
@ -0,0 +1,97 @@
|
||||
|
||||
# Flash ESP8266 Script
|
||||
|
||||
## Version: 1.0.0
|
||||
|
||||
### Author: Marcel Peterkau
|
||||
### Copyright: 2024
|
||||
### License: MIT
|
||||
|
||||
---
|
||||
|
||||
## Beschreibung
|
||||
|
||||
Dieses Skript entpackt ein ZIP-Archiv, das Firmware- und Dateisystem-Dateien für einen ESP8266 enthält, und flasht diese auf das Gerät. Nach dem Flashen werden die entpackten Dateien automatisch gelöscht.
|
||||
|
||||
---
|
||||
|
||||
## Benutzung
|
||||
|
||||
```sh
|
||||
python flash_esp8266.py <zip_file> [-v]
|
||||
```
|
||||
|
||||
### Parameter
|
||||
|
||||
- `<zip_file>`: Der Name der ZIP-Datei, die die Firmware- und Dateisystem-Dateien enthält.
|
||||
- `-v`: Aktiviert Debug-Ausgaben (optional).
|
||||
|
||||
### Beispiel
|
||||
|
||||
```sh
|
||||
python flash_esp8266.py firmware_1.07_cbcdc34.zip -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Python 3.x
|
||||
- Die folgenden Python-Bibliotheken müssen installiert sein:
|
||||
- esptool
|
||||
- pyserial
|
||||
|
||||
Installiere die benötigten Bibliotheken mit:
|
||||
|
||||
```sh
|
||||
pip install esptool pyserial
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Funktionen
|
||||
|
||||
- **get_com_ports**: Ermittelt die verfügbaren COM-Ports.
|
||||
- **find_new_com_port**: Findet den neuen COM-Port, wenn der ESP8266 angeschlossen wird.
|
||||
- **extract_files**: Entpackt die ZIP-Datei und gibt die enthaltenen Dateien zurück.
|
||||
- **decompress_gz**: Entpackt eine GZ-Datei.
|
||||
- **clean_up**: Löscht die angegebenen Dateien nach dem Flashen.
|
||||
|
||||
---
|
||||
|
||||
## Ablauf
|
||||
|
||||
1. Das Skript überprüft, ob die angegebene ZIP-Datei existiert.
|
||||
2. Die ZIP-Datei wird entpackt und die Firmware- und Dateisystem-Dateien werden identifiziert.
|
||||
3. Die Dateisystem-Datei (GZ) wird entpackt.
|
||||
4. Der Benutzer wird aufgefordert, den ESP8266 abzustecken und erneut anzustecken, um den neuen COM-Port zu ermitteln.
|
||||
5. Die Firmware- und Dateisystem-Dateien werden auf den ESP8266 geflasht.
|
||||
6. Die temporären Dateien werden nach dem erfolgreichen Flashen gelöscht.
|
||||
|
||||
---
|
||||
|
||||
## Fehlerbehebung
|
||||
|
||||
- **ZIP-Datei nicht gefunden**: Stelle sicher, dass der Pfad zur ZIP-Datei korrekt angegeben ist.
|
||||
- **Erforderliche Dateien nicht im ZIP-Archiv**: Überprüfe, ob die ZIP-Datei die richtigen Dateien (`.fw.bin` und `.fs.gz`) enthält.
|
||||
- **Kein neuer COM-Port gefunden**: Stelle sicher, dass der ESP8266 korrekt angeschlossen ist und warte, bis der neue COM-Port erkannt wird.
|
||||
|
||||
---
|
||||
|
||||
## Lizenz
|
||||
|
||||
Dieses Projekt ist unter der MIT-Lizenz lizenziert
|
||||
|
||||
---
|
||||
|
||||
## Versionshistorie
|
||||
|
||||
- **1.0.0** - Initiale Version
|
||||
|
||||
---
|
||||
|
||||
## Haftungsausschluss
|
||||
|
||||
Dieses Skript wird ohne Garantie bereitgestellt. Der Autor übernimmt keine Verantwortung für Schäden oder Datenverlust, die durch die Nutzung dieses Skripts entstehen könnten.
|
||||
|
||||
---
|
156
Software/codegen/flash_esp8266.py
Normal file
156
Software/codegen/flash_esp8266.py
Normal file
@ -0,0 +1,156 @@
|
||||
"""
|
||||
flash_esp8266.py
|
||||
|
||||
Version: 1.0.0
|
||||
Author: Marcel Peterkau
|
||||
Copyright: 2024
|
||||
License: MIT
|
||||
|
||||
Beschreibung:
|
||||
Dieses Skript entpackt ein ZIP-Archiv mit Firmware- und Dateisystem-Dateien und flasht diese auf einen ESP8266.
|
||||
Die entpackten Dateien werden nach dem Flashen gelöscht.
|
||||
|
||||
Versionshistorie:
|
||||
1.0.0 - Initiale Version
|
||||
|
||||
Benutzung:
|
||||
python flash_esp8266.py <zip_file> [-v]
|
||||
|
||||
Optionen:
|
||||
-v Aktiviert Debug-Ausgaben
|
||||
"""
|
||||
|
||||
import esptool
|
||||
import sys
|
||||
import serial.tools.list_ports
|
||||
import zipfile
|
||||
import os
|
||||
import gzip
|
||||
import shutil
|
||||
|
||||
BAUD_RATE = 921600 # Erhöhte Baudrate
|
||||
DEBUG = '-v' in sys.argv
|
||||
|
||||
def debug_print(message):
|
||||
if DEBUG:
|
||||
print(message)
|
||||
|
||||
def get_com_ports():
|
||||
ports = [comport.device for comport in serial.tools.list_ports.comports()]
|
||||
debug_print(f"Verfügbare COM-Ports: {ports}")
|
||||
return ports
|
||||
|
||||
def find_new_com_port(old_ports, timeout=15):
|
||||
debug_print("Suche nach neuen COM-Ports...")
|
||||
import time
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < timeout:
|
||||
new_ports = get_com_ports()
|
||||
added_ports = list(set(new_ports) - set(old_ports))
|
||||
if added_ports:
|
||||
new_port = added_ports[0]
|
||||
print(f"Neuer COM-Port gefunden: {new_port}")
|
||||
return new_port
|
||||
time.sleep(1)
|
||||
return None
|
||||
|
||||
def extract_files(zip_file):
|
||||
with zipfile.ZipFile(zip_file, 'r') as zip_ref:
|
||||
zip_ref.extractall()
|
||||
debug_print(f"Entpackt: {zip_ref.namelist()}")
|
||||
return zip_ref.namelist()
|
||||
|
||||
def decompress_gz(file_path):
|
||||
output_file = file_path.replace('.gz', '')
|
||||
with gzip.open(file_path, 'rb') as f_in:
|
||||
with open(output_file, 'wb') as f_out:
|
||||
shutil.copyfileobj(f_in, f_out)
|
||||
debug_print(f"Entpackt {file_path} zu {output_file}")
|
||||
return output_file
|
||||
|
||||
def clean_up(files):
|
||||
for file in files:
|
||||
if os.path.isfile(file):
|
||||
os.remove(file)
|
||||
debug_print(f"Gelöscht: {file}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
print("Verwendung: python flash_esp8266.py <zip_file> [-v]")
|
||||
sys.exit(1)
|
||||
|
||||
ZIP_FILE = sys.argv[1]
|
||||
|
||||
# Überprüfe, ob das ZIP-Archiv existiert
|
||||
if not os.path.isfile(ZIP_FILE):
|
||||
print(f"ZIP-Archiv {ZIP_FILE} nicht gefunden.")
|
||||
sys.exit(1)
|
||||
|
||||
# Entpacke das ZIP-Archiv
|
||||
extracted_files = extract_files(ZIP_FILE)
|
||||
|
||||
# Finde die .fw.bin- und .fs.gz-Dateien
|
||||
bin_file = None
|
||||
fs_file = None
|
||||
|
||||
for file in extracted_files:
|
||||
if file.endswith('.fw.bin'):
|
||||
bin_file = file
|
||||
elif file.endswith('.fs.gz'):
|
||||
fs_file = file
|
||||
|
||||
if not bin_file or not fs_file:
|
||||
print(f"Die erforderlichen Dateien (.fw.bin und .fs.gz) wurden nicht im ZIP-Archiv {ZIP_FILE} gefunden.")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"Gefundene Firmware-Datei: {bin_file}")
|
||||
print(f"Gefundene Dateisystem-Datei: {fs_file}")
|
||||
|
||||
# Entpacke die .fs.gz-Datei
|
||||
decompressed_fs_file = decompress_gz(fs_file)
|
||||
|
||||
print("Bitte stecke den ESP8266 ab, falls er angeschlossen ist, und drücke Enter.")
|
||||
input()
|
||||
|
||||
print("Suche nach verfügbaren COM-Ports...")
|
||||
old_ports = get_com_ports()
|
||||
|
||||
print("Bitte stecke den ESP8266 jetzt an und warte, bis der neue COM-Port erkannt wird...")
|
||||
|
||||
port = find_new_com_port(old_ports, timeout=15)
|
||||
|
||||
if port is None:
|
||||
print("Kein neuer COM-Port gefunden. Bitte versuche es erneut.")
|
||||
sys.exit(1)
|
||||
|
||||
print(f"Neuer COM-Port gefunden: {port}")
|
||||
|
||||
# Benutze esptool zum Flashen der Firmware und des Dateisystems
|
||||
try:
|
||||
# Flashen der Firmware
|
||||
esptool_args_bin = [
|
||||
'--port', port,
|
||||
'--baud', str(BAUD_RATE),
|
||||
'write_flash', '-fm', 'dout', '0x00000', bin_file
|
||||
]
|
||||
esptool.main(esptool_args_bin)
|
||||
print("Firmware erfolgreich geflasht!")
|
||||
|
||||
# Flashen des Dateisystems
|
||||
esptool_args_fs = [
|
||||
'--port', port,
|
||||
'--baud', str(BAUD_RATE),
|
||||
'write_flash', '0x300000', decompressed_fs_file
|
||||
]
|
||||
esptool.main(esptool_args_fs)
|
||||
print("Dateisystem erfolgreich geflasht!")
|
||||
|
||||
# Bereinigen der entpackten Dateien
|
||||
clean_up(extracted_files)
|
||||
clean_up([decompressed_fs_file])
|
||||
|
||||
except Exception as e:
|
||||
print(f"Fehler beim Flashen: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
input("Drücke Enter, um das Fenster zu schließen...") # Hält das Fenster offen
|
Loading…
x
Reference in New Issue
Block a user