[PYTHON] [Ev3dev] Lassen Sie uns den Mechanismus der LCD-Steuerung (Bildschirmsteuerung) verstehen

Einführung

In diesem Artikel wird davon ausgegangen, dass Sie ev3dev auf Ihrem EV3 installiert haben und über eine SSH-Verbindung verfügen. Wenn Sie die Umgebung nicht erstellt haben, lesen Sie bitte diesen Artikel.

mindstorm-Lass uns EV3 unter Linux steuern! Ev3dev OS und SSH-Verbindung installieren

Überblick

In ev3dev werde ich anhand einer Abbildung mit Beispielcode erklären, wie das LCD von EV3 gesteuert wird. Die Python-Bibliothek ev3dev-lang-python bietet APIs, mit denen Sie das LCD einfach steuern können. Dieses Mal werden wir diese Bibliotheken verwenden. Der Zweck besteht darin, den Mechanismus der LCD-Steuerung zu verstehen, ohne ihn zu verwenden.

Wie das LCD funktioniert

Das LCD des EV3 verfügt über einen monochromen Bildschirm von 178 x 128 Pixel. Der Grafiktreiber wird von der Linux-Framebuffer-Schnittstelle bereitgestellt, mit der Sie das LCD steuern können, indem Sie Daten in die Gerätedatei / dev / fb0 schreiben. Lassen Sie uns die Framebuffer-Informationen überprüfen, indem Sie den Befehl `` `fbset -i``` ausführen.

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

Sie können sehen, dass das LCD aus 178 x 128 Pixel besteht und dass die Pixelinformationen in einer horizontalen Zeile durch 24 Bytes dargestellt werden. (Abbildung unten)

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

Da das LCD monochrom (nicht farbig) ist, besteht jedes minimale Pixel aus 0 oder 1 Binärdaten. Da 1 Byte = 8 Bit ist, reicht 178/8 = 22,25 (Byte) aus, um 178 Pixel auszudrücken. In der Realität wird die Pixelinformation in einer horizontalen Zeile jedoch durch 24 Bytes dargestellt. Mit anderen Worten, nicht alle 24-Byte-Daten werden auf dem Bildschirm angezeigt.

Beispielcode

Zur Steuerung des LCD müssen 24 Bytes x 128 (Zeilen) = 3072 Bytes Daten in die Gerätedatei geschrieben werden. Der Beispielcode zur Anzeige der folgenden Abbildung lautet wie folgt.

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():
    #Definieren Sie ein Array mit 3072 Elementen
    buf = [0] * SIZE

    #Zeichnen Sie eine vertikale Linie in die 100. Spalte
    for row in range(0, SCREEN_HEIGHT):
        buf[row * LINE_LENGTH + int(100 / 8)] = 1 << (100 % 8)

    #Zeichnen Sie eine horizontale Linie in die 64. Spalte
    for col in range(0, LINE_LENGTH):
        buf[64 * LINE_LENGTH + col] = 0xff


    import math
    #Mittelpunkt(40,40),Zeichnen Sie einen Kreis mit einem Radius von 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)

    #In Gerätedatei schreiben
    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()

Wenn Sie den Code speichern und ausführen, wird die Abbildung auf dem LCD-Bildschirm angezeigt. Dies ist hilfreich, wenn Sie ein kompliziertes LCD steuern möchten, das nicht in der Bibliothek definiert ist.

Referenz

Using the EV3 LCD

Bildschirmaufnahme [Ev3dev] Erstellen Sie ein Programm, das LCD (Bildschirm) mit Python erfasst

Recommended Posts

[Ev3dev] Lassen Sie uns den Mechanismus der LCD-Steuerung (Bildschirmsteuerung) verstehen
Untersuchen wir den Mechanismus von Kaijis Chinchirorin
[Statistik] Verstehen Sie den Mechanismus von Q-Q-Plots mit Animation.
[ev3dev × Python] Steuerung mehrerer Motoren
Ich habe den Mechanismus der Flaschenanmeldung untersucht!
Verstehen Sie den Inhalt der sklearn-Pipeline
Die Welt der Bücher der Steuerungstechnik
[Ev3dev] Erstellen Sie ein Programm, das das LCD (Bildschirm) mit Python erfasst
[Erforderliches Thema DI] Implementieren und verstehen Sie den Mechanismus von DI mit Go
Lassen Sie uns den Gewinner des Bingo bestimmen
Verstehen Sie den Komfort des Django Rest Framework
[Python3] Verstehe die Grundlagen von Beautiful Soup
Verstehen Sie den "temporären" Teil von UNIX / Linux
[Python3] Grundlegendes zu Dateivorgängen
Lassen Sie uns gemeinsam die Standardeingabe / -ausgabe von bash verstehen und ein Shell-Skript schreiben.