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])