LCD1602で表示
micro:bitの5×5LEDディスプレイは、英数字さらにはアイコンなど表示できますが、1文字に限られるため、計測値などの表示には物足りません。そこでより表示も字数が多い外付けディスプレイが欲しくなるのが人情です。
いろいろなディスプレイがありますが、「キャラクターLCD」という文字表示型のものがマイコンから使えて便利です。中でも16字×2行のタイプ(以下「LCD1602」)が普及していて、micro:bit用にもこのタイプを搭載したボードがオプションメーカーから発売されています(例:Kitronik社「:VIEW text32」)。
本プロジェクトでは、micro:bitに16字×2行LCDを接続し文字を表示してみましょう。
LCD1602をI2CIFを介してmicro:bitに接続し、
英数字を表示しよう
(本ページ作成 2021.05.01)
概要
micro:bitにハードウェアを接続したいとき、まず確認しておきたいのが、拡張機能が提供されているかどうかです。メーカーから提供されている場合もありますが、MakeCodeエディターから検索できるものがより安心です。
MakeCodeエディターを起動し、「設定>拡張機能」に移動し、「LCD1602」で検索すると、いくつか表示されます。
16字×2行のLCDは各社からさまざまな製品が発売されていて接続方法や制御方法もまちまちです。これらの拡張機能の説明を読んでいくと、いずれもmicro:bitとは「I2C」で接続していることなどがわかります。
ただし、micro:bitと同じ3~3.3Vで動作可能なLCDは種類も少なく、大半は5V電圧駆動です。そのため先に紹介した「micro:BreadBoard」や「I2Cレベル変換モジュール」を使います。
準備するもの
まずは、使えそうなLCDモジュールを見つけます。また3Vと5Vの二種の電源とI2Cレベル変換モジュールなども必要です。これらがあると、さまざまな実験で便利なので、この機会にそろえておくと便利です。
Aideepen16x2キャラクターLCD(IF付)
「LCD1602拡張機能」をさらに調べてみると、I2Cのアドレスなどから「PCF8574/PCF8574A」というI2Cパラレル変換チップを使っているものを対象に開発されていることがわかります。実はこのタイプのLCD製品は、「Aliexpress」など海外通販だとよく扱っているようです。ただ海外通販だとハードルも高いので、探してみると次の製品がamazonでも取扱がありました。
LCD表示器とI2Cインターフェース基板のセットで5個組です(他にも使えそうなものがありましたが、レビューとコスパで選びました)。amazonのページでは、LCDモジュールとインターフェースボードが別々になっているようでしたが、半田づけがされているものが届きました(出荷時期により異なるかもしれません)。また届いたもののインターフェースボード部には、写真にあったバックライトLED用のジャンパーがついていませんでしたが、問題なく動きました(他ではジャンパーの抜き差しでLEDのオン/オフ切替です。)
LCD1602
16字×2行のバックライト付LCDディスプレイモジュールで、黄色地に黒文字で表示されます。LCDコントローラーとしてHD44780互換チップを搭載しています。動作電圧は5Vです。
I2Cインターフェースボード
micro:bitからのI2C信号をLCDのパラレル信号に変換するボードです。変換用チップとして「PCF8574(場合によってはPCF8574Aの可能性もあり)」が搭載されています。基板上にはコントラスト調整用の半固定抵抗も載っています。動作電圧は5Vです。
I2Cアドレスは次のようになっています(IC型番をルーペでチェック)。アドレスの切り替えはA0~A2端子の半田ジャンパーで行います。
チップ型番 | 規定値()内は10進数表記 | 設定可能範囲 |
PCF8574 | 0x27(39) | 0x20~0x27(32~39) |
PCF8574A | 0x3F(63) | 0x38~0x3F(56~63) |
今回使用したI2Cインターフェース基板には、プルアップ抵抗が、SDA-Vcc間・SCL-Vcc間に接続されていました。そのため外付けプルアップ抵抗は不用です。他のインターフェース基板を使う場合は回路図やテスターによる実測でご確認下さい。
その他
micro:Breadboard
USB給電により、3V・5V両電源に対応した実験用拡張ボードです。詳細はこちらをご覧ください。
I2C変換モジュール
3V電源動作のmicro:bitと5V電源動作のLCD1602のI2C信号のレベルを変換するためのモジュールです。詳細はこちらをご覧ください。
ジャンパー線など
配線用ジャンパーが必要です。LCDの配線にはこういったものがあると便利です。
ブレッドボード・ジャンパーワイヤー 40*6ピン 10cm
装置の接続
部品等がそろったら装置を組み立てましょう。
回路図
回路図を示します。こちらで紹介しているI2Cレベル変換モジュールとは4本のコードで接続します。今回使用するI2Cインターフェース基板はプルアップ抵抗が既に実装されていましたので、別付け抵抗は不要です。
組立例
配線組立見本です。I2Cは4本の線で配線しますが、ブレッドボード上のI2Cレベル変換モジュールとLCD1602側の端子配列が異なりますので、注意してください。
テストプログラム
動作確認用のプログラムを用意しています。
拡張機能
MakeCodeエディターで「設定>拡張機能」(または「高度なブロック>拡張機能」)で、拡張機能選択画面で「LCD1602」を選択し、次の「Makerbit-lcd1602」を選択します。
MakeCodeエディターの道具箱に「MakerBit>LCD」が追加されます。各ブロックの説明はこちらです。
プログラム例
1行目に「LCD1602 Test」、2行目に「00~99」までカウントアップする数を表示するサンプルプログラムです。
リンク先はこちら(https://makecode.microbit.org/_Jsg0ee5kCRxY)
プログラム説明
「最初だけ」ブロック内
プログラム起動時、LCDのI2Cアドレス設定など初期化を行います。I2Cアドレスは規定値の39(=0x27:16進数表記)を指定しています。変数「kazu」はカウントアップする数を納めます。
「ずっと」ブロック内
「ずっと」ブロック内では、LCDに文字を表示する処理を行います。
1)「LCD1602 Test」文字列を、ポジション1から16字幅で「中央そろえ」で表示
2)「kazu = 」文字列を、ポジション20から表示
3)変数kazuを、ポジション27から2桁「リーディングゼロ付」で表示
4)変数kazu1つ増やし、100になったら0に戻す
この様な処理を繰り返します。LCDの書き換えには300ミリ秒程度かかるので、「一時停止」を入れています。また変数kazuが0に戻るタイミングでバックライトLEDの消灯・点灯を行っています。
実行例
サンプルプログラムを実行しているようすです。
拡張機能の説明
MakerBit>LCDに追加されるブロックです。
LCD1602のI2Cアドレスを設定します。PCF8574の初期値は39(16進数表記0x27)です。
LCDの接続を真偽値で返します。接続の有無で処理を変える条件分岐などで用います。
LCDのバックライトLEDの点灯・消灯を制御します。
LCDに表示されている内容を消去します。
文字列(例:「MakerBit」)を、指定位置(例:「1」)から指定幅(例:「16」)で表示します。
表示位置の指定
position数字横の▽をクリックすると、表示位置指定ダイアログが開きますので、希望する表示位置を設定します。
表示幅
表示する文字幅を指定します。文字数がこの幅より少ない場合は一部がカットされます。
表示スタイル(オプション)
ブロック右端の「+」をクリックすると、表示スタイルリストがあらわれます。右の▽をクリックすると選択リストが表示されます。
「align left」・・・・指定した文字幅範囲で「左寄せ」表示
「align right」・・・指定した文字幅範囲で「右寄せ」表示
「align center」・・指定した文字幅範囲で「中央」表示
「pad with zeros」・・・桁そろえのため数字の前に0表示
まとめ
パソコンのディスプレイに表示できる文字数に比べると、16字×2行という文字数は少ないかもしれませんが、それでもいろいろと表現の可能性が広がります。センサー測定値や計算結果の値を表示すること等に応用できそうです。
単に値を表示することに加え、「わかりやすく表示する」ことは使い手に優しいプログラムといえます。
このサイトでは、LCDを使ったプロジェクトも順次紹介していきます。
オマケ
本ページ以外にもLCDとI2Cインターフェースボードの組み合わせは次のようなものがあります。
keyestudio「スターターキット」付属LCD1602
keyestudio社「micro:bitスターターキット」には拡張ボードやセンサーとあわせて、I2C対応LCD1602モジュールがセットされています。I2CインターフェースにはPCF8574が使用されているので本事例と同じように使用できますが、インターフェース基板上にプルアップ抵抗が載っていないので、別途取り付けが必要です。
LCD2004
こちらは、20字×4行タイプのLCDモジュールです。LCD1602より多くの文字が表示され、本プロジェクトと同じようにI2Cインターフェース基板を使うことができます。
実は本ページはこちらの「LCD2004」を紹介したかったのですが、直前になってmicro:bitの拡張機能のサポートがなくなってしまいました(2021年5月)。そのためmicro:bitでの活用例はお蔵入り状態です。サポートが復活したら改めて紹介します。