LCD にテキストを表示する

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

多くの製造元では、20x4 の LCD 文字ディスプレイと一体化された GPIO エキスパンダーが販売されています。 文字ディスプレイを GPIO エキスパンダーに直接接続し、次にそれを Inter-Integrated Circuit (I2C) シリアル プロトコルを介して Raspberry Pi に接続します。

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

前提条件

注意

このチュートリアルは、ターゲット デバイスを 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
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 パッケージを追加します。 プロジェクト ディレクトリまたは Visual Studio から .NET CLI を使用します。

    dotnet add package Iot.Device.Bindings --version 2.2.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 宣言により、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 ループが無期限に実行されます。 それぞれの反復処理で、以下が実行されます。

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

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

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

    ./LcdTutorial
    

    LCD 文字ディスプレイの各行に現在の時刻が表示される様子を観察します。

    ヒント

    ディスプレイは点灯するがテキストが表示されない場合は、ディスプレイの背面でコントラストの目盛りを調整してみてください。

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

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

ソース コードを入手する

このチュートリアルのソースは、GitHub から入手できます

次の手順