Afficher sur l'écran de la brique EV3 en Python

La brique EV3 du Lego MindStorm est dotée d'un écran LCD sur lequel on peut afficher un contenu par programmation. Cet écran, assez rudimentaire, et monochrome et a une taille de 178 x 128 pixels. 
La programmation de l'écran passe par la classe Display de la bibliothèque ev3dev2. Cette classe doit être instanciée et les affichages sont effectué par l'invocation de l'une des méthodes exposée. La documentation de cette classe est disponible « ici ».

Afficher sur l'écran de la brique EV3

Le logiciel de programmation par briques graphiques livré avec le kit du robot Lego MindStorm propose une brique Action pour afficher des données sur l'écran LCD. En fonction des données à afficher, cette brique est déclinée de plusieurs façons.
En Python, la classe Display expose les méthodes correspondantes.

La classe Display

La classe Display s'appuie sur la bibliothèque PIL. Cette bibliothèque permet de manipuler les images en langage Python. Les propriétés draw et image fournissent les instances des objets PIL.  Outre les méthodes standards qui reproduisent les briques graphiques de programmation Lego MindStorm, on peut aussi profiter de la richesse de la bibliothèque pour effectuer des affichages plus sophistiqués.
La classe Display se trouve dans le module ev3dev2.display et doit être instanciée une fois pour être utilisée. En général, l'instance unique créée est affectée à une constante qui peut être utilisée dans le programme pour y invoquer les méthodes d'affichage.
from ev3dev2.display import Display
SCREEN = Display()

Les propriétés de la classe Display

Le propriétés de la classe Display sont exposées en lecture seule. On ne peut pas modifier leur valeur.
  • xres, yres fournissent respectivement la résolution horizontale et verticale de l'écran LCD.
  • shape fournit la même chose, mais sous forme de tuple Python.
  • draw fournit le contexte de dessin (instance de PIL.ImageDraw.Draw).  
  • image fournit l'image (instance de PIL.Image) relative à ce qui est affiché sur l'écran.

Méthode clear()

La méthode clear() permet d'effacer l'écran.
SCREEN.clear()

Méthode update()

La méthode update() est utilisée pour afficher toutes les modifications effectuées par les autres méthodes de d'affichage.  En effet, le dessin est effectué dans une image tampon. Celle-ci est recopiée effectivement sur l'écran LCD par l'invocation de l'a méthode. Sinon, aucune modification ne sera prise en compte.

Méthode image_filename()

Cette méthode est équivalente à la brique graphique ci-dessus. Elle est déclarée comme ci-dessous.
image_filename(filename, clear_screen=True, x1=0, y1=0, x2=None, y2=None)
Les paramètres passé sont les mêmes que pour la brique graphique :
  • clear_screen indique si l'écran doit être effacé avant l'affichage de l'image.
  • x1 et y1 correspondent respectivement à x et y dans la brique. Par défaut, ils sont nuls. Ce qui correspond au coin supérieur gauche de l'écran.
  • x2 et y2 sont deux paramètres supplémentaires initialisés à None. Leur utilisation provoque une erreur à l'exécution.
L'article « Afficher une image en Python sur l'écran de la brique EV3» présente un exemple de l'utilisation de cette méthode.

Méthodes de dessin line(), circle(), rectangle() et point()

Ces méthodes permettent de dessiner sur l'écran. Elles correspondent aux variantes de la brique graphiques d'affichage ci-dessus. Elles sont déclarées comme suit :
line(clear_screen=True, x1=10, y1=10, x2=50, y2=50, line_color='black', width=1)
rectangle(clear_screen=True, x1=10, y1=10, x2=80, y2=40, fill_color='black', outline_color='black')
circle(clear_screen=True, x=50, y=50, radius=40, fill_color='black', outline_color='black')
point(clear_screen=True, x=10, y=10, point_color='black')
Les paramètres passés correspondent, à quelques exceptions près, aux paramètres des briques graphiques :
  • clear_screen indique si l'écran doit être effacé avant l'affichage. Par défaut, ce paramètre est initialisé à True. Mais, la plupart du temps, un dessin comporte plusieurs figures nécessitant un appel multiple des méthodes. C'est pourquoi, il vaut mieux préciser la valeur False pour que chaque méthode invoquée n'efface pas ce qu'a fait la précédente. Quitte à utiliser la méthode clear() pour effacer l'écran au début du dessin.
  • x1, y1, x2, y2 (pour les méthodes line() et rectangle()) correspondent aux coordonnées des deux extrémité de la ligne ou du rectangle dessiné. Pour la méthode rectangle(), le fonctionnement diffère de la brique dans le sens ou pour la brique les paramètres passé sont les coordonnées du coin supérieur gauche et ses dimension largeur et hauteur, alors que pour la méthode rectangle(), il s'agit des coordonnées des coins supérieur gauche et inférieur droit.
  • x et y (pour la méthode circle() uniquement) correspondent aux coordonnées du cente du cercle.
  • radius (pour la méthode circle() uniquement) indique le rayon du cercle.
  • line_color, outline_color, point_color désigne la couleur du dessin. Cette couleur ne peut prendre que deux valeurs 'black' ou 'white'. Pour dessiner, il faut utiliser la valeur 'black'. Pour effacer,il faut utiliser la couleur 'white'
  • fill_color (pour les méthodes rectangle() et cercle()) désigne la couleur de remplissage. La valeur par défaut est 'black'. Ce qui signifie que l'intérieur du cercle ou du rectangle sera colorié en noir. Si l'on ne veut que le contour, il faut préciser fill_color='white' dans les paramètres passés.
  • width (pour la méthode line() uniquement) indique l'épaisseur du trait.
L'article « Dessiner en Python sur l'écran de la brique EV3» présente un exemple de l'utilisation de ces méthodes.

Méthode d'écriture text_pixels() et text_grid()

Ces méthodes permettent d'écrire du texte sur l'écran. Elles correspondent aux variantes de la brique graphique d'affichage ci-dessus. Elle sont déclarées comme suit :
text_pixels(text, clear_screen=True, x=0, y=0, text_color='black', font=None)
text_grid(text, clear_screen=True, x=0, y=0, text_color='black', font=None)
Les paramètres passés correspondent aux paramètres des briques graphiques :
  • text est la chaîne de caractères à afficher.
  • clear_screen indique si l'écran doit être effacé avant l'affichage. Par défaut, ce paramètre est initialisé à True. Mais il est probable que l'affichage d'un texte sur l'écran nécessite plusieurs invocations de cette méthode.C'est pourquoi, il vaut mieux préciser la valeur False pour éviter qu'une instruction n'efface ce qu'a fait la précédente. 
  • x et y correspondent à la position du texte. Mais leur signification diffère en fonction de la méthode invoquée. Pour text_pixels(), il s'agit de la position du pixel supérieur gauche du texte. Pour text_grid(), on considère que l'écran fonctionne comme un écran ttx. Il est divisé en une matrice de 12 lignes de 22 caractères, chaque caractère occupant une rectangle de 8x12 pixels.
  • text_color désigne la couleur des caractères.Ce ne peut être que 'black' (par défaut) ou 'white'.
  • font est la police de caractères utilisée pour l'affichage.
L'article « Ecrire en Python sur l'écran de la brique EV3» présente un exemple de l'utilisation de ces méthodes.

Commentaires

Posts les plus consultés de ce blog

Connecter ev3dev2 à Internet en WiFi

Connecter Visual Studio Code à un robot MindStorm EV3 avec ev3dev-browser

Installer les modules EV3DEV2 sur Python