Wyświetlanie tekstu na wyświetlaczu LCD
Wyświetlacze znaków LCD są przydatne do wyświetlania informacji bez konieczności korzystania z monitora zewnętrznego. Typowe wyświetlacze LCD mogą być połączone bezpośrednio z wyprowadzeniami GPIO, ale takie podejście wymaga użycia maksymalnie 10 wyprowadzeń GPIO. W przypadku scenariuszy, które wymagają połączenia z kombinacją urządzeń, poświęcanie tak dużej części nagłówka GPIO do wyświetlania znaków jest często niepraktyczne.
Wielu producentów sprzedaje wyświetlacze LCD 20x4 ze zintegrowanym ekspanderem GPIO. Ekran znaku łączy się bezpośrednio z ekspanderem GPIO, który następnie łączy się z urządzeniem Raspberry Pi za pośrednictwem protokołu szeregowego Inter-Integrated Circuit (I2C).
W tym temacie użyjesz platformy .NET do wyświetlania tekstu na wyświetlaczu znaków LCD przy użyciu rozszerzenia GPIO I2C.
Wymagania wstępne
- Komputer jednowłotowy oparty na usłudze ARM (ARMv7 lub nowszy) (SBC)
- Wyświetlacz lcd 20x4 z interfejsem I2C
- Przewody skoczkowe
- Tablica do chleba (opcjonalnie/zalecana)
- Tablica breakout urządzenia Raspberry Pi GPIO (opcjonalnie/zalecana)
- Zestaw .NET SDK 7 lub nowszy
Uwaga
Ten samouczek został napisany przy założeniu, że urządzenie docelowe to Raspberry Pi. Jednak ten samouczek może być używany dla dowolnego systemu Linux SBC, który obsługuje platformę .NET, taką jak Orange Pi, ODROID i nie tylko.
Uwaga
Istnieje wiele producentów wyświetlaczy znaków LCD. Większość projektów jest identyczna, a producent nie powinien mieć żadnej różnicy w funkcjonalności. Do celów referencyjnych ten samouczek został opracowany za pomocą rozwiązania SunFounder LCD2004.
Przygotowywanie protokołu SBC
Upewnij się, że usługa SBC jest skonfigurowana do obsługi następujących usług:
- Protokół SSH
- I2C
W przypadku wielu urządzeń nie jest wymagana żadna dodatkowa konfiguracja. W przypadku urządzenia Raspberry Pi użyj raspi-config
polecenia . Aby uzyskać więcej informacji na temat raspi-config
usługi , zapoznaj się z dokumentacją urządzenia Raspberry Pi.
Przygotowywanie sprzętu
Użyj przewodów skoczek, aby połączyć cztery piny na ekspanderze I2C GPIO do urządzenia Raspberry Pi w następujący sposób:
- GND do ziemi
- VCC do 5V
- SDA do SDA (GPIO 2)
- Lista SCL do listy SCL (GPIO 3)
W razie potrzeby zapoznaj się z następującymi ilustracjami:
Interfejs I2C (z tyłu ekranu) | Raspberry Pi GPIO |
---|---|
Obraz dzięki uprzejmości Raspberry Pi Foundation. |
Porada
Tablica podziału GPIO w połączeniu z tablicą do chleba zaleca się usprawnić połączenia z nagłówkiem GPIO.
Tworzenie aplikacji
Wykonaj następujące kroki w preferowanym środowisku projektowym:
Utwórz nową aplikację konsolową platformy .NET przy użyciu interfejsu wiersza polecenia platformy .NET lub programu Visual Studio. Nadaj mu nazwę LcdTutorial.
dotnet new console -o LcdTutorial cd LcdTutorial
Dodaj pakiet Iot.Device.Bindings do projektu. Użyj interfejsu wiersza polecenia platformy .NET z katalogu projektu lub programu Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Zastąp zawartość pliku Program.cs następującym kodem:
using System; using System.Device.Gpio; using System.Device.I2c; using System.Threading; using Iot.Device.CharacterLcd; using Iot.Device.Pcx857x; Console.WriteLine("Displaying current time. Press Ctrl+C to end."); using I2cDevice i2c = I2cDevice.Create(new I2cConnectionSettings(1, 0x27)); using var driver = new Pcf8574(i2c); using var lcd = new Lcd2004(registerSelectPin: 0, enablePin: 2, dataPins: new int[] { 4, 5, 6, 7 }, backlightPin: 3, backlightBrightness: 0.1f, readWritePin: 1, controller: new GpioController(PinNumberingScheme.Logical, driver)); int currentLine = 0; while (true) { lcd.Clear(); lcd.SetCursorPosition(0,currentLine); lcd.Write(DateTime.Now.ToShortTimeString()); currentLine = (currentLine == 3) ? 0 : currentLine + 1; Thread.Sleep(1000); }
Powyższy kod ma następujące działanie:
Deklaracja using tworzy wystąpienie
I2cDevice
przez wywołanieI2cDevice.Create
i przekazanie nowegoI2cConnectionSettings
z parametramibusId
ideviceAddress
. Reprezentuje toI2cDevice
magistralę I2C. Deklaracjausing
zapewnia, że obiekt jest usuwany, a zasoby sprzętowe są prawidłowo zwalniane.Ostrzeżenie
Adres urządzenia dla ekspandera GPIO zależy od mikroukładu używanego przez producenta. Rozszerzenia GPIO wyposażone w PCF8574 używają adresu
0x27
, podczas gdy te używające mikroukładów PCF8574A używają0x3F
. Zapoznaj się z dokumentacją lcd.Inna
using
deklaracja tworzy wystąpienie obiektuPcf8574
i przekazuje elementI2cDevice
do konstruktora. To wystąpienie reprezentuje rozszerzenie GPIO.Inna
using
deklaracja tworzy wystąpienie doLcd2004
reprezentowania wyświetlania. Kilka parametrów jest przekazywanych do konstruktora opisującego ustawienia używane do komunikowania się z ekspanderem GPIO. Rozszerzenie GPIO jest przekazywane jakocontroller
parametr.Pętla
while
jest uruchamiana na czas nieokreślony. Każda iteracja:- Czyści ekran.
- Ustawia położenie kursora na pierwsze miejsce w bieżącym wierszu.
- Zapisuje bieżący czas wyświetlania w bieżącym położeniu kursora.
- Iteruje bieżący licznik wierszy.
- Śpi 1000 ms.
Kompilowanie aplikacji. Jeśli używasz interfejsu wiersza polecenia platformy .NET, uruchom polecenie
dotnet build
. Aby skompilować w programie Visual Studio, naciśnij klawisze Ctrl+Shift+B.Wdróż aplikację w SBC jako samodzielną aplikację. Aby uzyskać instrukcje, zobacz Wdrażanie aplikacji .NET na urządzeniach Raspberry Pi. Pamiętaj, aby nadać wykonywalne uprawnienie do wykonywania przy użyciu polecenia
chmod +x
.Uruchom aplikację na urządzeniu Raspberry Pi, przełączając się do katalogu wdrożenia i uruchamiając plik wykonywalny.
./LcdTutorial
Obserwuj wyświetlanie znaku LCD, gdy bieżący czas jest wyświetlany w każdym wierszu.
Porada
Jeśli ekran jest oświetlony, ale nie widzisz żadnego tekstu, spróbuj dostosować tarczę kontrastu z tyłu ekranu.
Zakończ program, naciskając klawisze Ctrl+C.
Gratulacje! Tekst na wyświetlaczu LCD został wyświetlony przy użyciu rozszerzenia I2C i GPIO!
Uzyskiwanie kodu źródłowego
Źródło tego samouczka jest dostępne w usłudze GitHub.