次の方法で共有


LCD にテキストを表示する

LCD文字ディスプレイは、外部モニタを必要とせずに情報を表示するのに役立ちます。 一般的な LCD 文字ディスプレイは GPIO ピンに直接接続できますが、このような方法では最大 10 個の GPIO ピンを使用する必要があります。 デバイスの組み合わせに接続する必要があるシナリオでは、多くの場合、GPIO ヘッダーの多くを文字表示に割り当てるには実用的ではありません。

多くの製造元は、GPIO エキスパンダーが統合された 20 x 4 LCD 文字ディスプレイを販売しています。 文字表示は GPIO エキスパンダーに直接接続され、Inter-Integrated 回線 (I2C) シリアル プロトコルを介して Raspberry Pi に接続されます。

このトピックでは、.NETを使用して、I2C GPIO エキスパンダーを使用して LCD 文字ディスプレイにテキストを表示します。

[前提条件]

  • ARM ベース (ARMv7 以上) シングルボード コンピューター (SBC)
  • I 2 C インターフェイス付き20x 4 LCD 文字ディスプレイ
  • ジャンパー ワイヤ
  • ブレッドボード (省略可能/推奨)
  • Raspberry Pi GPIO ブレークアウト ボード (省略可能/推奨)
  • .NET SDK 10 以降

このチュートリアルは、ターゲット デバイスが Raspberry Pi であることを前提として記述されています。 ただし、このチュートリアルは、Orange Pi、ODROID など、.NETをサポートする Linux ベースの SBC に使用できます。

LCD文字ディスプレイの多くのメーカーがあります。 ほとんどの設計は同一であり、製造元は機能に違いを生じさせてはいけません。 参考までに、このチュートリアルは SunFounder LCD2004を使用して開発されました。

SBC を準備する

次のサービスをサポートするように SBC が構成されていることを確認します。

  • SSH
  • I2C

多くのデバイスでは、追加の構成は必要ありません。 Raspberry Pi の場合は、 コマンドを使用します。 の詳細については、Raspberry Pi のドキュメントを参照してください。

ハードウェアを準備する

次のように、ジャンパー ワイヤを使用して I2C GPIO エキスパンダーの 4 つのピンを Raspberry Pi に接続します。

  • GND をグラウンドに接続
  • 5VへのVCC
  • SDA から SDA (GPIO 2)
  • SCL から SCL (GPIO 3)

必要に応じて、次の図を参照してください。

I2C インターフェース (ディスプレイ背面) Raspberry Pi GPIO
I2C GPIO エキスパンダーを示す文字表示の背面の画像。 Raspberry Pi GPIO ヘッダーのピン配置を示す図。画像提供:Raspberry Pi Foundation。
画像提供:Raspberry Pi Foundation。

ヒント

GPIO ヘッダーへの接続を合理化するには、ブレッドボードと組み合わせた GPIO ブレークアウト ボードをお勧めします。

アプリを作成する

好みの開発環境で次の手順を実行します。

  1. .NET CLI または Visual Studio を使用して、新しい.NETコンソール アプリを作成します。 LcdTutorial という名前を付けます。

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Iot.Device.Bindings パッケージをプロジェクトに追加します。 プロジェクト ディレクトリから .NET CLI または Visual Studio を使用します。

    dotnet package add Iot.Device.Bindings --version 4.1.0
    
  3. 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 宣言では、を呼び出し、パラメーターと パラメーターを使用して新しいを渡すことで、のインスタンスを作成します。 この はI2C バスを表します。 宣言により、オブジェクトが破棄され、ハードウェア リソースが適切に解放されます。

      Warnung

      GPIO エキスパンダーのデバイス アドレスは、製造元が使用するチップによって異なります。 PCF8574を備えた GPIO エキスパンダーはアドレス を使用し、PCF8574A チップを使用する場合は を使用します。 LCD のドキュメントを参照してください。

    • 別の 宣言では、 のインスタンスが作成され、 がコンストラクターに渡されます。 このインスタンスは、GPIO エキスパンダーを表します。

    • 別の 宣言では、表示を表す のインスタンスが作成されます。 GPIO エキスパンダーとの通信に使用する設定を記述する複数のパラメーターがコンストラクターに渡されます。 GPIO エキスパンダーは、 パラメーターとして渡されます。

    • ループは無期限に実行されます。 各イテレーション:

      1. 表示をクリアします。
      2. カーソル位置を現在の行の最初の位置に設定します。
      3. 現在の時刻を現在のカーソル位置のディスプレイに書き込みます。
      4. 現在の行カウンターを反復処理します。
      5. 1000ミリ秒待機します。
  4. アプリをビルドします。 .NET CLI を使用している場合は、dotnet build を実行します。 Visual Studioでビルドするには、Ctrl+Shift+B を押します。

  5. 自己完結型アプリとして SBC にアプリをデプロイします。 手順については、「 .NET アプリを Raspberry Pi にデプロイするを参照してください。 を使用して実行可能ファイルに実行アクセス許可を付与してください。

  6. Raspberry Pi でアプリを実行するには、デプロイ ディレクトリに切り替えて実行可能ファイルを実行します。

    ./LcdTutorial
    

    現在の時刻が各行に表示される様子を、LCD 文字ディスプレイで確認してください。

    ヒント

    ディスプレイが点灯していてもテキストが表示されない場合は、ディスプレイの背面にあるコントラスト ダイヤルを調整してみてください。

  7. CtrlC キーを押してプログラムを終了します。

おめでとうございます! I2C と GPIO エキスパンダーを使用して、LCD にテキストを表示しました。

ソース コードを入手する

このチュートリアルのソースは GitHub で使用できます。

次のステップ

汎用入力/出力を使用して LED を点滅させる方法について説明します