Cet article suppose que vous avez installé ev3dev sur votre EV3 et que vous disposez d'une connexion SSH. Si vous n'avez pas créé l'environnement, reportez-vous à cet article.
Dans ev3dev, je vais vous expliquer comment contrôler l'écran LCD d'EV3 avec une figure d'exemple de code. La bibliothèque python ev3dev-lang-python fournit des API qui vous permettent de contrôler facilement l'écran LCD, mais cette fois nous utiliserons ces bibliothèques. Le but est de comprendre le mécanisme de contrôle LCD sans l'utiliser.
L'écran LCD de l'EV3 a un écran monochrome de 178 x 128 pixels.
Le pilote vidéo est fourni par l'interface du framebuffer Linux, qui vous permet de contrôler l'écran LCD en écrivant des données dans le fichier de périphérique / dev / fb0.
Vérifions les informations du framebuffer en exécutant la commande
fbset -i```.
robot@ev3dev:~$ fbset -i
mode "178x128"
geometry 178 128 178 128 1
timings 0 0 0 0 0 0 0
rgba 1/0,1/0,1/0,0/0
endmode
Frame buffer device information:
Name : ST7586
Address : 0xc39f9000
Size : 3072
Type : PACKED PIXELS
Visual : MONO01
XPanStep : 0
YPanStep : 0
YWrapStep : 0
LineLength : 24
Accelerator : No
Vous pouvez voir que l'écran LCD se compose de 178 x 128 pixels et que les informations de pixel dans une ligne horizontale sont représentées par 24 octets. (Figure ci-dessous)
Étant donné que l'écran LCD est monochrome (et non couleur), chaque pixel minimum correspond à 0 ou 1 donnée binaire. Puisque 1 octet = 8 bits, 178/8 = 22,25 (octet) est suffisant pour exprimer 178 px. Cependant, en réalité, les informations de pixel dans une rangée horizontale sont représentées par 24 octets. En d'autres termes, toutes les données de 24 octets ne sont pas affichées à l'écran.
Pour contrôler l'écran LCD, 24 octets x 128 (lignes) = 3072 octets de données doivent être écrits dans le fichier du périphérique. L'exemple de code pour afficher la figure suivante est le suivant.
#!/usr/bin/env python
# Hard coding these values is not a good idea because the values could
# change. But, since this is an example, we want to keep it short.
SCREEN_WIDTH = 178 # pixels
SCREEN_HEIGHT = 128 # pixels
LINE_LENGTH = 24 # bytes
SIZE = 3072 # bytes
import os
import array
def main():
#Définir un tableau avec 3072 éléments
buf = [0] * SIZE
#Tracez une ligne verticale sur la 100e colonne
for row in range(0, SCREEN_HEIGHT):
buf[row * LINE_LENGTH + int(100 / 8)] = 1 << (100 % 8)
#Tracez une ligne horizontale dans la 64e colonne
for col in range(0, LINE_LENGTH):
buf[64 * LINE_LENGTH + col] = 0xff
import math
#Point central(40,40),Tracez un cercle avec un rayon de 20
for x in range(0, 20):
y = math.sqrt(20 * 20 - x * x)
buf[(40 + int(y)) * LINE_LENGTH + int((40 + x) / 8)] = 1 << ((40 + x) % 8)
buf[(40 - int(y)) * LINE_LENGTH + int((40 + x) / 8)] = 1 << ((40 + x) % 8)
buf[(40 + int(y)) * LINE_LENGTH + int((40 - x) / 8)] = 1 << ((40 - x) % 8)
buf[(40 - int(y)) * LINE_LENGTH + int((40 - x) / 8)] = 1 << ((40 - x) % 8)
#Écrire dans le fichier de l'appareil
f = os.open('/dev/fb0', os.O_RDWR)
s = array.array('B', buf).tostring()
os.write(f, s)
os.close(f)
if __name__ == '__main__':
main()
Lorsque vous enregistrez et exécutez le code, le chiffre s'affiche sur l'écran LCD. Cela sera utile si vous souhaitez contrôler un écran LCD compliqué qui n'est pas défini dans la bibliothèque.
Capture d'écran [Ev3dev] Créez un programme qui capture l'écran LCD (écran) en utilisant python
Recommended Posts