tutoriel sense hat partie 2

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é.

Au passage, si vous vous sentez dépassé dès que Python est nécessaire pour un projet, je vous conseille de télécharger mon e-book « Maîtrisez Python on Raspberry Pi« . Il vous guidera pas à pas pour apprendre les concepts essentiels (et uniquement ceux-là) pour réaliser n’importe quel projet à l’avenir. Un Raspberry Pi sans Python, c’est comme une voiture sans moteur, vous ratez le plus intéressant ;-).
Profitez de 10 % de réduction en le téléchargeant dès aujourd’hui !

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 !

Téléchargez mon antisèche !
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant

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.

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é.

Téléchargez mon antisèche !
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant

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 :

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.

Téléchargez mon antisèche !
Format PDF pratique, avec les 74 commandes à retenir pour maîtriser son Raspberry Pi.
Télécharger maintenant

Vous comprenez l'anglais et en voulez encore plus ? Je publie une nouvelle leçon chaque mois, réservée à mes abonnés premium. Rejoignez la communauté dès maintenant pour y avoir accès !

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 :).

Téléchargez mon antisèche !
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


Ce tutoriel ne marche plus à 100%? Prévenez-moi pour que je le mette à jour!

Publications similaires

Laisser un commentaire

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