.. note::
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
- **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!
.. _lcd:
1.1.7 I2C LCD1602
======================
Einführung
------------------
LCD1602 ist eine Flüssigkristallanzeige vom Zeichentyp, die gleichzeitig 32 (16 * 2) Zeichen anzeigen kann.
Komponenten
-------------------
.. image:: media/list_i2c_lcd.png
Prinzip
-----------
**I2C LCD1602**
Wie wir alle wissen, bereichern LCD und einige andere Anzeiger die Mensch-Maschine-Interaktion erheblich,
weisen jedoch eine gemeinsame Schwäche auf. Wenn sie mit einem Controller verbunden sind, werden mehrere E / A des Controllers belegt,
der nicht so viele äußere Ports hat.
Es schränkt auch andere Funktionen der Steuerung ein. Daher wurde LCD1602 mit einem I2C-Bus entwickelt, um das Problem zu lösen.
.. image:: media/i2c_lcd.png
**I2C-Kommunikation**
Der I2C-Bus (Inter-Integrated Circuit) ist ein sehr beliebter und leistungsstarker Bus für die Kommunikation zwischen einem Master-Gerät (oder Master-Geräten) und einem oder mehreren Slave-Geräten.
Der I2C-Hauptcontroller kann zur Steuerung des E / A-Expanders, verschiedener Sensoren, des EEPROM, des ADC / DAC usw. verwendet werden. Alle diese werden nur von den beiden Pins des Hosts gesteuert, der seriellen Datenleitung (SDA1) und der seriellen Taktleitung (SCL1).
Schematische Darstellung
-----------------------------------------
============ ========
T-Karte Name physisch
SDA1 Pin 3
SCL1 Pin 5
============ ========
.. image:: media/schematic_i2c_lcd.png
Experimentelle Verfahren
-----------------------------
Schritt 1: Bauen Sie die Schaltung auf.
.. image:: media/image96.png
:width: 800
Schritt 2: I2C einrichten (siehe :ref:`i2c_config`. Wenn Sie I2C eingestellt haben, überspringen Sie diesen Schritt.)
Für Benutzer in C-Sprache
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Schritt 3: Verzeichnis wechseln.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/c/1.1.7/
Schritt 4: Kompilieren.
.. raw:: html
.. code-block::
gcc 1.1.7_Lcd1602.c -lwiringPi
Schritt 5: Ausführen.
.. raw:: html
.. code-block::
sudo ./a.out
Nachdem die Kode ausgeführt wurde, werden auf dem LCD \"Greetings\" und \"From SunFounder\" angezeigt.
.. note::
Wenn es kein Problem mit dem Code und der Verkabelung gibt, aber das LCD immer noch keinen Inhalt anzeigt, können Sie versuchen, das Potentiometer auf der Rückseite zu drehen.
**Code**
.. code-block:: c
#include
#include
#include
#include
int LCDAddr = 0x27;
int BLEN = 1;
int fd;
void write_word(int data){
int temp = data;
if ( BLEN == 1 )
temp |= 0x08;
else
temp &= 0xF7;
wiringPiI2CWrite(fd, temp);
}
void send_command(int comm){
int buf;
// Send bit7-4 firstly
buf = comm & 0xF0;
buf |= 0x04; // RS = 0, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Make EN = 0
write_word(buf);
// Send bit3-0 secondly
buf = (comm & 0x0F) << 4;
buf |= 0x04; // RS = 0, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Make EN = 0
write_word(buf);
}
void send_data(int data){
int buf;
// Send bit7-4 firstly
buf = data & 0xF0;
buf |= 0x05; // RS = 1, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Make EN = 0
write_word(buf);
// Send bit3-0 secondly
buf = (data & 0x0F) << 4;
buf |= 0x05; // RS = 1, RW = 0, EN = 1
write_word(buf);
delay(2);
buf &= 0xFB; // Make EN = 0
write_word(buf);
}
void init(){
send_command(0x33); // Must initialize to 8-line mode at first
delay(5);
send_command(0x32); // Then initialize to 4-line mode
delay(5);
send_command(0x28); // 2 Lines & 5*7 dots
delay(5);
send_command(0x0C); // Enable display without cursor
delay(5);
send_command(0x01); // Clear Screen
wiringPiI2CWrite(fd, 0x08);
}
void clear(){
send_command(0x01); //clear Screen
}
void write(int x, int y, char data[]){
int addr, i;
int tmp;
if (x < 0) x = 0;
if (x > 15) x = 15;
if (y < 0) y = 0;
if (y > 1) y = 1;
// Move cursor
addr = 0x80 + 0x40 * y + x;
send_command(addr);
tmp = strlen(data);
for (i = 0; i < tmp; i++){
send_data(data[i]);
}
}
void main(){
fd = wiringPiI2CSetup(LCDAddr);
init();
write(0, 0, "Greetings!");
write(1, 1, "From SunFounder");
}
**Code Erklärung**
.. code-block::
void write_word(int data){……}
void send_command(int comm){……}
void send_data(int data){……}
void init(){……}
void clear(){……}
void write(int x, int y, char data[]){……}
Diese Funktionen werden zur Steuerung des Open Source-Codes I2C LCD1602 verwendet.
Sie ermöglichen die einfache Verwendung von I2C LCD1602.
Unter diesen Funktionen wird ``init()`` zur Initialisierung verwendet,
``clear()`` wird zum Löschen des Bildschirms verwendet,
``write()`` wirdzum Schreiben der angezeigten Elemente verwendet und andere Funktionen unterstützen die obigen Funktionen.
.. code-block:: c
fd = wiringPiI2CSetup(LCDAddr);
Diese Funktion initialisiert das I2C-System mit dem angegebenen Gerätesymbol. Der Prototyp der Funktion:
.. code-block:: c
int wiringPiI2CSetup(int devId);
Parameter devId ist die Adresse des I2C-Geräts. Sie kann über den Befehl i2cdetect (siehe Anhang) ermittelt werden. Die devId des I2C LCD1602 ist im Allgemeinen 0x27.
.. code-block:: c
void write(int x, int y, char data[]){}
In dieser Funktion ist ``data[]`` das Zeichen,
das auf dem LCD gedruckt werden soll,
und die Parameter x und y bestimmen die Druckposition (Zeile y + 1, Spalte x + 1 ist die Startposition des zu druckenden Zeichens).
Für Python-Sprachbenutzer
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Schritt 3: Verzeichnis wechseln.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/python/
Schritt 4: Ausführen.
.. raw:: html
.. code-block::
sudo python3 1.1.7_Lcd1602.py
Nachdem die Kode ausgeführt wurde, werden auf dem LCD \"Greetings\" und \"From SunFounder\" angezeigt.
* Wenn Sie den Fehler ``FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'`` erhalten, müssen Sie sich auf :ref:`i2c_config` beziehen, um I2C zu aktivieren.
* Wenn Sie den Fehler ``ModuleNotFoundError: No module named 'smbus2'`` erhalten, führen Sie bitte ``sudo apt install python3-smbus2`` aus.
* Wenn der Fehler ``OSError: [Errno 121] Remote I/O`` erscheint, bedeutet dies, dass das Modul falsch verdrahtet oder das Modul defekt ist.
* Wenn es kein Problem mit dem Code und der Verkabelung gibt, aber das LCD immer noch keinen Inhalt anzeigt, können Sie versuchen, das Potentiometer auf der Rückseite zu drehen.
**Code**
.. note::
Sie können den folgenden Code **Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen** . Zuvor müssen Sie jedoch zu einem Quellcodepfad wie ``davinci-kit-for-raspberry-pi/python`` gehen.
.. raw:: html
.. code-block:: python
import LCD1602
import time
def setup():
LCD1602.init(0x27, 1) # init(slave address, background light)
LCD1602.write(0, 0, 'Greetings!!')
LCD1602.write(1, 1, 'from SunFounder')
time.sleep(2)
def destroy():
LCD1602.clear()
if __name__ == "__main__":
try:
setup()
except KeyboardInterrupt:
destroy()
**Code Erklärung**
.. code-block:: python
import LCD1602
Diese Datei ist eine Open Source-Datei zur Steuerung von I2C LCD1602. Es ermöglicht uns die einfache Verwendung von I2C LCD1602.
.. code-block:: python
LCD1602.init(0x27, 1)
Die Funktion initialisiert das I2C-System mit dem angegebenen Gerätesymbol. Der erste Parameter ist die Adresse des I2C-Geräts, die mit dem Befehl i2cdetect erkannt werden kann (Einzelheiten siehe Anhang). Die Adresse des I2C LCD1602 lautet im Allgemeinen 0x27.
.. code-block:: python
LCD1602.write(0, 0, 'Greetings!!')
Innerhalb dieser Funktion \'Greetings!!\' ist das Zeichen, das in der Zeile 0 + 1, Spalte 0 + 1 auf dem LCD gedruckt werden soll. Jetzt können Sie \"Greetings! From SunFounder\" auf dem LCD angezeigt.
Phänomen Bild
--------------------------
.. image:: media/image97.jpeg