[Ev3dev] Comprenons le mécanisme de contrôle LCD (écran)

introduction

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.

mindstorm - contrôlons EV3 avec Linux! Installez le système d'exploitation ev3dev et la connexion SSH

Aperçu

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.

Comment fonctionne l'écran LCD

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)

スクリーンショット 2017-02-18 17.20.36.png

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

Exemple de code

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.

9.png

#!/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.

référence

Using the EV3 LCD

Capture d'écran [Ev3dev] Créez un programme qui capture l'écran LCD (écran) en utilisant python

Recommended Posts

[Ev3dev] Comprenons le mécanisme de contrôle LCD (écran)
Examinons le mécanisme de la chinchirorine de Kaiji
[Statistiques] Comprendre le mécanisme des graphiques Q-Q avec animation.
[ev3dev × Python] Contrôle de plusieurs moteurs
J'ai étudié le mécanisme de connexion flask!
Comprendre le contenu du pipeline sklearn
Le monde des livres d'ingénierie de contrôle
[Ev3dev] Créez un programme qui capture LCD (écran) en utilisant python
[Objet obligatoire DI] Implémenter et comprendre le mécanisme de DI avec Go
Décidons le gagnant du bingo
Comprendre la commodité de Django Rest Framework
[Python3] Comprendre les bases de Beautiful Soup
Comprendre la partie "temporaire" d'UNIX / Linux
[Python3] Comprendre les bases des opérations sur les fichiers
Comprenons ensemble les entrées / sorties standard de bash et écrivons un script shell.