Publié le 18 janvier 2020 - par

Raspbian : Python 3 par défaut et arrêt propre par bouton poussoir

Le créateur de Python Guido van Rossum a annoncé que le support de la version 2.7 de python prenait fin le 1er janvier 2020. Pour le moment Raspbian propose toujours la version 2.7 par défaut, je vous propose de passer à Python 3 par défaut. Pendant qu’on y est je vous re-explique comment arrêter proprement un Raspberry Pi headless avec un bouton poussoir.

Python 2 n’est plus … Vive Python 3 !

Guido van Rossum, le créateur et leader de Python, a annoncé que le support de la version 2.7 de python prenait fin le 1er janvier 2020. Après cette date Python 2.7 ne sera plus mis à jour, et ne recevra plus de correctifs de sécurité. Il y aura peut être des forks de Python 2.7 mais sans support de la fondation.

Quelle version sur Raspbian

Pour connaître la version par défaut de Raspbian il faut taper la commande

On voit que ce Raspbian (version de sept. 2019, fraichement installé et mise à jour est toujours en Python 2 par défaut. En attendant que la Fondation Raspberry Pi sorte un correctif, je vous propose de modifier la version par défaut.

Python 3 par défaut

Si c’est le cas, je vous propose de faire de python3 la version par défaut sur votre Raspbian. Merci à MK57BLOG 🙂

Python 3 est devenu la version par défaut

Revenir à Python 2

Vous pourrez toujours appeler python2 en ligne de commande et re-changer la version par défaut si vous le souhaitez avec

Arrêt « propre » de Raspbian

Une autre demande à laquelle j’ai répondu dernièrement consistait à permettre un arrêt « propre » de Raspbian en appuyant sur un bouton poussoir (BP).

C’est la méthode que j’utilise sur la masque de Vador car on a un Raspberry Pi headless (pas d’écran, de clavier ni de souris) et quand une expo ou une Maker Faire dur 3 jours ce serait bête d’arrêter le Raspberry Pi « à la sauvage » en débranchant l’alim… Il risquerait de ne pas redémarrer le lendemain !

Je vous propose ma méthode pour ce qu’elle vaut : Elle arrête  proprement l’OS. Elle est en script shell et le lancement du script en tâche de fond se fait dans /etc/rc.local. Alors oui, on peut faire mieux, du Python par exemple, c’est pas bien de lancer un script par rc.local etc. etc. mais bon, ça marche et ça me va bien…

Script d’arrêt système avec un BP

Ce schéma est valable pour tout Raspberry avec un connecteur GPIO de 40 broches.

Exemple de script d’arrêt pour le GPIO 21 (broche 40)  :  stop.sh
pour arrêter Raspbian il faut mettre la pin 40 à 3,3v (broche 1 par exemple) avec un bouton poussoir. Le BP est relié à la broche 1 (3,3v) et à la broche 40 : GPIO21. Quand on appuie sur le BP le GPIO21 passe à 1 et le script arrête l’OS.

Créer un script stop.sh

contenant les lignes suivantes
 

 
Il faut ensuite rendre le script stop.sh exécutable

et à la fin de /etc/rc.local ajouter  /home/pi/stop.sh &   (le & pour garder le script actif) avant le exit 0

 modifier comme ci-dessous

Au prochain démarrage du Raspberry Pi, le script sera exécuté et attendra patiemment que vous fassiez un appui sur le BP pour lancer l’arrêt du système.

Avec une alimentation 5v

Si pour une raison ou une autre vous devez utiliser une alimentation 5v pour déclencher l’arrêt, il faut impérativement prévoir un pont diviseur qui délivre du 3,3v.

Le GPIO en entrée serait détruit si vous appliquiez une tension de 5v !

Pour faciliter les calculs, MSG a créé un programme en Python pour faire tout ça automatiquement, en sélectionnant les résistances dans la série E normalisée. Merci 🙂

Sources

Image du titre : Tree vector created by upklyak – www.freepik.com

https://www.developpez.com/actu/276653/Python-Software-Foundation-annonce-qu-elle-mettra-fin-au-support-de-Python-2-a-partir-du-1er-janvier-2020-et-previent-qu-elle-n-apportera-plus-son-aide-pour-tout-probleme-rencontre-apres-cette-date/

Comment modifier la version par défaut de Python sur Debian

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

30 réflexions au sujet de « Raspbian : Python 3 par défaut et arrêt propre par bouton poussoir »

          1. dyox

            Je ne préfère pas car le tuto date de 2 ans et il y avait un comportement étrange hors des gpios mis par défaut. Et je ne sais pas si c’est toujours le cas.

            S’il y a une personne charitable qui a le temps de tester le comportement suivant les gpios mis, les options et sur différents raspberry, autant citer cette/ces personne(s).

            Cela fait un moment que j’y pense, et je ne sais pas si c’est possible, c’est de faire du travail collaboratif. Suivant ta liste de todo, tu délègues et tu contrôles le résultat final.
            Je pars du principe que ceux possédant un pi sont curieux, mais étant tous humain, on manque cruellement de temps, et pour certains de matos. Donc autant se répartir la tâche.

            Répondre
            1. François MOCQ Auteur de l’article

              C’est une bonne idée. Il y a déjà comme tu le sais des auteurs « invités » et c’est très bien. Je n’ai pas vraiment de ToDo list, je fais les articles en fonction de mes projets ou de demandes de lecteurs du blog ou des réseaux sociaux. Après si quelqu’un propose un article, je le publie avec plaisir 🙂

              Répondre
          1. sylvain

            Bonjour,

            Première contribution de ma part après avoir lu pendant des années votre site 🙂

            Après avoir suivi votre tuto, je suis resté sur ma faim (l’occupation cpu du script était trop importante sur mon raspberry).

            Du coup, j’ai pas mal cherché sur le net et dans votre forum . J’ai trouvé la bonne réponse pour mon use case (Merci dyox !)

            Je vous la partage:

            Besoin : allumer et éteindre proprement le raspberry à l’aide d’un interrupteur (c’était une limitation de mon projet)

            J’avais à ma disposition un interrupteur ‘double contact’ comme celui-ci:

            https://www.ebay.fr/itm/Interrupteur-Coulissant-Dpdt-On-Off-On-Electronique-Modeles-Chemin-de-Fer-/253960108220
            L’avantage étant que je dispose de 2 interrupteurs en 1 (les 2 interrupteurs n’ont pas de poles en commun)

            Du coup (pas de schéma, désolé):
            1ere partie de l’interrupteur câblé entre le gpio3 et la masse :
            Quand le raspberry est etient mais sous tension (suite à un shutdown), le fait de mettre le gpio3 au ground => démarrage du raspberry
            Avantage: aucune configuration à faire.
            inconvénient: perte de ce gpio pour d’autres utilisations

            2eme partie de l’interrupteur câble entre le +3.3v et un gpio ‘x’ :
            Quand le gpiox passe au potentiel de +3.3v, ça génère un shutdown.
            A ce moment là, on rejoint votre script. J’ai préféré utiliser la fonctionnalité dtoverlay (qui m’évite d’avoir un script qui tourne):
            dans /boot/config.txt:
            dtoverlay=gpio-shutdown,gpio_pin=x,parameter xxxx

            re-re merci dyox !

            Du coup, je me retrouve toujours avec l’état attendu:
            Interrupteur en position ‘run’ : Qu’il y ai une coupure electrique ou pas, le raspberry boot
            Interrupteur en position ‘stop’: Si il y a une coupure electrique, le raspberry boot puis shutdown aussitôt
            Bien sur, c’est pas parfait et ça mérite (comme toujours), des améliorations

            Sylvain
            arret pi4 par GPIO

            Répondre
            1. François MOCQ Auteur de l’article

              Bonjour Sylvain
              Merci pour ce retour
              j’avais mis une première version qui effectivement chargeait le CPU
              puis ajouté une pause de 0.5 seconde dans la boucle. Ici ça a réglé le problème…
              j’ai mis la modif dans le prog de l’article
              si vous voulez que j’ajoute une (des) images à votre commentaire, envoyez le moi sur contact@framboise314.fr
              cdt
              françois

              Répondre
  1. Ping : Raspbian : Python 3 par défaut et arrêt propre par bouton poussoir – Framboise 314, le Raspberry Pi à la sauce française…. – Jhc Info

  2. artemus24

    Salut à tous.
    Je n’utilise pas Python, donc mes questions peuvent sembler saugrenues.
    Pourquoi existe-t-il plusieurs versions de python dans la raspberry ?
    Ne serait-il pas plus judicieux de conserver que la dernière version ?

    Peux-tu nous donner la formule mathématique régissant le pont diviseur ?

    Merci !
    Cordialement.
    Artemus24.
    @+

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      Il n’y a pas de questions saugrenues…
      Quand le Pi a été créé on utilisait majoritairement Python2 aussi bien à l’université qu’en entreprise. La fin de Python 2 était annoncée pour 2015 et Python3 émergeait. Comme beaucoup de gens (entreprises) ont pris du retard pour la migration, il a été décidé de maintenir Python2 jusque fin 2019. Mais cette fois c’est bien fini. On peut toujours utiliser Python2 mais il n’y aura plus d’évolution ni de mise à jour de sécurité.
      D’où la présence des 2 versions sur le Pi pour assurer la compatibilité avec les 2 versions. Après, il est pour le moment impossible de supprimer une des versions et encore moins les 2 parce que Raspbian (Debian) utilise au sein de la distribution des scripts en Python (2 et 3). Le fait de supprimer une des versions de Python entraînerait un non-fonctionnement de Raspbian. Donc pour le moment il faut faire avec les 2 versions…
      Concernent le pont diviseur (et autres composants) j’ai commencé une série d’articles dans la rubrique Scratch du menu. Je m’y mets quand j’ai un peu de temps mais j’avoue que je ne suis pas très assidu. Il y a quand même déjà pas mal de choses dont.. le pont diviseur. Vous trouverez le principe, la formule et même un calculateur en ligne ici :
      https://www.framboise314.fr/scratch-raspberry-pi-composants/resistance/#Diviser_une_tension
      cordialement
      François

      Répondre
      1. artemus24

        Salut M. François Mocq.

        Merci pour le lien vers le pont diviseur.
        Existe-t-il d’autre montages, ponts, …, où nous utilisons des résistances, pouvant être appliqués à nos montages pour résoudre quelques problèmes ?

        En haut des commentaires, il y a deux liens, dont l’un désigne le sujet précédent, et l’autre le sujet suivant.
        Je ne sais pas trop si cela vient d’un mauvais usage que je fais, mais j’ai l’impression de ne pas avoir tous les sujets.
        N’y aurait-il pas un problème dans la gestion de ces liens ?

        Cordialement.
        Artemus24.
        @+

        Répondre
  3. koocotte

    Il y a un défaut de formatage, la commande « cd » se trouve dans un commentaire.

    Ensuite la boucle s’exécute continuellement sans aucune pause, cela consomme probablement 100% du cpu d’un coeur.

    Pour éviter cela, on peut insérer une petite pause dans la boucle, ça tombe bien la commande sleep permet d’utiliser les nombres flottants:

    le « while true » peut donc se transformer en « while sleep 0.5 », ce qui laisse un peu de temps au CPU pour souffler entre deux tests. En ajustant la durée de la pause on modifie la réactivité du script. Si on accepte de presser au moins 2 secondes le bouton pour lancer l’extinction, un sleep 1 convient tout à fait.

    Répondre
    1. j2c

      Quand j’ai lu le script hier, ça m’a sauté aux yeux.
      Je voulais suggérer un truc à base de nanosleep (mais pas dispo en commande shell).

      N’ayant pas trouvé.. je me suis abstenu de faire la remarque.

      Merci pour le tips.. je ne savais pas que sleep acceptait des floats

      Répondre
  4. Séb

    Bonjour, petit typo ligne 4 du script stop.sh.
    Remplacer :
    # Exécute un arrêt propre si on appuie sur le bouton cd /sys/class/gpio
    par :
    # Exécute un arrêt propre si on appuie sur le bouton
    cd /sys/class/gpio

    Cordialement

    Répondre
      1. msg

        Bonsoir,

        Le site Framboise est bien sécurisé , j’ai le cadenas vert .
        Quand je passe sur le Forum , j’ai le cadenas barré .
        Si je tente de me connecter , au moment de saisir mon identifiant , j’ai un pop-up qui apparait :
        « Cette connexion n’est pas sécurisée .
        Les identifiants saisis ici pourraient être compromis  »
        avec un lien suivant :
        https://support.mozilla.org/fr/kb/avertissement-mot-de-passe-non-securise-firefox?as=u&utm_source=inproduct

        Possible que cela vienne de ma version Firefox !

        Répondre
        1. msg

          J’ai trouver !
          C’est le lien « Forums » sous le bandeau qui pointe vers l’adresse HTTP .
          Si je met HTTPS:// devant , la page du Forum est bien sécurisée .

          Répondre
  5. DND

    Bonjour,

    Les pins « RUN » et « PWR » situés à proximité du pin 39 ne sont pas dédiés exprès à allumer et éteindre proprement le PI ?

    cdt,

    Répondre
    1. François MOCQ Auteur de l’article

      bonjour
      non, ces pastilles permettent de mettre le CPU en veille ou de le resetter mais en aucun cas elles n’arrêtent le système proprement. C’est du Hard ! un reset du CPU c’est comme débrancher/rebrancher l’alim ! c’est sauvage 🙂
      cdt
      françois

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.