Pico startet bei ext Versorgung nicht

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Nö, gar nicht erst in der boot.py rumpfuschen, ist zu 99% nicht nötig, auch nicht 1 Zeile.

    Dann zeige mir diese Datei "boot.py" auf einem frisch installierten µPython !
    Diese Datei gibt es weder in der Version für das PICO noch das PICO W, sondern muss erst angelegt werden.
    Ich weiss ja nicht auf welchen Wissensstand du dich berufst, nur bei den ESP Versionen ist diese Datei schon vorhanden !
    Vielleicht solltest du erst einmal den Grundstand eines frisch installierten Systems kennen, bevor du zum Wort greifst "rupfuschen".
    Man kann nicht in etwas herumpfuschen was real nicht vorhanden ist !

    Franky

  • Mein Wissensstand kommt aus den Specs der Foundation.


    Die boot.py hat höchste Priorität vor allem anderen und man soll Autostartprogramme besser in die main.py packen.

    Die boot.py heißt ja nicht umsonst boot.py.


    Natürlich kannst Du beide Dateien nutzen, wie Du willst, da spricht technisch auch nix dagegen.

    Aber wie geschrieben, die Empfehlung der Found. lautet eben: Autostart in die main.py.

    Hintergrund soll wohl der sein, dass ggf. bei technischen Änderungen oder Ergänzungen beim Booten kein "normaler" Code angefasst werden muss, sondern alles schön getrennt bleibt.

    ;) Gruß Outi :D
    Pis: 2x Pi B (Rente) / 1x Pi B+ (Rente) / 1x Pi 2 B (Tests) / 2x Pi 3 B (RaspberryMatic / Repetier Server) / 2x Pi Zero 1.2 (B. Lite) / 2x Pi Zero 1.3 (B. Lite) /
    2x Pi Zero W 1.1 (B. Lite) / 1x Pi Zero 2 (noch ohne) / 1x Pi 3 B+ (Tests) / 1x Pi 4 B 4GB (Bullseye 64 Bit Lite (Webserver)) / Pi 400 (Bullseye 64 Bit) / 2x Pi Pico / 2x Pi Pico W
    Platinen: Sense HAT / RPI-RF-MOD / PiFi DAC+ V2.0 / TV HAT
    Kameras: orig. Raspberry Pi Camera Module V1 & V3 / PS3 Eye

  • Moinsen,

    Aber wie geschrieben, die Empfehlung der Found. lautet eben: Autostart in die main.py.

    Dann solltest du des weiteren alle Dokumentation im vollen Umfang gelesen haben. Wenn du über die "boot.py" und die reine "import" Funktion ein __main__ enthaltendes udn damit eigenständig ausführbares Programm startest, dieses aber aus unerfindlichen Gründen, weil zB nicht durch eine Exception abgefangen zum Abbbruch / Unterbrechung kommt, kannst du dann immer noch einen alternativen Code ausführen welcher sich an diese "import" Zeile anschließt, um zB eine Kommunikation nach außen aufzubauen, eine GPIO Beschaltungsablauf durchführt, um zB externe Systeme "wiederzubeleben" oder auch das PICO in den Hard-Reset zu schicken.
    Jede Beendigung eines Programms welches über die "boot.py" aufgerufen wird, auch unkontrollierte unvorhersagbare Ereignisse für nicht zu einem Zustand "Stillstand" wie bei einen normalen Programmfehler, sondern es wird wenn weitere Anweisungen in dieser Datei folgen, und die CPU + Flash selber von diesem Ausfall betroffen sind, dann ausgeführt. Ein Fehler gleich auf welcher Ebene innerhalb der "main.py" die nicht durch eine Ausnahmebehandlung abgefangen werden, oder abgefangen werden können, würde das gesamte System zu Stillstand bringen, genauso wie wenn man ein fehlerhaftes Programm über die IDE direkt startet.
    Das heißt wiederum, wenn das über "import" gestartet Programm unvorhersehbar beendet wurde, hat man noch eine Möglichkeit innerhalb weiterer Anweisungen innerhalb genau dieser "boot.py" das System als Funktionseinheit wiederzubeleben, und sei es nur ein einfacher Reset.

    Franky

  • Moinsen

    Natürlich kannst Du beide Dateien nutzen, wie Du willst, da spricht technisch auch nix dagegen.

    Auch wenn viele nicht soweit denken, oder denken wollen, diese "boot.py" hat noch weitere Vorteile, besonders wenn es um SW-Wartung geht. Du kannst den eigentlichen Programmnamen mit einer Versionsnummer versehen, und so während der Laufzeit eine neue Version einspielen, und diese durch die Änderung / Eintrag in der "boot.py" als angepassten oder ergänzten Eintrag aufrufen. Hast du nur eine "main.py" und kommt es aus unerklärlichen Gründen dazu das die Nachfolgeversion doch nicht so "schnuckelig" funzt wie gedacht, kannst du jederzeit auf die alte Version zurückgreifen. Bei / über die Methode mit "main.py" hättest du die ursprüngliche Version überschrieben, und müsstest in einem solchen Falle die "alte Version "neu einspielen, falls du diese Version noch als Backup vorrätig hast.


    Ich weiss du würdest über den import von "os" eine aufwendiges Umbenennungsaktion starten, um dann irgendwelche Programme in "main.py" umzubenennen, um dann diese flexible Rückwärtsrolle auf die Reihe zu bekommen.

    Diese Variante wird auch so ausdrücklich beschrieben, das dieser Funktionsablauf möglich ist, und nutzbar ist. Damit ist es ein entscheidender Unterschied zwischen einer einfachen Empfehlung, und dem ausreizen der Möglichkeiten. Besonders wenn ein System als "Hochverfügbar" angesehen werden soll, und die wenigsten Programm, besonders von Einsteigern zu 100 % Fehlerfrei sein wird, und man auch nicht alle Dinge besonders um den SPI-BUS mittels einer "Exception" abgefangen werden kann, sollte man sich eine Option offen halten, wenn solche Fehler auch nicht mittels Watchdog abzufangen sind, wie man das System autonom, und ohne administrativen Eingriff wieder zum Leben bekommt, bzw. eine Kanal schafft, den entfernten Admin über einen Ausfall zu informieren.
    Im Prinzip habe ich mich auch nicht wie in #2 zu lesen

    Quote

    Nur bei µPython müsste man ein MAIN.py oder eine BOOT.py anlegen, damit das gewünschte Python Programm von alleine startet.

    darauf bestanden das "boot.py" die einzig zulässige Lösung ist. Auch hier wird schon die "main.py" mit aufgeführt.
    Aber auch wenn du "main.py" verwendest und ein Fehler, welcher zu einem Programmabbruch führen würde, nicht zu 100% ausschließen kannst, brauchst du auf der übergeordneten Ebene "booty.py" einen Watchdog, welcher das System im Fehlerfall nach einer bestimmten resetet.
    Oder du hängst wieder mit einem stillstehenden System fest.
    Für welche Methode man sich hier nun entscheidet, bleibt jedem selber überlassen. Dennoch sollte man egal welche Meinung man vertritt, oder welcher Empfehlung man folgt auch ehrlicher Weise dazu sagen, dass man im Fehlerfall der reinen "main.py" Nutzung keinen Ausweg hat, ohne auf diese "boot.py" zurückzugreifen, das System in einem solchen Fall automatisiert zu Rebooten.

    Deswegen verstehe ich auch deinen Diskussionsansatz nicht, weil das Thema hier ein ganz anderes ist. Es geht um die Umschaltung zwischen Stromversorgung über USB und extern eingespeister Spannungsversorgung.

    Franky

  • Zuerst wird die boot.py ausgeführt und wenn die fertig ist, dann erst main.py.

    Wenn z.B. in boot.py ein Syntaxfehler vorkommt, wird die main.py dennoch ausgeführt.

    Die main.py wird auch ausgeführt, wenn die boot.py nicht vorhanden ist.


    Ich nutze beide Dateien, aber in die boot.py kommt ausschließlich Code für die WLAN-Verbindung.

    Die Abfrage if __name__ == "__main__" braucht man nicht. Die boot.py soll durch kein anderes Modul geladen werden.