Raspberry PiでI2C(アイ・スクエアド・シー、アイ・アイ・シー)経由で、LCDに文字列を表示してみる。
環境
Raspberry Pi 4B 8GB
OS:Raspberry Pi OS 64bit
LCD:1602 LCD ディスプレイ(I2Cモジュールが既にハンダ付けされている)
※LCDはliquid crystal display(液晶ディスプレイ)の略
I2Cモジュールは写真の右上の黒い基盤のこと。
LCDはピンが多いので、I2Cモジュールをかますことで、I2C経由でデータのやり取りを行えるようになる。
早速、I2Cを使えるようにする。
Raspberry Piの設定を開き、
I2Cを有効にする。
LCDにつけたI2CモジュールにはGND、VCC、SDA(シリアルデータ)とSCL(シリアルクロック)があり、
Raspberry Pi Document - Raspberry Pi OS#gpio-and-the-40-pin-headerに従い、
Raspberry Piの同じピンと繋げる。
I2CモジュールのVCCには3V3(3.3V)と繋げる。
※SDAやSCLは通信に関する理解が進んだ時に改めて見ることにして、今は詳細には触れない事にする。
全て繋いだ後にターミナルを開いて、下記のコマンドを実行する。
$ i2cdetect -y 1
設定や接続に誤りがなければ、何らかの番号が表示される。
※今回は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
作成したコマンドを実行すると、
上の写真のように文字列が出力されます。
ターミナルの方でエラーがないのに、ディスプレイの方に何も表示されない場合は、
I2Cモジュールの青い箇所(ポテンショメータ)を精密ドライバーで回すと文字列が見えるようになる。