142a621066
MicroPython fuehrt main.py nach jedem Reset selbst aus -- nach Stromausfall oder Watchdog-Neustart laeuft die Anzeige damit ohne Notebook wieder an. Bisher gab es die Datei bewusst nicht, weil am Aufbau gearbeitet wurde. **Das Abbruchfenster ist kein Komfort, sondern die Notbremse.** Ohne es waere ein Geraet, dessen Programm beim Start haengt, nur noch durch Neuflashen erreichbar: Die Endlosschleife belegt die REPL sofort nach dem Reset. main.py wartet deshalb erst AUTOSTART_DELAY (3 s), in denen Ctrl-C zurueck an die REPL fuehrt -- dann laeuft auch kein Watchdog. Watchdog (WDT_TIMEOUT = 120 s): startet das Geraet neu, wenn die Poll-Schleife stehenbleibt. Gefuettert wird zu Beginn *jedes* Durchlaufs, auch nach einem Fehler -- "KEIN LINK" ist kein Stillstand, die Schleife laeuft ja weiter. Der Wert muss ueber allem liegen, was regulaer blockieren darf (WLAN 20 s, Montierung 3 s, dazu ein MQTT-Versuch); knapper waere er eine Neustart-Schleife. Ein gestarteter Watchdog laesst sich nicht mehr abschalten. Deshalb legt ihn nur main.py an -- im Handbetrieb ueber die REPL startete das Geraet sonst neu, waehrend man nachdenkt. Weiteres: - Nach einem Watchdog-Neustart meldet main.py das beim Start (machine.reset_cause()), sonst saehe er aus wie ein Stromausfall. - Eine Ausnahme faengt main.py ab und startet nach RESTART_DELAY (10 s) neu, statt in die REPL zu fallen und die Anzeige einzufrieren. Die Pause verhindert eine Neustart-Schleife im Sekundentakt. - Autostart faehrt mit Helligkeitsregelung (with_ldr=True, Nutzerentscheidung). Am Geraet bestaetigt: Autostart nach Reset laeuft durch (Watchdog aktiv, WLAN, MQTT), ein absichtlich herbeigefuehrter Stillstand loest den Watchdog aus und das Geraet kommt von allein wieder hoch -- mit der Meldung "Vorheriger Lauf wurde vom Watchdog beendet". Ctrl-C im Startfenster gibt die REPL frei. Beim Geraetetest aufgefallen: make_watchdog wurde ohne log aufgerufen, im Startprotokoll stand also nichts vom Watchdog. Behoben und durch einen Test festgehalten. 178 Tests gruen (neu: test_main.py). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
79 lines
2.2 KiB
Bash
Executable File
79 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# Die Projektdateien auf den XIAO ESP32-C3 kopieren.
|
|
#
|
|
# ./deploy.sh # alle Dateien kopieren
|
|
# ./deploy.sh /dev/cu.usbmodem1101 # anderen Port erzwingen
|
|
#
|
|
# Braucht mpremote: pip install mpremote
|
|
# Danach am REPL (mpremote repl, mit Ctrl-] wieder raus):
|
|
#
|
|
# import run_esp32
|
|
# run_esp32.main()
|
|
|
|
set -e
|
|
|
|
PORT="${1:-auto}"
|
|
|
|
# Alles, was auf dem Geraet gebraucht wird. run_display.py, show_coords.py,
|
|
# mount_mock.py und die Tests bleiben auf dem Mac -- sie brauchen argparse
|
|
# bzw. threading.
|
|
#
|
|
# probe.py kommt mit aufs Geraet: Seit die Anzeige am ESP32 haengt und nicht mehr
|
|
# am Mac, laesst sich die Geometrie nur noch von dort ausmessen. Es benutzt zwar
|
|
# sys.argv, aber nur in main() -- die Messfunktionen ruft man am REPL direkt auf:
|
|
# import probe, display
|
|
# d = display.open_display(); probe.pitch(d, 6); d.close()
|
|
#
|
|
# settings.json steht bewusst NICHT in dieser Liste: Das ist Laufzeitzustand auf
|
|
# dem Geraet (Helligkeiten, Schwelle -- spaeter per MQTT verstellt). Wuerde
|
|
# deploy.sh sie mitkopieren, waeren diese Einstellungen nach jedem Deployen weg.
|
|
# Fehlt die Datei, gelten die Vorgaben aus settings.DEFAULTS.
|
|
#
|
|
# main.py startet die Anzeige nach jedem Reset von selbst. Wer am Geraet
|
|
# arbeiten will, drueckt im Startfenster Ctrl-C (siehe main.py) -- oder loescht
|
|
# sie mit: mpremote rm :main.py
|
|
FILES="
|
|
ticks.py
|
|
migra.py
|
|
config.py
|
|
settings.py
|
|
transport.py
|
|
display.py
|
|
coords.py
|
|
lx200.py
|
|
mount_client.py
|
|
brightness.py
|
|
displayloop.py
|
|
wifi.py
|
|
mqtt.py
|
|
run_esp32.py
|
|
probe.py
|
|
main.py
|
|
"
|
|
|
|
if [ ! -f wifi_config.py ]; then
|
|
echo "wifi_config.py fehlt." >&2
|
|
echo " cp wifi_config_example.py wifi_config.py und ausfuellen" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# mqtt_config.py ist optional: Fehlt sie, laeuft die Anzeige ohne MQTT weiter.
|
|
EXTRA="wifi_config.py"
|
|
if [ -f mqtt_config.py ]; then
|
|
EXTRA="$EXTRA mqtt_config.py"
|
|
else
|
|
echo "Hinweis: mqtt_config.py fehlt -- laeuft ohne MQTT."
|
|
echo " cp mqtt_config_example.py mqtt_config.py und ausfuellen"
|
|
fi
|
|
|
|
for f in $FILES $EXTRA; do
|
|
echo "-> $f"
|
|
mpremote connect "$PORT" fs cp "$f" ":$f"
|
|
done
|
|
|
|
echo
|
|
echo "Fertig. Starten mit:"
|
|
echo " mpremote connect $PORT repl"
|
|
echo " >>> import run_esp32"
|
|
echo " >>> run_esp32.main()"
|