Bedienen Sie das mit RaspberryPi verbundene LCD über I2C von Python aus. Dieses Mal verwenden wir ein LCD mit SpikenzieLabs MPTH, das an HD44780 angeschlossen ist.
Es ist notwendig, die Verwendung von I2C auf der RaspberryPi-Seite vorzubereiten. Fügen Sie zunächst die folgenden zwei Zeilen zu "/ etc / modules" hinzu.
i2c-bcm2708
i2c-dev
Löschen / kommentieren Sie als Nächstes die folgende Zeile aus / etc / modprobe.d / raspi-blacklist.conf
.
blacklist i2c-bcm2708
Einmal neu starten, dann "i2c-tools" und "python-smbus" installieren.
sudo apt-get install i2c-tools python-smbus
Ermitteln Sie zunächst die Busnummer und die Adresse des zu verwendenden LCD. Führen Sie "sudo i2cdetect 0" und "sudo i2cdetect 1" aus. Diejenige ohne Fehler ist die Busnummer (0 oder 1), und die Adresse wird vom Ausgang erhalten. Wenn die Ausgabe beispielsweise wie folgt lautet, ist 0x20 die Adresse.
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- — -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Die "smbus" -Bibliothek wird für die I2C-Kommunikation verwendet. Holen Sie sich das Verbindungsobjekt mit smbus.SMBus (bus_number)
und senden Sie die Daten mit write_i2c_block_data
. Diese Methode verwendet "addr", "cmd", "vals". addr
ist die Geräteadresse. "cmd" und "vals" sind unterschiedlich und setzen das erste Byte der übertragenen Daten in "cmd" und den Rest in "vals". Dies liegt daran, dass mindestens 1 Byte gesendet werden muss (Referenz). ..
import smbus
bus = smbus.SMBus(bus_number)
s = "abcde"
bus.write_i2c_block_data(addr, ord(s[0]), ord(s[1:]))
Der HD44780 kann die Steuersequenz aus irgendeinem Grund nicht lesen. Verwenden Sie daher zum Löschen den von MPTH bereitgestellten Befehl [http://www.spikenzielabs.com/Downloadables/LCD_Interface_v3.pdf].
Spezielle Befehle werden nach "0x80" aufgerufen. Der Bildschirm ist "0x05 0x01", also
bus.write_i2c_block_data(addr, 0x80, [0x05, 0x01])
Wird sein.
Ich habe eine Bibliothek erstellt, die diese zusammenfasst. Sie können es von einem anderen Programm aus aufrufen oder über die Befehlszeile ausprobieren. In beiden Fällen muss die Ausführung mit Root-Rechten erfolgen.
Das Format ist wie folgt.
sudo ./i2cdisplay.py <bus> <addr> {write|clear|cursor|backlight}
"
Die Ausgabe der Zeichen lautet "sudo ./i2cdisplay.py
sudo ./i2cdisplay.py <bus> <addr> write "abc" "def"
Es wird.
sudo ./i2cdisplay.py <bus> <addr> clear
#Cursor anzeigen
sudo ./i2cdisplay.py <bus> <addr> cursor True
#Du willst dich verstecken
sudo ./i2cdisplay.py <bus> <addr> cursor False
#Stärke ist 0-Wählen Sie aus 255 (128 im folgenden Beispiel)
sudo ./i2cdisplay.py <bus> <addr> backlight 128
#Initialisieren
d = MPTHDisplay(<bus>, <addr>)
#Zeichenausgabe
d.write("abc")
#Neue Zeile
d.newline()
#klar
d.clear()
#Mehrzeiliger Ausgang
d.writelines("abc", "def")