RP2040

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

投稿日:2024-08-27 更新日:

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

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

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

開発にはMicroPythonを用いましたが、以前に書いた以下のPICマイコン用のC言語のプログラムを移植する形になりました。https://rikeden.net/?p=81

 

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

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

CAPTCHA


関連記事

【Pico W】QR Clock ver.2を作ってみた【ハード編】

以前にマイクロQRコードで時刻を表示する時計を作ったのですが(記事書いてなかった)、スマホ標準のQRコード読み取り機能ではマイクロQRコードに対応していなくて、展示会でお客さんに読み取って貰えないとい …

【Pico W】QR Clock ver.2を作ってみた【ソフト編】

前回の記事でQR Clock ver.2のハードウェアを紹介しました。今回はソフトウェアについて紹介していきます。 マイコンにはRaspberry Pi Pico Wを使用しています。ピン数が多いこと …