概要
秋月電子などから販売されている、SO1602有機ELキャラクタディスプレイ(16文字×2列)はキャラクタ表示に便利だし、Arduino や RaspberryPi などで動作させるための実装は、C言語やPythonそれなりにある。それでも、BME280などのI2C経由で操作するセンサーと組み合わせるときには、Adafruit が提供している、CircuitPython のお作法に則って記述するのが見た目統一されている気がする。
なので、SO1602向けに必要なライブラリをCircuitPython風というかAdafruit風に書いて公開してみた。
SO1602の製品情報
秋月電子さんのHPなどに、SO1602を用いたディプレイモジュールの製品やデータシートなどが記載されている。
・ http://akizukidenshi.com/catalog/goods/search.aspx?search=x&keyword=%97L%8B%40%82d%82k%83L%83%83%83%89%83N%83%5E%83f%83B%83X%83v%83%8C%83C%83%82%83W%83%85%81%5B%83%8B%81%40%82P%82U%81%7E%82Q%8Ds&image=%8C%9F%8D%F5
利用方法
ライブラリをクローン
まずは、SO1602 のライブラリをクローンする(名前をAdafruit っぽくしてるが、見た目揃えただけでAdafruit社とは無関係)
% git clone -b v0.1 https://github.com/gdaisukesuzuki/Adafruit_CircuitPython_SO1602
% cd Adafruit_CircuitPython_SO1602
インストール
% python3 setup.py build
% python3 setup.py install
自分の個人的趣味だが、自分はこんな風にビルド&実装してる。
% python3 setup.py bdist_wheel
% sudo pip3 install dist/adafruit_circuitpython_so1602-0.1-py3-none-any.whl -U -V
動作確認
python3 の動作確認はこんな感じ。カタカナも表示可能。
import time
import board
import busio
import adafruit_so1602
# Create library object using our Bus I2C port
i2c = busio.I2C(board.SCL, board.SDA)
SO1602 = adafruit_so1602.Adafruit_SO1602_I2C(i2c)
SO1602.writeLine(str="SO1602ナンダヨ!",line=0,align="left")
SO1602.writeLine(str="ΩΩΩ<ナ、ナンダッテー!?",line=1,align="left")
簡単ですが、メソッドの紹介を
初期化含め動作は CircuitPython っぽくしている。
SO1602 = adafruit_so1602.Adafruit_SO1602_I2C(i2c)
初期化の際に、以下のようにスレーブアドレスを別に設定したりカーソル表示や点滅の有無を設定することも可能。
SO1602 = adafruit_so1602.Adafruit_SO1602_I2C(i2c=i2c, address=0x3c, cursor = True, blink = False)
文字列表示させる場合、 "line"で表示行(0 or 1)、"align"で左右詰めを設定。
SO1602.writeLine(str="SO1602ナンダヨ!",line=0,align="right")
そのほかメソッドは以下のとおり
SO1602.displayOn(cursor = True/False, blink = True/False) #ディスプレイOn
SO1602.displayOff() #ディスプレイOff
SO1602.displayClear() #ディプレイを全消去
SO1602.returnHome() #カーソルをホームに
注意すること
・ 秋月電子からは、SO1602の他にも「XX1602シリーズ」と言うべき、様々なLCDなどのキャラクタディプレイを販売している(SC1602、AQM1602、ACM1602等)。動作検証はしてないが、I2C接続ならスレーブアドレスの設定を変更すれば動くかもしれない。
・SO1602は有機ELなので消費電力が結構大きい(50mA)。そのためなのか? 他I2C接続センサと直列に繋げると、動作不安定になる。なので、そのような使い方をする場合「PCA9306」「PCA9515AD」などを、 I2C バスのリピーターのような形として間に挟むべき。
参考にしたサイト
・ https://github.com/YoutechA320U/RaspberryPi_Python_so1602_lib
@YoutechA320U さん(qiita にアカウントはなさそう・・・)の GitHub 。大いに参考した(つうか基本部分はほぼここのパクリ)
・https://qiita.com/uhey22e/items/14d3e1d95d6ddc90fb2c
@uhey22e さんによる解説。こちらも大いに参考になった。SO1602操作の際のコマンドがほぼ網羅されている。
・ https://www.denshi.club/pc/raspi/raspberry-pilcd.html
電子工作推進プロジェクトさんのブログ(レジスタ操作の参考に。データシート見ればよいけどが、必要な箇所を早くつまみ食いするため)
・ http://akizukidenshi.com/catalog/g/gP-08277/
自分が動作検証に使用した有機ELモジュールの製品紹介(秋月電子)
GitHub
・https://github.com/gdaisukesuzuki/Adafruit_CircuitPython_SO1602