Programmer le Sense HAT sur Raspberry Pi avec Python
Le Sense HAT est l’un de mes accessoires Raspberry Pi préférés. Il vous permet de jouer avec le Raspberry Pi et Python de manière amusante, avec différents capteurs et une belle matrice LED pour afficher des choses. Dans ce tutoriel, je vous montrerai tout ce que vous devez savoir pour interagir avec lui en Python.
Le Sense HAT est livré avec une bibliothèque Python qui vous permet d’accéder facilement aux données de différents capteurs (température, gyroscope, joystick, etc.) et de les afficher sur l’écran LED. Tout est disponible dans la classe Python « SenseHat ».
Ce tutoriel est la deuxième partie de mon guide sur le Sense HAT Raspberry Pi. Si vous ne l’avez pas encore lu, vous pouvez commencer par la partie 1 et revenir plus tard. Cette partie est plus avancée et se concentre sur le code Python une fois le dispositif installé.
Si, comme moi, vous mélangez parfois la syntaxe entre différents langages de programmation, j’ai exactement ce qu’il vous faut. J’ai créé une fiche mémo Python avec toute la syntaxe essentielle au même endroit, pour que vous puissiez l’avoir sous la main et éviter toute confusion. Téléchargez-la gratuitement ici !
Introduction
Le Sense Hat est une carte d’extension créée par la Fondation Raspberry Pi.
Elle fournit de nombreux capteurs comme la température, l’humidité et la pression.
Il y a aussi une matrice d’affichage LED et un joystick dessus.
C’est un HAT assez bon marché pour commencer avec les GPIOs sur Raspberry Pi (consultez le prix actuel ici). En l’utilisant, vous apprendrez beaucoup sur le Raspberry Pi, Python et les broches GPIOs.
Dans ce post, nous allons voir comment tout utiliser dans les scripts Python.
Si vous n’avez pas encore lu mon premier tutoriel, je recommande fortement de commencer par cela.
Voici le lien vers le début du tutoriel : Tutoriel Sense Hat Partie 1.
Aussi, si vous êtes nouveau sur Python, je vous recommande également de commencer par un tutoriel Python.
Vous pouvez par exemple lire cet article pour une vue d’ensemble rapide.
Même si les scripts que je vous montre ici ne sont pas compliqués, je ne passerais pas de temps à expliquer la partie Python.
Cela étant dit, passons à l’entraînement !
Recueillir des données à partir du Sense Hat
La bibliothèque Sense Hat
Nous l’avons brièvement vu dans la partie précédente, mais je vais vous donner quelques détails supplémentaires ici.
Pour utiliser les fonctions que j’introduis dans votre script, vous devez d’abord inclure la bibliothèque Python pour le Sense HAT au début de votre script.
Une bibliothèque est un code source qui fournit tout ce dont vous avez besoin pour une utilisation spécifique.
Cela évite d’avoir à coder tout cela par vous-même.
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
Voici les deux lignes à ajouter au début de chaque code Python :from sense_hat import SenseHat
sense = SenseHat()
La première ligne importe la bibliothèque et la seconde initialise la variable « sense » que vous utiliserez dans l’ensemble du script.
Température, humidité et pression
Théorie
Une fois la bibliothèque importée, vous avez accès à toutes les fonctions de base pour collecter les données à partir du Sense Hat.
Voici les trois premières fonctions que vous pouvez utiliser :
- sense.get_temperature()
- sense.get_humidity()
- sense.get_pressure()
Les noms sont explicites.
Ils n’ont pas besoin de paramètres, et ils retournent la valeur directement (comme un nombre flottant).
Exemple
from sense_hat import SenseHat
sense = SenseHat()
#temperature
temp = sense.get_temperature()
print("Temperature: %s C" % temp)
#humidity
humidity = sense.get_humidity()
print("Humidity: %s %%" % humidity)
#pressure
pressure = sense.get_pressure()
print("Pressure: %s Millibars" % pressure)
Sortie :Temperature: 28.5211639404 C
Humidity: 43.0516967773 %
Pressure: 998.412353516 Millibars
La température est en degrés Celsius, l’humidité en pourcentage et la pression en Millibars.
Nous obtenons les nombres avec beaucoup décimales, ainsi vous pouvez les arrondir si vous voulez :
round(temperature)
Orientation et boussole
Théorie
Les prochaines fonctions que je veux vous montrer sont l’orientation et la boussole.
Grâce au magnétomètre, on peut presque l’utiliser comme une boussole.
En ce qui concerne les autres fonctions, les noms sont explicites :
- sense.get_orientation()
Vous pouvez également utiliser get_orientation_radians() ou get_orientation_degrees() pour spécifier l’unité que vous souhaitez. - sense.get_compass()
Obtenez la direction du Nord en degrés (par rapport à la direction des ports USB).
360/0° est le Nord, 90 est l’Est, 270 est l’Ouest et 180 est le Sud. - sense.set_imu_config(compass_enabled, gyro_enabled, acc_enabled)
Pour sélectionner le capteur que vous souhaitez activer.
Étalonnage
Avant d’utiliser ces fonctions, vous devez calibrer le Sense Hat.
La procédure est disponible sur cette page GitHub, mais voici le résumé :
- Installez les dépendances :
sudo apt install octave -y
- Copiez les fichiers dans un dossier temporaire :
cp /usr/share/librtimulib-utils/RTEllipsoidFit ./ -a
- Exécutez l’outil d’étalonnage :
cd RTEllipsoidFit
RTIMULibCal
Un menu de configuration comme celui-ci s’affiche :
Les options possibles sont :
m – étalonnage du magnétomètre avec min/max
e – étalonnage du magnétomètre avec une ellipse (faire min/max d’abord)
a – étalonnage de l’accéléromètre
x – quitter
Appuyez sur « m » et suivez les instructions (vous devez déplacer votre Raspberry Pi dans toutes les directions sur 6 axes).
Appuyez sur « s » puis sur « x » une fois terminé.
Exemple
Une fois votre Sense Hat calibré, vous pouvez utiliser les fonctions précédentes comme ceci :
from sense_hat import SenseHat
#orientation
sense = SenseHat()
orientation = sense.get_orientation()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))
#compass
sense.set_imu_config(True, False, False) # enable only the compass
north = sense.get_compass()
print("North: %s" % north)
Sortie :
p: 1.34247368137, r: 0.0139023806468, y: 138.151914078
North: 138.151914078
Gyroscope et accéléromètre
Théorie
Vous pouvez également utiliser le capteur gyroscope intégré au Sense Hat.
Comme pour les précédentes, les noms des fonctions sont explicites :
- get_gyroscope()
Retourne les valeurs de tangage, de roulis et de lacet en nombre flottant - get_accelerometer()
N’oubliez pas d’utiliser set_imu_config() pour activer uniquement celui que vous voulez.
Exemple
L’utilisation est presque la même que vu précédemment :
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
from sense_hat import SenseHat
sense = SenseHat()
#gyroscope
sense.set_imu_config(False, True, False) # gyroscope only
gyro_only = sense.get_gyroscope()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**gyro_only))
#accelerometer
sense.set_imu_config(False, False, True) # accelerometer only
accel_only = sense.get_accelerometer()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**accel_only))
Joystick
Théorie
Une autre chose que je veux vous montrer est le joystick.
Vous pouvez l’utiliser comme interface d’entrée dans vos scripts.
Comme souvent avec le développement de l’interface utilisateur, la bibliothèque Python vous permet de capter des événements.
Il y a deux fonctions principales que je vais vous montrer ici :
- wait_for_event()
Comme son nom l’indique, le script est interrompu jusqu’à ce que quelque chose se passe.
La fonction retourne trois valeurs : l’horodatage, l’action et la direction. - get_events()
Plutôt que d’attendre de nouveaux événements, vous pouvez vérifier si quelque chose s’est passé récemment.
Cette fonction vous donne l’historique de tous les événements qui se sont produits depuis le dernier appel.
Exemple
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
event = sense.stick.wait_for_event()
print("The joystick was {} {}".format(event.action, event.direction))
sleep(0.1)
event = sense.stick.wait_for_event()
print("The joystick was {} {}".format(event.action, event.direction))
Avec la fonction wait_for_event() votre script est mis en pause jusqu’à ce que vous touchiez le joystick.
Ensuite, il affiche l’action et la direction (que vous pouvez utiliser dans un programme plus complexe, pour un menu ou un jeu par exemple).
Afficher les données sur l’écran du Sense Hat
Ok, la dernière chose que je veux vous montrer est comment afficher des choses sur la Matrice LED du Sense Hat.
Il y a de nombreuses fonctions pour afficher des couleurs, textes, images ou pour configurer des choses comme l’orientation et la luminosité.
Mais pour ce tutoriel, je vais garder les choses simples : texte et pixels couleurs.
Afficher des textes
Théorie
Vous avez déjà appris à le faire dans la première partie de ce tutoriel, mais je vais vous expliquer ici comment cela fonctionne.
L’API offre deux façons d’afficher le texte à l’écran : les lettres ou le texte.
Voici les deux fonctions que vous pouvez utiliser :
- show_message(text, speed, text_color, back_color)
Le texte est une chaîne de caractères, la vitesse est un nombre flottant (0,1 par défaut) et les couleurs sont une liste de trois valeurs (R, G, B).
Vous comprendrez dans les exemples ci-dessous. - show_letter(letter, text_color, back_color)
Presque la même chose. Lettre est une chaîne de 1 caractère et les couleurs sont des listes (R, G, B).
Pour les deux fonctions, les couleurs par défaut sont un texte blanc sur un fond noir.
Si cela est ok pour vous, les paramètres de couleur ne sont pas obligatoires.
Exemple
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
#set your colors here
background = (198, 30, 74)
color = (255, 255, 255)
#display a message on the screen
sense.show_message("RaspberryTips <3", 0.05, color, background)
sleep(1)
#display only one letter
sense.show_letter("@")
sleep(2)
#turn off the screen
sense.clear()
Dans cet exemple, je vais vous montrer les deux fonctions en action, et un ajout d’une fonction bonus (la fonction clear).
Deux précisions maintenant :
- La vitesse dans la fonction show_message()représente le temps de pause entre chaque lettre. Donc, plus cette valeur est grande, plus la vitesse de défilement est lente.
- Si vous le souhaitez, vous pouvez utiliser show_message()sans tous les paramètres, voici quelques exemples qui fonctionnent :
sense.show_message("Text")
sense.show_message("Text", 0.1)
sense.show_message("Text", text_colour=[255, 0, 0])
sense.show_message("Text", back_colour=[255, 0, 0])
Définir les couleurs des pixels
Théorie
Vous avez vu les couleurs arc-en-ciel au démarrage, de sorte que vous savez déjà qu’il est possible de définir chaque pixel à une couleur spécifique.
Dans cette partie, nous jouerons avec deux fonctions :
- set_pixels(pixel_list)
Le paramètre est une liste de 64 couleurs pour définir toutes les couleurs des pixels à la fois. - set_pixel(x, y, color)
ou set_pixel(x, y, r, g, b)
Vous avez le choix de définir la couleur comme une liste ou comme trois paramètres différents, ne me demandez pas pourquoi c’est seulement dans cette fonction :).
x est la colonne gauche/droite, y est la ligne haut/bas (valeurs de 0 à 7).
Exemple
from sense_hat import SenseHat
from time import sleep
from random import randint
sense = SenseHat()
R = (198, 30, 74) #rouge raspberrytips
W = (255, 255, 255) #blanc
#set all pixels at once
pixels = [
W, W, W, W, W, W, W, W,
W, R, R, W, R, R, W, W,
R, R, R, R, R, R, R, W,
R, R, R, R, R, R, R, W,
R, R, R, R, R, R, R, W,
W, R, R, R, R, R, W, W,
W, W, R, R, R, W, W, W,
W, W, W, R, W, W, W, W
]
sense.set_pixels(pixels)
sleep(5)
sense.clear()
#set one pixel at at time
while True:
X = randint(0, 7)
Y = randint(0, 7)
sense.set_pixel(X, Y, R)
sleep(0.2)
Oui, je vous aime :).
Utilisez CTRL+C pour arrêter le script une fois que votre écran est plein de pixels rouges.
Si vous ne le savez pas, randint() retourne une valeur aléatoire entre les deux paramètres.
Et while True est une boucle infinie pour afficher tous les pixels.
Mais vous pouvez utiliser des valeurs statiques et/ou répéter la fonction set_pixel() si vous préférez.
Documentation de l’API
Nous avons déjà vu une bonne liste de fonctions aujourd’hui, mais si vous voulez aller plus loin, vous pouvez consulter la documentation complète de l’ API ici.
Sur cette page, vous trouverez toutes les fonctions disponibles dans la bibliothèque Sense Hat, pour faire n’importe quoi avec elle.
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
Rappel: J'ai crée une communauté d'utilisateurs de Raspberry Pi qui vous permet de partage vos avancées, poser vos questions et recevoir de nombreux avantages exclusifs (anglophones uniquement). Cliquez sur le lien pour en savoir plus.
Conclusion
C’est tout pour cette deuxième partie, nous avons vu beaucoup de choses dans Python aujourd’hui, et j’espère que vous avez aimé !
Prenez le temps de jouer avec, de changer mon code ou d’essayer d’autres choses.
Apprendre de nouvelles choses est important, mais s’amuser en le faisant, c’est encore mieux :).
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant
Ressources supplémentaires pour votre Raspberry Pi
Initiation au Raspberry Pi en vidéo
Si vous débutez et voulez passer rapidement à la vitesse supérieure, j’ai exactement ce qu’il vous faut.
Regardez ma formation vidéo qui vous aidera à démarrer du bon bien, choisir votre matériel, installer les meilleures applications et vous lancer directement dans vos premiers projets avec mon aide.
Regarder les vidéos dès maintenant
Maîtrisez votre Raspberry Pi en 30 jours
Vous avez besoin de plus ? Si vous êtes à la recherche des meilleures astuces pour devenir expert sur Raspberry Pi, ce livre est fait pour vous. Développez vos compétences sous Linux et pratiquez via de nombreux projets en suivant mes guides étape par étape. 10% de remise aujourd’hui !
Télécharger le livre au format PDF ici
Maîtrisez Python sur Raspberry Pi
Pas besoin d’être un génie pour coder quelques lignes pour votre Raspberry Pi.
Je vous apprends juste ce qu’il faut sur Python afin de réaliser n’importe quel projet. La seconde partie du livre est d’ailleurs consacrée à des exemples de projets où je vous guide pas à pas.
Ne perdez pas de temps, apprenez le strict nécessaire et économisez 10% avec ce lien :
Télécharger maintenant
Autres ressources pour profiter de votre Raspberry Pi
J’ai regroupé toutes mes recommandations de logiciels, sites utiles et de matériel sur cette page de ressources. Je vous invite à la consulter régulièrement pour faire les bons choix et rester à jour.
Visiter les pages ressources