マイクロビットでLCDキャラクターディスプレイを使ってみる


マイクロビットでLCDキャラクターディスプレイモジュールを使ってみます。

LCDキャラクターディスプレイモジュールとは、文字を表示するための、板のような小さな画面(液晶画面)になります。

※キャラクターというのが文字を意味しています。


文字列は主に半角英数字と記号の一部になりまして、種類によってはカタカナも出力できるものがあるそうです。



今回の説明で使用するLCDキャラクターディスプレイモジュールはLCD1602になりまして、1行あたり16文字で行が2行の計32文字の文字を表示できるものになります。

Freenove I2C IIC LCD 1602 モジュール - Amazon


LCD1602ですが、マイクロビットで使用する時に注意点がありまして、5Vの電圧を供給する必要がありますが、マイクロビットで供給できる電圧は3.3Vになり足りません。


この問題を解決するために、



ブレッドボード用5V電源ボードを利用します。

ブレッドボード用5V電源ボード Micro-B版 ヒューズ付き — スイッチサイエンス




回路を組んでみます。



始めに、ジャンパー線で5V電源ボードの + とマイクロビットの3Vを繋ぎ、ボードの - とマイクロビットのGNDを繋ぎます。

5V電源ボード microbit
+ 3V
- GND

上の写真ではマイクロビットとブレットボードを繋ぐ時のコネクタとして、

ブレットボードを使ってみよう




micro:bitブレッドボード変換基板を使用しています。

micro:bitブレッドボード変換基板 — スイッチサイエンス


マイクロビットとLCD1602の接続は下記になります。

LCD1602 microbit
SDA GPIO 20
SCK(SCL) GPIO 19

※購入したLCD1602によってはカッコ内の表記になっていることがあります。

※SDAはSerial Dataの略で、SCK(SCL)はSerial Clockの略になります。


LCD1602と5V電源ボードの接続は下記になります。

LCD1602 5V電源ボード
VSS(GND) -
VDD(VCC) +

※購入したLCD1602によってはカッコ内の表記になっていることがあります。


Fritzingで書くと、


※画像をクリックすると拡大表示にします

※コネクタ(ブレッドボード左)と5V電源ボード(ブレッドボード右)は今回使用したものと異なります


のようになります。




MakeCodeでコードを作成してみます。


コードの作成とフラッシングの前の注意点ですが、フラッシングする前に5V電源ボードにUSBケーブルを繋ぐ(もしくはUSBケーブル経由での送電)ことは行わないようにしてください。


MakeCodeの標準機能でLCD1602に文字列を表示する事は難しいので、拡張機能を利用します。

※ I2C




拡張機能をクリックし、



拡張機能の検索フォームでlcd1602を入力して検索します。



検索結果にいくつか表示されますが、今回は一番シンプルなi2cLCD1602を選択します。



※クリックすると拡大表示します。


LCD initialize with Addressで 39 を指定し、ずっとブロックないでshow stringブロックで16文字以内の半角英数字と記号を入力します。

※ 今回使用しているLCD1602ではアドレスが39(16進数では0x27)の決め打ちになります。


ディスプレイ上に文字列を表示する場合は、先にyの方の値になりますが表示したい行になりまして、行数は0から始まるので、1行目に表示したい場合はxは0になり、2行目に表示したい場合はxは1になります。


xはyで決めた行に対して、何文字目から表示するかを決めます。

y同様、xも0から始まりまして、左端から文字列を表示したければxを0にします。




MicroPythonへの書き換え

from microbit import *

class LCD1602:
    def __init__(self, addr=0x27):
        self.addr = addr
        # バックライトONフラグ (0x00にするとオフ)
        self.bl = 0x08
        sleep(50)
        # 4bitモードへの初期化シーケンス
        for val in [0x30, 0x30, 0x30, 0x20]:
            self._write_half(val)
            sleep(5)
        # 基本設定命令
        self.send_command(0x28) # 2行表示, 5x8ドット
        self.send_command(0x0C) # 画面ON, カーソルOFF
        self.send_command(0x06) # 文字入力後カーソルを右へ
        self.clear()

    def _write_half(self, data):
        # I2Cアダプタ経由で上位4bitを送信し、Enable信号を振る
        i2c.write(self.addr, bytes([data | self.bl | 0x04])) # Enable High
        sleep(1)
        i2c.write(self.addr, bytes([(data & ~0x04) | self.bl])) # Enable Low
        sleep(1)

    def send_command(self, cmd):
        # 命令送信(上位4bit -> 下位4bitの順)
        self._write_half(cmd & 0xF0)
        self._write_half((cmd << 4) & 0xF0)

    def send_data(self, data):
        # データ送信(RSビットを立てる: 0x01)
        self._write_half((data & 0xF0) | 0x01)
        self._write_half(((data << 4) & 0xF0) | 0x01)

    def clear(self):
        self.send_command(0x01)
        sleep(2)

    def puts(self, s, x=0, y=0):
        # 指定した座標(x, y)に文字列を表示
        addr = 0x80 + x + (0x40 if y else 0)
        self.send_command(addr)
        for char in s:
            self.send_data(ord(char))

lcd = LCD1602(addr=0x27)

while True:
    lcd.puts("LCD1602", 0, 0)
    lcd.puts("sound level:"+str(microphone.sound_level())+"  ", 0, 1) 
    sleep(100)
京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
大阪府高槻市でプログラミング教室を開設しています。
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。