RASP-SENSE-HAT-ASTRO-PI-IP
Afficher votre adresse IP
Dans ce tutoriel, vous allez apprendre comment afficher votre adresse IP sur votre Sense hat lors du démarrage.
Si vous possédez un Raspberry PI configuré pour avoir une adresse IP dynamique, et que vous possédez un Sense hat: cet article est fait pour vous!
Le but est d'afficher l'adresse IP sur la matrice de LED afin de pouvoir démarrer une session ssh / vnc / ... sans avoir à faire des commandes pour récupérer l'adresse.
Afin d'arriver à ce but, je suis passé à travers ces différentes étapes:
- Créer un script Python qui récupère l'adrese IP (de l'interface eth0 ou wlan0) et l'affiche 3 fois sur la matrice de LEDs
- Créer un script bash qui définit le service à ajouter au processus de démarrage INIT V
- Ajouter le script au processus de démarrage pour qu'il démarre automatiquement
Comme prérequis, je pars du principe que vous avez déjà installé la librairie pour gérer votre Sense hat. Dans le cas contraire, voici les commandes à exécuter:
sudo apt-get update sudo apt-get install sense-hat sudo pip-3.2 install pillow
Procédure rapide
Si vous ne souhaitez pas perdre du temps, vous pouvez télécharger ce fichier zip contenant les codes sources nécessaires: il contient 2 fichiers avec leur chemin d'emplacement. Procédez à l'extraction de l'archive et exécutez les instructions suivantes:
- Extraire tous les fichiers ainsi que l'arborescence
- Allez dans /etc/init.d avec l'instruction cd /etc/init.d
- Démarrez le service au démarrage avec la commande:
sudo update-rc.d sense_hat_ip defaults
Procédure détaillée
Etape 1 sur 2 - Créer le script Python
Commençons par la rédaction de la partie fonctionnelle:
cd /usr/share md sense_hat_ip cd sense_hat_ip sudo nano sense_hat_ip.py
Vous pouvez copiez/coller ce code
# ============================================================================ # Sense hat - IP address # # Description: This component displays the IP address on the lcd of the Sense # hat. The complete system is made out of 2 components: # # - /user/share/sense_hat_ip/sense_hat_ip.py # Component executing the functional logic # # - /etc/init.d/sense_hat_ip # Service added to the INIT process with the command # sudo update-rc.d sense_hat_ip # # Author : Serge Bollaerts # Date : 1-sept-2015 # License : GPL, free for commercial and non-commercial use # Feedback : sbollaerts@hotmail.com # ============================================================================ from sense_hat import SenseHat from daemon import runner from subprocess import * import logging import time # ============================================================================ # Class App # # This class contains the code to be executed asynchronously with the daemon. # ============================================================================ class App(): sense = SenseHat() def __init__(self): self.stdin_path = "/dev/null" self.stdout_path = "/dev/tty0" # When debugging, use tty instead self.stderr_path = "/dev/tty0" # When debugging, use tty instead # When I provide the real path, it does not work: why? self.pidfile_path = "/usr/share/sense_hat_ip/sense_hat_ip.pid" self.pidfile_timeout = 30 def run(self): ipaddr = self.get_ip_address() msg = ipaddr if msg == "": msg = "<No IP found>" for i in range(0, 3): self.sense.show_message(msg) time.sleep(2) self.sense.clear(); def get_ip_address(self): cmd1 = "ip addr show scope global eth0 | grep inet | cut -d' ' -f6 | cut -d/ -f1" cmd2 = "ip addr show scope global wlan0 | grep inet | cut -d' ' -f6 | cut -d/ -f1" # For any obscure reason, the command doesn't always return a # result. I created a loop in order to wait for a result to be # provided. output = "" retry = 0; while (output == "") and (retry < 30): time.sleep(1) p = Popen(cmd1, shell=True, stdout=PIPE) output = p.communicate()[0] if output == "": print("eth0 not found") time.sleep(1) p = Popen(cmd2, shell=True, stdout=PIPE) output = p.communicate()[0] if output == "": print("wlan0 not found") retry = retry + 1 return output.rstrip() # ============================================================================ # Main application logic creating an instance of App and executing it inside a # daemon context. # ============================================================================ app = App() logger = logging.getLogger("DaemonLog") logger.setLevel(logging.INFO) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") handler = logging.FileHandler("/var/log/sense_hat_ip.log") handler.setFormatter(formatter) logger.addHandler(handler) daemon_runner = runner.DaemonRunner(app) daemon_runner.daemon_context.files_preserve = [handler.stream] daemon_runner.do_action()
Sauvez le fichier et quittez nano:
- [CTRL] + O puis [ENTER]
- [CTRL] + X
Si vous souhaitez tester votre script, tapez la commande suivante:
sudo python sense_hat_ip.py start
Etape 2 sur 2 - Créer le service (daemon)
Allez dans le répertoire init.d et créer le script du service:
cd /etc/init.d sudo nano sense_hat_ip
Copiez et collez ce code dans votre script:
#! /bin/bash # Copyright (c) 2015 Do [MORE], do IT better. # All rights reserved. # # Author: Serge Bollaerts, 2015 # # Please send feedback to sbollaerts@hotmail.com # # /etc/init.d/sense_hat_ip # ### BEGIN INIT INFO # Provides: sense_hat_ip # Required-Start: # Should-Start: # Required-Stop: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Show IP address on Sense Hat # Description: Runs up the test daemon process ### END INIT INFO case "$1" in start) echo "sense_hat_ip: starting server" # Start the daemon python /usr/share/sense_hat_ip/sense_hat_ip.py start ;; stop) echo "sense_hat_ip: stopping server" # Stop the daemon python /usr/share/sense_hat_ip/sense_hat_ip.py stop ;; restart) echo "sense_hat_ip: restarting server" python /usr/share/sense_hat_ip/sense_hat_ip.py restart ;; *) # Refuse to do other stuff echo "Usage: /etc/init.d/sense_hat_ip {start|stop|restart}" exit 1 ;; esac exit 0
Sauvez le fichier et quittez:
- [CTRL] + O puis [ENTER]
- [CTRL] + X
Enregistrez votre service dans la séquence de démarrage
sudo update-rc.d sense_hat_ip defaults
Redémarrez votre appareil avec sudo reboot et admirez votre matrice LED!
Désinstaller le service
Si vous souhaitez désinstaller le service de la séquence de démarrage, tapez les commandes suivantes:
cd /etc/init.d sudo update-rc.d sense_hat_ip remove
Remerciement
Tous nos remerciement à Mr Bollaerts pour l'ajout de ce bonus à nos tutoriels Hat Sense.
Source: Getting Started with Astro PI et Astro-Pi Guide proposé par Raspberry Pi Learning Resource (www.raspberrypi.org)
Licence Creative Commons - CC-BY-SA
The learning resource is provided for free by the Raspberry Pi Foundation under a Creative Commons licence.
Find more at raspberrypi.org/resources and github.com/raspberrypilearning.
Crédit de traduction: Toute référence, mention ou extrait de cette traduction doit également être explicitement accompagné du crédit de traduction suivant : « Traduction par MCHobby (shop.MCHobby.be) » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.