LCD 文字ディスプレイは、外部モニターを必要とせずに情報を表示する場合に便利です。 一般的な LCD 文字ディスプレイは GPIO ピンに直接接続できますが、そのような方法では最大 10 個の GPIO ピンを使用する必要があります。 複数のデバイスの組み合わせに接続する必要があるシナリオでは、多くの場合、文字ディスプレイにそれほど多くの GPIO ヘッダーを充てるのは実用的ではありません。
多くの製造元では、20x4 の LCD 文字ディスプレイと一体化された GPIO エキスパンダーが販売されています。 文字ディスプレイを GPIO エキスパンダーに直接接続し、次にそれを Inter-Integrated Circuit (I2C) シリアル プロトコルを介して Raspberry Pi に接続します。
このトピックでは、.NET を使用して、I2C GPIO エキスパンダーを使用した LCD 文字ディスプレイにテキストを表示します。
前提条件
- ARM ベース (ARMv7 以降) シングルボード コンピューター (SBC)
- I2C インターフェイスを備えた 20x4 の LCD 文字ディスプレイ
- ジャンパー ワイヤ
- ブレッドボード (省略可能、推奨)
- Raspberry Pi GPIO ブレークアウト基板 (省略可能、推奨)
- .NET SDK 7 以降
注意
このチュートリアルは、ターゲット デバイスを Raspberry Pi と想定して記述されています。 ただし、このチュートリアルは、Orange Pi や ODROID など、.NET をサポートしているあらゆる Linux ベースの SBC に利用できます。
注意
LCD 文字ディスプレイの製造元は多数あります。 ほとんどの設計は同一であり、製造元が異なる機能を用意することはないはずです。 参考までに、このチュートリアルは SunFounder LCD2004 を使用して作成されました。
SBC の準備
次のサービスがサポートされるように SBC を必ず構成してください。
- SSH
- I2C
大抵のデバイスでは、追加の構成を必要としません。 Raspberry Pi については、raspi-config コマンドを使用します。
raspi-config の詳細については、Raspberry Pi のドキュメントを参照してください。
ハードウェアを準備する
ジャンパー ワイヤを使用して、次のように I2C GPIO エキスパンダーの 4 つのピンを Raspberry Pi に接続します。
- GND からグラウンドへ
- VCC から 5V へ
- SDA から SDA (GPIO 2) へ
- SCL から SCL (GPIO 3) へ
必要に応じて、次の図を参照してください。
| I2C インターフェイス (ディスプレイの背面) | Raspberry Pi GPIO |
|---|---|
|
|
画像提供: Raspberry Pi Foundation。 |
ヒント
GPIO ヘッダーへの接続を効率化するには、ブレッドボードと組み合わせた GPIO ブレークアウト ボードを使用することをお勧めします。
アプリを作成する
お好みの開発環境で、次の手順を実行します。
.NET CLI または Visual Studio を使用して、新しい .NET コンソール アプリを作成します。 「LcdTutorial」という名前を指定します。
dotnet new console -o LcdTutorial cd LcdTutorialプロジェクトに Iot.Device.Bindings パッケージを追加します。 プロジェクト ディレクトリまたは Visual Studio から .NET CLI を使用します。
dotnet add package Iot.Device.Bindings --version 2.2.0-*Program.cs の内容を次のコードで置き換えます。
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); }上のコードでは以下の操作が行われます。
using 宣言により、
I2cDevice.Createを呼び出してbusIdおよびdeviceAddressパラメーターと共に新しいI2cConnectionSettingsを渡すことによって、I2cDeviceのインスタンスが作成されます。 このI2cDeviceは、I2C バスを表しています。 このusing宣言により、オブジェクトが破棄され、ハードウェア リソースが適切に解放されます。警告
GPIO エキスパンダーのデバイス アドレスは、製造元によって使用されるチップによって異なります。 PCF8574 を備えた GPIO エキスパンダーではアドレス
0x27が使用されます。一方、PCF8574A チップを使用するものの場合は0x3Fが使用されます。 使用する LCD のドキュメントを参照してください。別の
using宣言では、Pcf8574のインスタンスが作成され、コンストラクターにI2cDeviceが渡されます。 このインスタンスは、GPIO エキスパンダーを表しています。別の
using宣言によって、ディスプレイを表すLcd2004のインスタンスが作成されます。 いくつかのパラメーターがコンストラクターに渡され、GPIO エキスパンダーとの通信に使用する設定が記述されています。 GPIO エキスパンダーはcontrollerパラメーターとして渡されています。whileループが無期限に実行されます。 それぞれの反復処理で、以下が実行されます。- ディスプレイをクリアします。
- カーソル位置を、現在の行の最初の位置に設定します。
- ディスプレイの現在のカーソル位置に、現在時刻を書き込みます。
- 現在の行カウンターを反復処理します。
- 1000 ミリ秒スリープします。
アプリをビルドします。 .NET CLI を使用している場合は、
dotnet buildを実行します。 Visual Studio でビルドするには、Ctrl+Shift+B キーを押します。アプリを自己完結型アプリとして SBC にデプロイします。 手順については、「Raspberry Pi への .NET アプリのデプロイ」を参照してください。
chmod +xを使用して実行可能ファイルの 実行 アクセス許可を指定してください。配置ディレクトリに切り替え、実行可能ファイルを実行することで、Raspberry Pi でアプリを実行します。
./LcdTutorialLCD 文字ディスプレイの各行に現在の時刻が表示される様子を観察します。
ヒント
ディスプレイは点灯するがテキストが表示されない場合は、ディスプレイの背面でコントラストの目盛りを調整してみてください。
Ctrl+C キーを押してプログラムを終了します。
おめでとうございます。 I2C と GPIO エキスパンダーを使用して、LCD にテキストを表示することができました。
ソース コードを入手する
このチュートリアルのソースは、GitHub から入手できます。
次の手順
.NET