
ラズベリーパイPico W(以後ラズピコ)でLCDキャラクターディスプレイモジュールを使ってみます。
LCDキャラクターディスプレイモジュールとは、文字を表示するための、板のような小さな画面(液晶画面)になります。
※キャラクターというのが文字を意味しています。
文字列は主に半角英数字と記号の一部になりまして、種類によってはカタカナも出力できるものがあるそうです。

今回の説明で使用するLCDキャラクターディスプレイモジュールはLCD1602になりまして、1行あたり16文字で行が2行の計32文字の文字を表示できるものになります。
Freenove I2C IIC LCD 1602 モジュール - Amazon
回路を組んでみます。
| ラズピコ | LCD1602 |
|---|---|
| GND | VSS(GND) |
| VSYS | VDD(VCC) |
| GP0 | SDA |
| GP1 | SCK(SCL) |
※ ラズピコ側のGPIOピンの配置は下記URLのPDFを参考にしてください。
https://datasheets.raspberrypi.com/picow/pico-2-w-pinout.pdf
MicroPythonのコード
※コードの作成と実行はThonnyで行ってください。
import machine
import utime
import sys
class LCD1602:
def __init__(self, i2c, addr=0x27):
self.i2c = i2c
self.addr = addr
# バックライトONフラグ
self.bl = 0x08
utime.sleep_ms(50)
# 4bitモードへの初期化シーケンス
for val in [0x30, 0x30, 0x30, 0x20]:
self._write_half(val)
utime.sleep_ms(5)
self.send_command(0x28) # 2行表示, 5x8ドット
self.send_command(0x0C) # 画面ON, カーソルOFF
self.send_command(0x06) # 文字入力後カーソルを右へ
self.clear()
def _write_half(self, data):
# machine.I2Cでは writeto を使用
buf = bytes([data | self.bl | 0x04])
self.i2c.writeto(self.addr, buf)
utime.sleep_us(500)
buf = bytes([(data & ~0x04) | self.bl])
self.i2c.writeto(self.addr, buf)
utime.sleep_us(500)
def send_command(self, cmd):
self._write_half(cmd & 0xF0)
self._write_half((cmd << 4) & 0xF0)
def send_data(self, data):
self._write_half((data & 0xF0) | 0x01)
self._write_half(((data << 4) & 0xF0) | 0x01)
def clear(self):
self.send_command(0x01)
utime.sleep_ms(2)
def puts(self, s, x=0, y=0):
addr = 0x80 + x + (0x40 if y else 0)
self.send_command(addr)
for char in s:
self.send_data(ord(char))
# --- メイン処理 ---
# I2Cの初期化 (GP0=SDA, GP1=SCL)
i2c = machine.I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=400000)
# インスタンス作成
lcd = LCD1602(i2c, addr=0x27)
# 今回のコードであれば表示を繰り返す必要はないが、一応While Trueで処理しておく
while True:
lcd.clear()
lcd.puts("Python Version:", 0, 0)
# sys.versionは長いので5文字以降は非表示
lcd.puts(sys.version[:5], 0, 1)
utime.sleep(2)