こんにちは! けい(Twitter)です。
今回は、Raspberry Pi PicoでI2C接続のLCDディスプレイを使う方法についてまとめていきたいと思います。
目次
必要な物
ラズピコ
LCDディスプレイ(16×2)
LCDディスプレイは複数の種類ありますが、Arduinoなどで一般的に使われることの多い、16×2のLCDディスプレイを使用します。
その他
下準備
MicroPythonの環境構築
MicroPythonを使用しますので、MicroPythonの環境構築が必要です。
当ブログでも以前の記事で紹介していますので、ラズパイを使っての環境構築は参考にしてみてください。
ライブラリのダウンロード
LCDディスプレイのI2C接続のプログラムを書こうと思うと、結構大変です。
しかもMicroPython用のプログラムを作成している方がgithubで公開してくれているので、そちらをありがたく使わせて頂きます。url
また、Thonny IDEを使ってラズパイからRaspberry Pi Picoにプログラムを書きこむ前提で進めていきます。
勿論、windowsおよびMacでも大丈夫です。
githubからダウンロード
ラズパイでターミナルを開きます。
~/Downloads/に保存したいので、cdコマンドで移動します。
$ cd ~/Downloads/
次に、git clone コマンドでgithubリポジトリからダウンロードします。
$ git clone https://github.com/dhylands/python_lcd.git
これで、~/Downloads/に「python_lcd」というフォルダが作成されます。
ラズピコへプログラムを書きこみ
ライブラリのダウンロードが完了したので、次はラズピコに必要なpythonファイルをセーブしましょう。
まず、Thonny IDEを開きます。
次に、「Open」をクリックします。
先ほどダウンロードしたフォルダ、「~/Downloads/python_lcd/lcd」まで移動します。
そうすると、下の画像のようにいくつかのプログラムがあると思います。
その中で赤枠で囲った部分、「esp8266_i2c_lcd.py」,「lcd_api.py」が必要なプログラムなのでそれらを選択して、プログラムを開きます。
プログラムを開けたら、ラズピコにプログラムをセーブしていきます。
「File→Save as」をクリックします。
「MicroPython device」をクリックします。
ファイル名は、それぞれ「esp8266_i2c_lcd.py」,「lcd_api.py」としました。(ここは変えていません)
これでラズピコへのプログラムの書き込みは完了です。
回路図
4本の線を繋ぐだけですが、一応のせておきます。
今回使うLCDモジュールは5V駆動なので、VBUSに繋ぎます。
I2Cアドレスの確認
ラズピコとの配線が完了したら、接続もできているかの確認も兼ねてI2Cアドレスの確認をしていきましょう。
import machine
sda=machine.Pin(0)
scl=machine.Pin(1)
i2c=machine.I2C(0,sda=sda, scl=scl, freq=400000)
print(i2c.scan())
このコードを実行すると、接続が出来ていると数字が画面に出力されます。
接続が出来ていない場合、[]が出力されます。
今回の私の場合、LCDのアドレスは39でした。
つまり、16進数に換算したアドレスは0x27です。
基本的にアドレスは16進数で用いるので、プログラム中では0x27を使用します。
メインプログラム
ライブライの準備は整ったので、それを用いてプログラムを書いていきましょう。
「I2C_ADDR」は先ほど確認した0x27とします。
import time
import machine
from esp8266_i2c_lcd import I2cLcd
I2C_ADDR = 0x27
sda = machine.Pin(0)
scl = machine.Pin(1)
# I2C start
i2c = machine.I2C(0,sda=sda, scl=scl, freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
lcd.putstr("It Works!\nSecond Line")
time.sleep(3)
lcd.clear()
time.sleep(3)
lcd.putstr("Hello\nI'm METAELE")
プログラム解説
基本的にLCDの出力に必要な大事なコードはこの2つです。
- lcd.putstr()
- lcd.clear()
putstrの中に文字列を渡すことで、その文字を画面に出力できます。
文字列の”\n”の部分で2行目に改行できます。
また、clearで画面に出力された文字を消すことができます。
実行結果(動画)
プログラムを実行した様子を動画にしました。