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
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.
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)
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.
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.
#!/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.
Bildschirmaufnahme [Ev3dev] Erstellen Sie ein Programm, das LCD (Bildschirm) mit Python erfasst
Recommended Posts