PA129249


PA129250


Raspberry PiでI2C(アイ・スクエアド・シー、アイ・アイ・シー)経由で、LCDに文字列を表示してみる。

I2C - Wikipedia


環境

Raspberry Pi 4B 8GB

OS:Raspberry Pi OS 64bit


PA129255


LCD:1602 LCD ディスプレイ(I2Cモジュールが既にハンダ付けされている)

※LCDはliquid crystal display(液晶ディスプレイ)の略

液晶ディスプレイ - Wikipedia


PA129257


I2Cモジュールは写真の右上の黒い基盤のこと。

LCDはピンが多いので、I2Cモジュールをかますことで、I2C経由でデータのやり取りを行えるようになる。




早速、I2Cを使えるようにする。


uart_rasp_cnf_0


Raspberry Piの設定を開き、


rasp_i2c_cnf


I2Cを有効にする。




PA129251


LCDにつけたI2CモジュールにはGND、VCC、SDA(シリアルデータ)とSCL(シリアルクロック)があり、


gpio_pinout_arch


Raspberry Pi Document - Raspberry Pi OS#gpio-and-the-40-pin-headerに従い、


PA129254


Raspberry Piの同じピンと繋げる。

I2CモジュールのVCCには3V3(3.3V)と繋げる。

※SDAやSCLは通信に関する理解が進んだ時に改めて見ることにして、今は詳細には触れない事にする。


全て繋いだ後にターミナルを開いて、下記のコマンドを実行する。

$ i2cdetect -y 1

i2cdetect_result


設定や接続に誤りがなければ、何らかの番号が表示される。

※今回は27




続いて、I2C経由でデータのやりとりをするためのコードの作成だけれども、難しいコードになるので、ライブラリを活用する。

話題に挙げているLCDはOSOYOOのキット内にあったものなので、OSOYOO製のライブラリを活用する。


ファイルの構成は下記のようにする。

.
├── i2clcda.py #OSOYOO製のライブラリ
└── lcd.py

最初にOSOYOOからライブラリを取得する。

$ cd /path/to/dir
wget http://osoyoo.com/driver/i2clcdb.py

i2cdetectのコマンドで27以外の数字が返ってきた場合は、i2clcdb.pyを開き、12行目付近の

I2C_ADDR = 0x27 # I2C device address, if any error, change this address to 0x3f

の0x27の数字を変更する。


続いて、lcd.pyのコードを作成する。

/path/to/dir/lcd.py

import i2clcda as lcd

lcd.lcd_init()
lcd.lcd_string("Hello", lcd.LCD_LINE_1)
lcd.lcd_string("World!", lcd.LCD_LINE_2)

python3 /path/to/dir/lcd.py

作成したコマンドを実行すると、


PA129250


上の写真のように文字列が出力されます。

ターミナルの方でエラーがないのに、ディスプレイの方に何も表示されない場合は、


PA129252


I2Cモジュールの青い箇所(ポテンショメータ)を精密ドライバーで回すと文字列が見えるようになる。