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.
Au sommaire :
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
1 2 |
pi@raspberrypi:~ $ python --version Python 2.7.16 |
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 🙂
1 2 3 4 5 6 |
pi@raspberrypi:~ $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1 update-alternatives: utilisation de « /usr/bin/python2.7 » pour fournir « /usr/bin/python » (python) en mode automatique pi@raspberrypi:~ $ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 2 update-alternatives: utilisation de « /usr/bin/python3.7 » pour fournir « /usr/bin/python » (python) en mode automatique pi@raspberrypi:~ $ python --version Python 3.7.3 |
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
1 2 3 4 5 6 7 8 |
pi@raspberrypi:~ $ sudo update-alternatives --config python Il existe 2 choix pour l'alternative python (qui fournit /usr/bin/python). Sélection Chemin Priorité État ------------------------------------------------------------ * 0 /usr/bin/python3.7 2 mode automatique 1 /usr/bin/python2.7 1 mode manuel 2 /usr/bin/python3.7 2 mode manuel Appuyez sur <Entrée> |
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
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
1 |
nano stop.sh |
contenant les lignes suivantes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#!/bin/bash # Script d'arrêt propre de Raspbian # Lit l état d’un bouton poussoir # Exécute un arrêt propre si on appuie sur le bouton # Rendre le répertoire /sys/class/gpio actif cd /sys/class/gpio # Créer l'accès au port GPIO 21 # Ne rien faire s'il existe déja if [ -d "gpio21" ]; then : ne rien faire else # Créer le GPIO echo 21 > export # Attendre 0,5 seconde que le répertoire soit créé sleep 0.5 fi # Rendre le répertoire gpio21 actif cd gpio21/ # Configurer le port GPIO 21 en entrée # Normalement il y est par défaut... mais on ne sait pas ce qui a pu se passer avant echo in > direction # Boucle while : cette boucle s'exécute tant que # la condition est vérifiée # ici la condition est toujours vraie : # la boucle ne s'interrompt jamais while true; do # Arrêter le boucle pour éviter de consommer du temps CPU sleep 0.5 # L'instruction cat affiche le contenu d’un fichier à l’écran # Le fichier value contient l’état du bouton poussoir z="$(cat value)" # Si Z vaut 1 bouton appuyé if [ $z = 1 ]; then # Arrêt propre du système sudo shutdown now -h fi done |
Il faut ensuite rendre le script stop.sh exécutable
1 |
chmod 744 stop.sh |
et à la fin de /etc/rc.local ajouter /home/pi/stop.sh & (le & pour garder le script actif) avant le exit 0
1 |
sudo nano /etc/rc.local |
modifier comme ci-dessous
1 2 3 4 5 6 |
_IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi <strong>/home/pi/stop.sh &</strong> exit 0 |
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
Les pin 5 et 6 seraient intrereeesannt puisqu’ils permettent aussi de demarrer le rpi
Bonjour
là c’était pour répondre à 2 questions de lecteurs
je vais voir quand j’aurai un peu de temps si je peux écrire là dessus
cordialement
François
Je pense qu’il veut parler de l’overlay gpio-shutdown.
J’avais fait un tuto sur le forum il y a 2 ans.
https://forums.framboise314.fr/viewtopic.php?f=44&t=4423
je peux le reprendre sous forme d’article (en te citant comme auteur bien entendu) ?
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.
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 🙂
c’est ça mais j’ai pas réussi a corriger mon message (oubli du lien)
Merci a toi
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
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
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
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.
@+
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
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.
@+
Bonsoir ,
Et sinon , j’ai pondu en Code Python3 (pour rester dans le sujet) un petit programme « Fonction » qui cherche et trouve les résistances à associer à partir de données Vin et Vout dans une des liste de résistances E normalisées .
https://forums.framboise314.fr/viewtopic.php?f=38&t=5676
merci je l’ajoute à l’article ! 🙂
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.
merci oui effectivement j’ai une occupation de 25% (1 coeur) sur le CPU
j’ai fait la modif 🙂
merci encore
Tu devrais lire les articles sur framboise 314. Il y en a un qui expliquait bien ce phénomène 😉
https://www.framboise314.fr/penser-thread-pour-simplifier-vos-programmes/
😀
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
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
merci !
quand j’ai copié le script depuis puTTY il m’avait tout collé sur une ligne 🙁
j’ai zappé cette modif quand j’ai réaligné le programme 🙂
Bonsoir François ,
C’est normal que l’accès au forum ne soit pas sécurisé ?
Bonjour
c’est à dire ? il y a bien un login pour se connecter…
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 !
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 .
« http://forums.framboise314.fr/ » pas bon
« https://forums.framboise314.fr/ » y a bon !
Changez le lien SVP !
bonjour
merci c’est rectifié !
ici quand je mettais http ça passait automatiquement sur https dans le lien sur forums c’est pour ça que j’ai mis un moment à percuter 🙂
Salut à tous.
Et il y a même un certificat SSL.
De quoi parlez-vous « msg » ?
@+
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,
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