稼働中

Raspberry Pi Pico(s_11)AQM0802 LCD 用モジュール

AQM0802 AQM0802c.py

AQM0802A-RN-GBWはLCDドライバーST70328搭載の文字2行の小型LCDです。I2C通信で制御します。※詳細はAQM0802A-RN-GBWやST70328のデータシートを参照ください。
Raspberry Pi PicoでAQM0802A-RN-GBWを使う自作の’AQM0802c.py’を作成しました。記事d_14を元に作成しています。
使い方だけを記載します。’AQM0802c.py’は末尾にあります。

使い方

■ ファイル転送
Raspberry Pi Picoへ’AQM0802c.py’を送った後でimportして使います。
※AQM0802c.pyの末尾に、使用例(AQM0802_ex.py)の## example以降をコピペ追加しても動作確認できます。
■ メソッド
‘AT24C32c’をimportすると「aqm_init、aqm_clear、aqm_on、aqm_off、aqm_setCursor、aqm_printStr、」のメソッドが使えるようになります。
a=AQM0802(num=1,sda=10)で初期化します。
num:I2C0、I2C1の番号です。デフォルトは1(I2C1)です。
sda:SDAのGPIO番号です。デフォルトは10(GP10)です。

(01)aqm_init(cur=0x0f)
LCDの初期化をします。
cur:0x0eでcursor=on、0x0fでcursor=on、position=on
(02)aqm_clear()
LCD画面をクリアします。
(03)aqm_on()
Display on にします。
(04)aqm_off()
Display off にします。
(05)aqm_setCursor(byte_x, byte_y)
カーソル位置を設定します。byte_xは列位置、byte_yは行位置です。
(06)aqm_printStr(pr)
文字列を表示します。pr:文字列です。

使用例

AQM0802でLCDに以下の順で文字を表示させます。
カーソル(0,0)から”**test**”を表示
1列2行目にカーソル移動
“ABCDEFGH”を表示
文字消去
**test**を表示
文字0~7を順次点滅表示
文字消去


AQM0802c_ex.py
#!/usr/bin/env python
# -*- coding: utf-8 -*
from machine import I2C,Pin
import time
from AQM0802c import AQM0802
# AQM0802A-RN-GBW  LCD-Driver ST70328
## exapmle -----------------------
a=AQM0802()
# aqm_init(cur) cur off(0x0c) on(0x0e) on-blink(defalt 0x0f)
a.aqm_init(0x0f)
time.sleep(1)
# (0,0) 1列1行目にカーソル移動
a.aqm_setCursor(0,0)
# 文字表示
a.aqm_printStr("**test**")
time.sleep(1)
# (0,1) 1列2行目にカーソル移動
a.aqm_setCursor(0,1)
# 文字表示
a.aqm_printStr("ABCDEFGH")
time.sleep(1)
# 文字データ消去
a.aqm_clear()
# 文字表示
a.aqm_printStr("**test**")
time.sleep(1)
# 0~7順次表示
for i in range(8):
    a.aqm_setCursor(i,1)
    a.aqm_printStr(str(i))
    a.aqm_on()
    time.sleep_ms(500)
    a.aqm_off()
    time.sleep_ms(300)
# 文字データ消去
time.sleep(3)
a.aqm_clear()

実行結果

実行すると以下のようになりました。(動画)

AQM0802モジュール用


AQM0802c.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# AQM0802 8x2 LCDモジュール用
# AQM0802A-RN-GBW  LCD-Driver ST70328
from machine import I2C,Pin
import time
class AQM0802:    
    def __init__(self,num=1,sda=10):
        # AQM0802 slave address
        self.adr_aqm=0x3e
        self.i2c=I2C(num, scl=Pin(sda+1), sda=Pin(sda), freq=100_000)
        #print(adr_aqm)
    # AQM0802の初期化
    def aqm_init(self,cur=0x0f):
        d1=[0x38,0x39,0x14,0x70,0x56,0x6C] # 設定 contrast (OSC 0x14) follower control
        d2=[0x38,cur,0x01]  # disp on cursor=on (0x0e)  cursor-blink(0x0f)
        #d2=[0x38,0x0C,0x01] # disp on cursor=off(0x0c)  何も表示しない
        for i in d1:
            self.lcd_cmd(i)
        for i in d2:
            self.lcd_cmd(i)
        time.sleep_ms(100)
        
    # AQM0802への書込み
    def lcd_cmd(self,value):
        #CO = 0 終,RS = 0 コマンド >> 0b_0000_0000(0x00) 
        buf = bytearray(2)
        buf[0]=0x00 #|Co|RS|0|0|0|0|0|0| CO=0,RS=0 単発の命令
        buf[1]=value
        #print(buf,hex(buf[0]),hex(buf[1]))
        self.i2c.writeto(self.adr_aqm, buf)
        time.sleep_ms(100)

    #---------------------個別の関数 
    #***** 画面クリア 関数
    def aqm_clear(self):
        self.lcd_cmd(0x01) 
    #***** 画面表示Off 関数
    def aqm_off(self):
        self.lcd_cmd(0x08)
    #***** 画面表示On 関数
    def aqm_on(self):
        self.lcd_cmd(0x0C)

    #===== 続き文字表示 補助 
    def lcd_contdata(self,byte_x):
        # CO = 1 続 , RS = 1 データ >> 0b_1100_0000(0xC0) 
        buf = bytearray(2)
        buf[0]=0xC0  #|Co|RS|0|0|0|0|0|0| CO=1,RS=1 連続するデータ
        buf[1]=byte_x
        self.i2c.writeto(self.adr_aqm, buf)

    #===== 最後文字表示 補助 
    def lcd_lastdata(self,byte_x):
        #CO = 0 終, RS = 1 データ >> 0b_0100_0000(0x40) 
        buf = bytearray(2)
        buf[0]=0x40 #|Co|RS|0|0|0|0|0|0| CO=0,RS=1 単発のデータ
        buf[1]=byte_x
        self.i2c.writeto(self.adr_aqm, buf)
    #***** カーソル位置
    def aqm_setCursor(self,byte_x, byte_y):
        a=(0x80 | (byte_y * 0x40 + byte_x))
        self.lcd_cmd(a)
    #***** lcd に文字を表示
    def aqm_printStr(self,pr):
        n=len(pr)
        #print(n)
        for i in range(n-1):
            print(pr[i])
            self.lcd_contdata(ord(pr[i]))
            
        self.lcd_lastdata(ord(pr[n-1]))
        print(pr[n-1])