AE-AQM1602AをMicroPythonで動かす

AQM1602をマイクロPythonで動かす

小型液晶表示AQM1602は、ピッチを変換する基板付きで秋月電子通商から、780円で販売されていて、i2c接続で手軽に使えます。
今回はそのAQM1602をマイクロ パイソンを使って、文字(カタカナ含む)を表示させてみました。
AQM1602の細かい仕様はよくわかりませんので、仕様の説明は省きますが、秋月さんの仕様書通りにプログラムすれば大丈夫でした。また前回の(投稿有機LEDSO1602)と使い方はあまり変わりませんので、そちらも参考にしてください。
これにより マイクロ Python が使えるコンピューター 、例えばラズベリーパイ ピコ、Seeed XIAOなどなどでAQM1602が使えます。

i2c設定

まずi2cの設定をします。
マイクロパイソンのi2c仕様はこちらのサイトに詳しく書いてあります、参考にしてください。
ラズベリーパイの時

from machine import Pin, I2C
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=200000)

今回sclはピン1番、sdaはピン0、freqは200khにしました。
プルアップ抵抗は必要ありません。

Seeed Studio XIAO の時

from machine import Pin, I2C
i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=200000)

sclはピン7番、sdaはピン6、freqは200khにしました。

各種設定

設定値
adrAQM1602 = 0x3E   #スレーブアドレス(デフォルト)
datAQM1602 = 0x40   #データ書き込み定数
comAQM1602 = 0x00  #コマンド書き込み定数
データ書き込み
コマンド書き込み

def writeDatAQM1602(dat):         #データ書き込み関数
    i2c.writeto_mem(adrAQM1602, datAQM1602, bytes([dat & 0xFF]))
def writeComAQM1602(com):       #コマンド書き込み関数
    i2c.writeto_mem(adrAQM1602, comAQM1602, bytes([com & 0xFF])) 

プログラム

秋月電子のアルディーノのプログラムを参考にプログラムしてみました。
表示は半角英数字、全角カタカナを入力すると、LCDに数字とアルファベットとカタカナが表示されます。

import time
from machine import Pin, I2C
i2c = I2C(0, scl=Pin(1), sda=Pin(0), freq=200000)
adrAQM1602 = 0x3E
datAQM1602 = 0x40
comAQM1602 = 0x00
kana={"ア":177,"イ":178,"ウ":179,"エ":180,"オ":181,
    "カ":182,"キ":183,"ク":184,"ケ":185,"コ":186,
    "サ":187,"シ":188,"ス":189,"セ":190,"ソ":191,
    "タ":192,"チ":193,"ツ":194,"テ":195,"ト":196,
    "ナ":197,"二":198,"ヌ":199,"ネ":200,"ノ":201,
    "ハ":202,"ヒ":203,"フ":204,"ヘ":205,"ホ":206,
    "マ":207,"ミ":208,"ム":209,"メ":210,"モ":211,
    "ヤ":212,"ユ":213,"ヨ":214,"ラ":215,"リ":216,
    "ル":217,"レ":218,"ロ":219,"ワ":230,"ン":231,
    "゜":242,"゛":241," ":32,"”":241,"“":241,
    }
def writeDataAQM1602(dat):
    i2c.writeto_mem(adrAQM1602, datAQM1602, bytes([dat & 0xFF]))
    time.sleep_ms(1)
def writeComAQM1602(com):
    i2c.writeto_mem(adrAQM1602, comAQM1602, bytes([com & 0xFF]))
    time.sleep_ms(1)
def initAQM1602():
    time.sleep_ms(100)
    writeComAQM1602(0x38)
    time.sleep_ms(20)
    writeComAQM1602(0x39)
    time.sleep_ms(20)
    writeComAQM1602(0x14)
    time.sleep_ms(20)
    writeComAQM1602(0x70)
    time.sleep_ms(20)
    writeComAQM1602(0x56)
    time.sleep_ms(20)
    writeComAQM1602(0x6C)
    time.sleep_ms(20)
    writeComAQM1602(0x38)
    time.sleep_ms(20)
    writeComAQM1602(0x01)
    time.sleep_ms(20)
    writeComAQM1602(0x0C)
    time.sleep_ms(20)
def clearAQM():
    writeComAQM1602(0x38)
    time.sleep_ms(20)
    writeComAQM1602(0x01)
    time.sleep_ms(20)
def clear_line(LL):
    if LL == 0:
        writeComAQM1602(0x80)
    else:
        writeComAQM1602(0xC0)
    for idx in range(0, 16):
        writeDatAQM1602(2)
def print_AQM1602(L,da):
    if type(da) is int :
        da=str(da)
    ab=len(da)
    for i in range(16-ab):
        da+=" "
    if L == 0:
        writeComAQM1602(0X80)
    else:
        writeComAQM1602(0Xc0)
    for i in da:
        if ord(i) >= 8221:
            writeDataAQM1602(kana[i])
        else:
            writeDataAQM1602(ord(i))
initAQM1602()
print_AQM1602(0,123456789)
print_AQM1602(1,"アイウエオ ラス゛ヒ゜コ"+"1234")

簡単にプログラムを解説します。
def initAQM1602(): AQM1602をイニシャライズする関数です、初めに必ず実行してください。
def clearAQM(): 画面をクリアーしますが、イニシャライズすればいいので必要ないかもしれません。
def clear_line(LL): 行を指定して画面クリアーしますが、今回の書き込み関数は、ラインごとにすべての文字がクリアーされて書き込まれるので、必要ないかもしれません。
def print_AQM1602(L,da): パラメータが2つあります。
Lの部分は行を指定します、0で1行目、それ以外は2行目になります、例えば3を入れても2行目になります。
daのパラメータは数字、または文字列になります。
文字列は半角英数、全角カタカナになります、全角スペースも受け付けます。
カタカナの濁音と破裂音
カナ辞書データを増やせばもっと簡単に表示できますが、面倒でしたので、簡易的に表示させました。

例えば濁音、ダ、の表示の場合カタカナの タ + ゛2文字で表します。
濁点の ゛部分は漢字入力モードで、シフトキーと数字の2を押して、次にシフトキー押したままスペースキーを押して、全角記号゛を選びます。

破裂音の場合も パ の表示 パ + ゜2文字で表します゜の部分は漢字入力モードで、シフトキーと数字の7を押して、次にシフトキー押したままスペースキーを押して、全角記号゜を選びます。
この部分は厳密にチェックしていないのでエラーが出るかもしれません。

結果です

色々改良する部分があると思いますが、動きました。
これはラズパイPicoで動かしましたので、Seeed Studio XIAOの時は
i2c設定の部分を変更してください。
プログラム自体難しくないと思います。
皆さんも、もっと良いプログラム方法があると思いますので、使いやすく改良してみてください。

タイトルとURLをコピーしました