自動車エンジニアのアップデート

自動車エンジニアのアップデート

自動車部品メーカー勤務ソフトエンジニアの情報発信ブログ

~ 車載 ソフト エンジニア の 情報発信 ブログ ~

Raspberry Pi 4 & Python で I2C LCD Display を動かしてみる

f:id:Vefortec:20200517152559p:plain

ラズパイ4で遊びながらPythonを勉強していきます。
勉強と言ってもとりあえず、サンプルで付属していたコードを読み解いて、動かすだけです。最初は、他人のコード見てみる→真似するでも十分プログラミングの勉強にはなりますよね。

初歩過ぎてラズパイ4でやった記事をみかけませんでした(笑)
そういう意味でも、自分の記録用として残します。

 今回の題材:I2C LCD Display

既にご紹介済みの電子工作キットに付属していた『I2C LCD Display』を利用します。

 最終的には、こんな感じに表示されます。

f:id:Vefortec:20200517091107j:plain

配線

4端子 接続します。

  • VCC
  • GND
  • SDA1
  • SCL1

配線は、至ってシンプル簡単です。
端子名は、付属してるGPIO拡張ボードに書いてあるので、よく確認して接続しましょう。
一応安全のため、電源切れた状態で接続することをおススメします。

 

ラズパイ環境設定

I2C通信の有効化

ターミナルで設定する記事を見かけました。今回はGUI上からでもできたのでそちらを紹介します。
RaspberryPiの設定を起動し、インターフェスのタブにある、I2Cを有効にします。
[RapberryPiの設定]

f:id:Vefortec:20200517142600p:plain

[インタフェース-I2C]

f:id:Vefortec:20200517142632p:plain

 ライブラリのインストール

既に最新版がインストール済みかもしれませんが、念のため、ターミナルで次のコマンドを実行し、インストールされていることを確認しました。

sudo apt-get install -y python-smbus i2c-tools

I2C通信のアドレス確認/接続確認

I2C通信で利用されているアドレスを確認します。
ターミナルで下記コマンドを実行し、確認できました。( 最後 1ではなく、0を指定するパターンもあるそうです)

sudo i2cdetect -y 1

実行後に下記のように表示され、番号が表示されているところが利用するアドレスとなるようです。「0x27」でした。ハードによって違うことがあるみたいなので自分で確認しましょう。
[実行結果]

f:id:Vefortec:20200517143544p:plain

Pythonコードの確認

付属するディスクにPythonソースコードが有りましたので、こちらを使います。

ファイル名:i2c1602.py

ソースコードを見ていくとこんな感じ。

#定数定義
#・・・

#I2Cインタフェースオープン

def LCD初期化関数():
  #初期化コマンド1
  #初期化コマンド2
  #左寄せに設定
  #カーソル表示なし・点滅なし設定
  #4bit 2Line設定
  #ディスプレイクリアコマンド

def LCDバイトデータ送信関数(1byteデータ, モード):
  #1byteデータから上位4ビットを抽出し、モードを設定する
  #1byteデータから下位4ビットを抽出し、モードを設定する
  #上位4bitを書込み
  #LCD送信データ確定関数(上位4ビット)
  #下位4bitを書込み
  #LCD送信データ確定関数(下位4ビット)

def LCD送信データ確定関数(送信データ):
  #0.0005sディレイ
  #送信データ+ENABLE High 書き込み
  #0.0005sディレイ
  #送信データ+ENABLE Low書き込み
  #0.005sディレイ

def LCD表示文字列設定関数(メッセージ, 表示行):
  #入力メッセージ左寄せにして、16バイト長にし、空きはスペースで埋める
  #LCDバイトデータ送信関数(表示行, コマンドモード)
  #16バイト分ループ
    #LCDバイトデータ送信関数(メッセージXバイト目, 文字モード)

def main():
  #LCD初期化関数 呼び出し
  #無限ループ:
    #LCD表示文字列設定関数("表示したい文字列1", 1行目)
    #LCD表示文字列設定関数("表示したい文字列2", 2行目)
    #3s待機

    #LCD表示文字列設定関数("表示したい文字列3", 1行目)
    #LCD表示文字列設定関数("表示したい文字列4", 2行目)
    #3s待機

if __name__ == '__main__':
  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    #ディスプレイクリアコマンド

LCDのコマンドは、下記を参考にさせていただきました。
https://mil.ufl.edu/3744/docs/lcdmanual/commands.html
まだまだ簡単なので読みやすいですねぇ。

ソースコードは、コンソールで下記を実行することで、ほぼ同様のソースコードが入手できるようです。

wget http://osoyoo.com/driver/i2clcda.py

 

注意点としては、定数定義部分を書き換えることです。
「I2C_ADDR = 0x3F」の部分を事前に調べたI2C通信アドレスに書き換えましょう。
私の場合、0x27になります。

 

おまけ

日付と現在時刻表示してみました。
Pythonでの日付・時刻の扱い、型変換もついでに勉強できた。


RaspberryPi4 LCDディスプレイ動作確認