MicroPythonを使えば、ESP32シリーズでI²Cデバイスを簡単に制御できます。
今回は、秋月電子などで入手できるAQM1602(I²CキャラクタLCD)を、
ESP32-C6とMicroPythonで動かすための自作ライブラリを紹介します。
このライブラリでは、文字列だけでなく整数(int)・浮動小数点(float)・文字(chr)型のデータも
そのまま表示できます。さらに便利な1行だけをクリアする関数も追加しました。
LCD表示をよりスマートに扱えるようになります。
2025年11月21日複数のライブラリーをi2cバスの競合なしで使えるように一部変更しました。
使用部品と環境
| 項目 | 内容 |
|---|---|
| マイコン | ESP32-C6(例:Seeed XIAO ESP32C6) |
| LCDモジュール | AQM1602(I²C接続タイプ) |
| 開発環境 | MicroPython(Thonny推奨) |
| 通信方式 | ソフトI²C(SoftI2C使用) |
🔌接続例
ソフトi2cを使っていますので、SCL SDA ピンは自由に設定することができ、今回GPI01、GPI00にしました。
| AQM1602端子 | ESP32-C6ピン |
|---|---|
| VDD | 3.3V |
| GND | GND |
| SCL | GPIO1 |
| SDA | GPIO0 |
ライブラリファイル「AQM_D.py」
以下のコードを「AQM_D.py」という名前でESP32-C6に保存します。
これを読み込むことで、LCDを簡単に操作できます。
# AQM_D.py
import time
class AQM1602_Disp:
def __init__(self, i2c,addr=0x3E):
self.i2c = i2c
self.addr = addr
def send(self, data, mode):
"""データ送信(コマンド or データ)"""
self.i2c.writeto(self.addr, bytes([mode]) + bytes([data]))
def lcd_init(self):
"""LCD初期化"""
cmds = [0x38, 0x39, 0x14, 0x70, 0x56, 0x6C]
for c in cmds:
self.send(c, 0x00)
time.sleep_ms(200)
for c in [0x38, 0x0C, 0x01]:
self.send(c, 0x00)
time.sleep_ms(2)
def set_cursor(self, x, y):
"""カーソル位置設定(x:0-15, y:0-1)"""
addr = 0x80 + x + 0x40 * y
self.send(addr, 0x00)
def lcd_print(self, data):
"""文字列・数値などをLCDに表示"""
if isinstance(data, (int, float)):
s = str(data)
elif isinstance(data, str):
s = data
elif isinstance(data, bytes):
s = data.decode()
elif isinstance(data, chr):
s = data
else:
s = str(data)
for ch in s:
self.send(ord(ch), 0x40)
def clear_line(self, y):
"""指定した行(y)をスペースでクリアし、カーソルを行頭に戻す"""
self.set_cursor(0, y)
for _ in range(16): # 16文字LCD用
self.lcd_print(" ")
self.set_cursor(0, y)メインスクリプト例(test_lcd.py)
from AQM_D import AQM1602_Disp
from machine import Pin, SoftI2C
import time
i2c = SoftI2C(scl=Pin(1), sda=Pin(0)) #ソフトi2c作る
AQM = AQM1602_Disp(i2c) #渡す
AQM.lcd_init()
AQM.set_cursor(0, 0)
AQM.lcd_print("Hello LCD!")
AQM.set_cursor(0, 1)
AQM.lcd_print("ESP32-C6 Test")
time.sleep(2)
AQM.clear_line(1) # 2行目をクリア
AQM.lcd_print("Line Cleared!")✅実行結果イメージ
Hello LCD!
Line Cleared!ファイルの配置手順
- ThonnyでESP32-C6を接続
- 「AQM_D.py」をESP32のルートに保存
test_lcd.pyを別名で保存して実行- LCDに文字が表示されれば成功!
関数のまとめ
| 関数名 | 説明 |
|---|---|
lcd_init() | LCDを初期化 |
set_cursor(x, y) | カーソル位置を指定 |
lcd_print(data) | 文字列・数値を表示 |
clear_line(y) | 指定した行を消去し行頭に戻す |
🧩応用アイデア
- センサー値(温度・湿度など)を定期的にLCDに表示
clear_line()を使って数値部分だけ更新- I²Cバス共有で、BME280やRTCと同時使用も可能
🏁まとめ
ESP32-C6とMicroPythonを組み合わせると、
I²C接続のLCDモジュールをシンプルなコードで扱うことができます。
今回の「AQM1602_Disp」クラスは、数値や文字列を簡単に表示できるだけでなく、
便利な**1行クリア関数 clear_line()**で更新制御もスムーズになりました。
このように自分専用の小さなライブラリを作ることで、
プロジェクトの再利用性や開発スピードが大幅に向上します。
ぜひ、あなたのESP32開発にも取り入れてみてください。



