Raspberry Pi Picoで液晶ディスプレイモジュール (AQM0802A+ PCA9515)を使う方法

Facebooktwittermail

こんにちは、ツクレルのゆってぃです。今回の記事ではRaspberry Pi Picoで液晶ディスプレイ (Liquid Crystal Display、LCD) を使ってみたいと思います。扱うのは、秋月電子通商より販売しているRaspberry Pi キャラクタ液晶ディスプレイモジュールです。

こちらはI2C対応のLCDモジュールであるAQM0802AをRaspberry Pi向けにモジュール化した製品となっています。

本記事はRaspberry Pi PicoでMicroPythonを使うための初期セットアップが完了していることを前提に書いています。もし手元でも試してみたい時は先にこちらの記事をご覧ください。

Raspberry Pi Picoで最初の一歩、Lチカしてみよう!

回路をつくる

まずはブレッドボード上に回路を作ります。といっても、特に他の電子部品は必要なくディスプレイモジュールとRaspberry Pi Picoをつなぐだけです。

 Pico    -    AQM0802A
  3V3(OUT)    -    3V3
  GND         -    GND
  GP27        -    SCL
  GP26        -    SDA

ディスプレイモジュールはI2Cによって通信を行うため、Raspberry Pi Pico側はピンアウトを確認しつつ、I2Cに対応しているGPIOピンに接続します。以下のPDFが参考になります。

Raspberry Pi Pico Pinout

アドレスを確認する

Raspberry Pi Picoの電源を入れてプログラミングしていきます。はじめにRaspberry Pi Picoがディスプレイモジュールを認識しているか、シリアルコンソールで確認してみましょう。

>>> from machine import Pin, I2C
>>> i2c = I2C(1, scl=Pin(27), sda=Pin(26))
>>> i2c.scan()
[62]

62 (16進数に直すと0x3e) がディスプレイモジュールのスレーブアドレスです。i2c.scan() の結果が空の配列になってしまう時は、Raspberry Pi Picoがディスプレイを認識していない可能性が高いので配線などをチェックします。

ディスプレイを初期化する

次にディスプレイモジュールを使っていくにあたり、表示設定などの初期化をおこないます。以下のデータシートの2ページ目に載っている手順を参考に初期化してみます。

AQM0802A-RN-GBW PDFデータシート

コードが複数行にわたるため、ここからはファイルにコードを書いていきます。

from machine import Pin, I2C
from micropython import const
from utime import sleep
_ST7032  = const(0x3e)
_SETTING = const(0x00)
_DISPLAY = const(0x40)
def init(i2c):
    orders = [b'\x38', b'\x39', b'\x14', b'\x73', b'\x56', b'\x6c',
              b'\x38', b'\x0c', b'\x01']
    sleep(0.04)
    for order in orders[:6]:
        i2c.writeto_mem(_ST7032, _SETTING, order)
        sleep(0.001)
    sleep(0.2)
    for order in orders[6:]:
        i2c.writeto_mem(_ST7032, _SETTING, order)
        sleep(0.001)
    sleep(0.001)
def main():
    i2c = I2C(1, scl=Pin(27), sda=Pin(26))
    init(i2c)
if __name__ == '__main__':
    main()

orders 変数のそれぞれの値を調節することで、カーソルの表示・非表示やコントラストなど、さまざまな設定ができます。

プログラムを実行すると、下図のように薄く四角が表示されていることがわかると思います。初期化に必要な処理は以上です。

文字を表示させる

初期化が終われば、あとは文字を表示させるだけです。表示可能な文字についても先ほどのデータシートに記載があるので参考にしてみてください。

ここではとりあえず「Hello!」と表示させます。ほとんどのコードは同じですが、新しく文字を表示させるために show 関数を追加し、main 関数から呼び出すように変更しました。クラスとして作成しても良いと思います。

from machine import Pin, I2C
from micropython import const
from utime import sleep
_ST7032  = const(0x3e)
_SETTING = const(0x00)
_DISPLAY = const(0x40)
def init(i2c):
    orders = [b'\x38', b'\x39', b'\x14', b'\x73', b'\x56', b'\x6c',
              b'\x38', b'\x0c', b'\x01']
    sleep(0.04)
    for order in orders[:6]:
        i2c.writeto_mem(_ST7032, _SETTING, order)
        sleep(0.001)
    sleep(0.2)
    for order in orders[6:]:
        i2c.writeto_mem(_ST7032, _SETTING, order)
        sleep(0.001)
    sleep(0.001)
def show(i2c, string):
    i2c.writeto_mem(_ST7032, _SETTING, b'\x01')
    sleep(0.002)
    for i in string:
        i2c.writeto_mem(_ST7032, _DISPLAY, i.encode())
def main():
    i2c = I2C(1, scl=Pin(27), sda=Pin(26))
    init(i2c)
    show(i2c, 'Hello!')
if __name__ == '__main__':
    main()

プログラムを実行すると文字の表示が確認できます。show 関数で渡している文字列「Hello!」を変えれば、他の文字も表示させるのも簡単です。

いかがだったでしょうか。 Raspberry Piで扱えるディスプレイモジュールとしては比較的手軽で良いと思います。センサー値など、何か表示させたい時の参考になれば幸いです。

少し試すとわかりますが、本記事で紹介したサンプルコードでは表示させる文字を増やすと改行せずに見切れてしまいます。もう少し遊んでそのあたりも制御できるようにしてみたいと思います。

それではまた!

記事:ゆってぃ
イラスト:ニッチ

Facebooktwitterrssyoutubeinstagram