RP2040

【ラズピコ】I2CでキャラクタLCDを使う【MicroPython】

投稿日:

秋月電子で購入した RP2040マイコンボード を使って、I2C接続のキャラクタLCD を動かしてみました。

なおこのマイコンボードは純正の Raspberry Pi Pico ではありませんが、同様に扱えるのでラズピコと呼ぶことにします。

使用した LCD はこちらも秋月電子で購入した AQM1602Y-RN-GBW です。

開発には MicroPython を用いましたが、以前に書いた以下の PICマイコン用の C言語のプログラムを移植する形になりました。

【PIC】I2CでLCDに文字を表示する

 

MicroPython の I2C ライブラリ

まずは MicroPython の I2C ライブラリについて調べてみると、公式リファレンスの Raspberry Pi Pico-series Python SDK に以下のような項目がありました。

Example usage:

Default I2C pins

Function Default
I2C Frequency 400,000
I2C0 SCL Pin 9
I2C0 SDA Pin 8
I2C1 SCL Pin 7
I2C1 SDA Pin 6

RP2040 には I2Cモジュールが2つあるようです。今回はI2C0の方を利用してピンはデフォルトのピンを使うことにしました。

I2Cライブラリは machine モジュールを import することで使えるようになります。

詳細は公式ドキュメントを参照してほしいのですが、今回使用した関数だけ軽く紹介します。

I2C.scan()

この関数は接続された I2Cデバイスのアドレスの一覧を表示します。

様々なアドレスに対して送信を行い、応答があるかどうかを調べているようです。開発中にデバイスが生きているかどうかを確認できるので便利です。

I2C.writeto(addrbuf)

I2Cデバイスに対して送信を行う関数です。buf には bytes型 または bytearray型 のオブジェクトを渡します。

bytes型のオブジェクトは以下の方法で作成できます。

  1. bytesリテラル
    文字列リテラルの前に b をつけると bytesリテラルになります。ASCIIコード以外を含めたいときはエスケープシーケンスを使います。
    例: b'abc\xff'
  2. リスト等から変換
    例: bytes([1, 2, 3])
  3. strから変換
    Python の通常の文字列を bytes に変換するには str.encode() を使用します。逆に bytes.decode() で bytes から str に変換することもできます。
    例: 'hello'.encode()

試しにi2c.writeto(0x3e, b'123')を実行してみたときの波形はこのようになってました。

最初にアドレス 0x3E と書き込みを表す 0、続く3バイトに指定した ‘123’ の文字を表すASCIIコードが並んでいます。

なお、最初のアドレスを送信した段階で応答がない場合は、後続のデータは送信しないで終了するようです。

 

LCD制御プログラム

LCDに関するプログラムをクラスにまとめました。

LCDのコマンドや初期化の方法については、【PIC】I2CでLCDに文字を表示する をご覧ください。

 

テストプログラム

作成した Lcd_I2cクラスを用いて実際に LCD にテキストを表示させるプログラムを作りました。

MicroPython だと f-string といった Python の機能が使えてとても便利だと思いました。

 

接続方法

LCD とラズピコを I2C で接続するだけなので非常にシンプルです。

SDA と SCL にプルアップ抵抗をつけるのを忘れないようにだけ注意しましょう。

 

結果

きちんと表示されました。カウンターの値が1秒ごとに更新されるのもちゃんと動いています。

-RP2040

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

関連記事はありませんでした