スキップしてメイン コンテンツに移動

16x2キャラクタ LCDディスプレイモジュール(HD44780コンパチブル)の4ビット操作

 Raspberry Pi Pico Wは小型でパワフルなだけでなく、LEDやセンサー、モーターなど多彩なデバイスを直接ドライブできるのが魅力です。中でも HD44780互換の16×2キャラクタLCD は、値段が手頃で入手しやすく、テキストをすばやく表示できる“定番デバイス”として人気があります。今回は、GPIO本数を節約できる 4ビットパラレルモード を使い、MicroPythonだけで Pico W に接続して文字を表示させる方法を紹介します。電源と数本の信号線を結ぶだけで、温度センサーの読み取り値やデバッグメッセージを手元の液晶にサッと映し出せるようになります。

HD44780コンパチブルとは?

HD44780コンパチブル とは、もともと 日立製のHD44780 というキャラクタ液晶コントローラIC(LCDコントローラ)の仕様や命令セットと互換性のあるディスプレイモジュールを指します。

このコントローラは

  • 最大80文字分の表示メモリ(DDRAM)

  • カーソル制御やスクロール機能

  • 英数字・記号などのフォント(ROM内蔵)

  • 4ビット/8ビットのパラレル通信インターフェース

といった機能を搭載しており、**LCD表示の「業界標準」**として非常に広く使われています。

「HD44780コンパチブル」という表現は、
➡ 他メーカー製であっても HD44780と同じ命令セットと制御方法で動作する 液晶モジュールであることを意味します。

たとえば、AIP31066やST7066UなどはHD44780互換品として知られており、ほぼ同じコードで制御できます。

✅ 要点まとめ

  • HD44780 = キャラクタLCD用の定番コントローラIC

  • コンパチブル = 命令セットや動作が互換の他社製品

  • メリット = ライブラリやサンプルが豊富で扱いやすい

このため、Raspberry Pi PicoやArduinoなどで使うキャラクタLCDの多くは「HD44780コンパチブル」です。

回路

ソースコード

from machine import Pin
from time import sleep, sleep_ms, sleep_us

# LCDピン設定
LCD_RS = Pin(2, Pin.OUT)
LCD_EN = Pin(3, Pin.OUT)
LCD_D4 = Pin(4, Pin.OUT)
LCD_D5 = Pin(5, Pin.OUT)
LCD_D6 = Pin(6, Pin.OUT)
LCD_D7 = Pin(7, Pin.OUT)

def lcd_strobe():
    LCD_EN.value(1)
    sleep_us(1)
    LCD_EN.value(0)
    sleep_us(1)

def lcd_write4bits(value):
    LCD_D4.value((value >> 0) & 0x01)
    LCD_D5.value((value >> 1) & 0x01)
    LCD_D6.value((value >> 2) & 0x01)
    LCD_D7.value((value >> 3) & 0x01)
    lcd_strobe()

def lcd_write(value, rs_mode):
    LCD_RS.value(rs_mode)
    lcd_write4bits(value >> 4)  # 上位4ビット
    lcd_write4bits(value & 0x0F)  # 下位4ビット
    sleep_us(40)

def lcd_command(cmd):
    lcd_write(cmd, 0)

def lcd_putch(ch):
    lcd_write(ord(ch), 1)

def lcd_puts(s):
    for ch in s:
        lcd_putch(ch)

def lcd_clear():
    lcd_command(0x01)
    sleep_ms(2)

def lcd_locate(row, col):
    addr = col + (0x40 if row == 1 else 0x00)
    lcd_command(0x80 | addr)

def lcd_init():
    sleep_ms(15)
    lcd_write4bits(0x03)
    sleep_ms(5)
    lcd_write4bits(0x03)
    sleep_us(150)
    lcd_write4bits(0x03)
    sleep_us(150)
    lcd_write4bits(0x02)
    sleep_us(150)

    lcd_command(0x28)  # 4bit, 2行, 5x8ドット
    lcd_command(0x0C)  # 表示ON, カーソルOFF, 点滅OFF
    lcd_clear()
    lcd_command(0x06)  # エントリーモード:右移動

# ==== 実行部 ====
lcd_init()
lcd_locate(0, 0)
lcd_puts("Hello World!!")

lcd_locate(1, 0)
lcd_puts("RaspberryPIPicoW")


◆処理の流れ

⚙️ GPIO初期化

  Pin クラスで RS/EN/D4–D7 をすべて出力モードに設定し、LCD と接続する準備を整えます。

⏱️ 電源投入後ウェイト

  sleep_ms(15) で電源安定を待機(データシート推奨値)。

🔄 4ビットモードへの切替シーケンス

  0x03 → 0x03 → 0x03 → 0x02 を上位4 bitずつ送り、LCD を 8 bit → 4 bit モードへ遷移させます。

🖥️ 機能設定 (Function Set)

  0x28 = 4bit + 2行表示 + 5×8ドットフォントを確定。

🌟 表示制御 (Display ON/OFF)

  0x0C で表示 ON・カーソル OFF・点滅 OFF を設定。

🧹 ディスプレイクリア

  0x01 を発行し、全表示を消去してカーソルを (0,0) に戻します(約 1.64 ms 待機)。

➡️ エントリモード設定

  0x06 で “文字を書いたらカーソルを右へ” の自動インクリメント動作を有効化。

📍 1 行目にカーソル移動

  lcd_locate(0, 0) でアドレス 0x00 を指定し、先頭へ。

✍️ 「Hello World!!」表示

  1 文字ずつ lcd_putch() でデータを書き込み。

📍 2 行目にカーソル移動

  lcd_locate(1, 0) でアドレス 0x40 を指定(2 行目先頭)。

✍️ 「RaspberryPIPicoW」表示

  同様に文字列を書き込み、スクリプト完了!


コメント

このブログの人気の投稿

Raspberry Pi Pico Wを使ってみよう

   Raspberry Pi Pico W(ラズベリーパイ ピコ ダブリュー) は、英国 Raspberry Pi 財団が 2022 年に発売した Wi-Fi 搭載マイコンボードです。従来の「Raspberry Pi」と聞くと Linux が動くシングルボードコンピュータ(SBC)を思い浮かべがちですが、Pico W は マイクロコントローラ (MCU)に分類され、いわゆる “組み込み開発” を手軽に始められるデバイスです。搭載 MCU はデュアルコア Arm Cortex-M0+(133 MHz 動作)の RP2040 。ここに Infineon 製 CYW43439 チップが追加され、 2.4 GHz IEEE 802.11 b/g/n Wi-Fi(BLE 対応 FW も提供中) が使えるのが最大の特徴です。  開発言語は MicroPython や CircuitPython が真っ先に紹介されることが多いのですが、 公式 Pico SDK を使えば C/C++ でも本格的に開発 できます。SDK は CMake ベースで Windows/macOS/Linux いずれでも利用可能。さらに、Arduino Core RP2040 が整備されたことで Arduino IDE 2.x からも “スケッチ感覚” で書き込みが可能 になりました。したがって、 「まずは Python でサッと試す」 「より高速化や省メモリ化が必要になったら C/C++ へ移行」 といった二段構えの学習ルートが取れるのが魅力です。 メニュー(基礎編) 01. Raspberry Pi Pico Wの開発環境を整える。 02. スイッチで 発光ダイオード(LED) を点灯・消灯させる 03. タイマーで発光ダイオード(LED)を1秒ごとに点滅させる 04. シリアル通信(オウム返し ) 05. シリアル通信(発光ダイオードの点灯・消灯) 06. サーボモーターを動かしてみよう(SG90制御入門) 07. DCモータを動かす(PWM) 08. IRリモートでRGBLED点灯 09. アナログ電圧を測定する(ADCの基本) 10. GPIO割り込み処理 11. リレーを駆動してLEDを制御する 12. DFPlayer で MP3 再生 13. 7 セグ 4 ...

スイッチで発光ダイオード(LED)を点灯・消灯させる

 スイッチを使って発光ダイオード(LED)を制御してみましょう。今回は、スイッチをオンにすると LED が点灯し、オフにすると消灯するように動作させます。もちろん、スイッチと LED を直接接続するのではなく、適切な回路を介して制御します。 1.回路 GPIO16 はデジタル入力として使用し、内部プルアップを有効にします。GPIO15 は出力として設定します。なお、接続には 1kΩ(1キロオーム)の抵抗を使用します。 【ソースコード】 # スイッチで LED を ON / OFF する簡単な例 #   GPIO15 : LED(出力)— LOW で消灯、HIGH で点灯 #   GPIO16 : スイッチ(入力)— 内部プルアップ抵抗を使用 # # ※ 配線例 #   LED のアノード → 1 kΩ 抵抗 → GPIO15 #   LED のカソード → GND #   スイッチ片側   → GPIO16 #   スイッチ反対側 → GND # # ★ 動作 #   スイッチを押す(GPIO16 が LOW)   → LED 点灯 #   スイッチを離す(GPIO16 が HIGH) → LED 消灯 from machine import Pin    # GPIO 制御ライブラリ import utime               # 時間関連(今回は使用しないが拡張用に読み込み) led = Pin ( 15 , Pin.OUT)                 # GPIO15 を出力モードに設定(LED 用) sw   = Pin ( 16 , Pin.IN, Pin.PULL_UP)     # GPIO16 を入力モード+内部プルアップ有効 while True:     if sw. value () == 1 :      # プルアップなので押していないときは 1   ...

シリアル通信(オウム返し)

 Raspberry Pi Pico Wは単体で使うのも便利ですが、パソコンや他のマイコンなど、さまざまな機器と通信できるとさらに活用の幅が広がります。 そこで今回は「シリアル通信」について紹介します。 まずは、パソコンから送られてきたデータをPico Wが受け取り、同じデータをそのままパソコンに送り返す、いわゆる「オウム返し(エコー)」を実装してみましょう。 シリアル通信とは? シリアル通信は、マイコンとパソコンや他の機器がデータを1ビットずつ順番に送受信する通信方式です。Raspberry Pi Pico WではUART(Universal Asynchronous Receiver/Transmitter)というハードウェアを使って実現します。 接続回路  id      TX       RX        baudrate     parity    stopbit  0  GPIO0 GPIO1   9600  なし  1  1  GPIO4 GPIO5   9600  なし  1 今回はUART1(GPIO4:TX、GPIO5:RX)を使用します。 ソースコード例 from machine import UART, Pin # UART1ポートを9600bpsで初期化(ボーレートを指定) sirial = UART ( 1 , 9600 ) # UARTの詳細設定: 9600bps 、データビット8、パリティ無し、ストップビット1で初期化 sirial. init ( 9600 , bits = 8 , parity = None, stop = 1 ) # UARTで文字列を送信する(※MicroPythonではバイト列で送るのが正しいため b '' にしたほうが安全) sirial. write (b 'Hello World \n\r ' )  # 起動時に「Hello World」を送信 # メインループ while True:     # 受信バッファにデータが存在するかチェック     if sirial. any () > 0 : ...