概要
ノリタケ伊勢株式会社のCU20029-T303Cという20文字2行の蛍光表示管(VFD)モジュールを使った実験です。
Arduino UNO R4 WiFiから、日本語(UTF-8)を表示できるようにしてみました。下の写真は、RSSフィードを取得して、その内容を表示させてみたものです。とてもはっきりと表示されています。

動作している様子
データシート
データシートというよりは、コマンドの説明からの推測です。
基本的には、シリアル通信で表示したい文字列を送信すれば、その文字列が表示されます。また、日本語などの表示にも対応しています。
表示可能なコード
このモジュールは、英数字に加え、半角カタカナや漢字(日本語、簡体字、繁体字)、ハングル、を表示することができます。
漢字等の文字コードは以下の通りです。
| 種別 | 文字コード |
|---|---|
| 日本語 | Shift_JIS |
| 簡体字 | GB 2312-80 |
| 繁体字 | Big5 |
| ハングル | KSC-5601-87 |
ピンの役割
各ピンの役割を以下に示します。
| ピン番号 | 信号 | 説明 |
|---|---|---|
| 1 | VCC | 電源入力(DV5V) |
| 2 | VCC | 電源入力(DV5V) |
| 3 | #RESET | 「L」でモジュールリセット |
| 4 | RXD | データ入力(UART) |
| 5 | BUSY | 「L」のときデータ入力可 |
| 6 | GND | グラウンド |
| 7 | GND | グラウンド |
ディップスイッチの設定で、文字セットや通信速度、動作モードを設定します。
| スイッチ番号 | ON | OFF |
|---|---|---|
| 1 | 日本文字セット | 欧州文字セット |
| 4 | テストモード | 通常動作 |
ディップスイッチの2番と3番は、ボーレートの選択に使います。
| SW2 | SW3 | ボーレート |
|---|---|---|
| OFF | OFF | 9600bps |
| ON | OFF | 38400bps |
| OFF | ON | 19200bps |
| ON | ON | 4800bps |
今回は、日本語k文字セット、384000bps、通常動作を選択したので、以下のように設定しました。
| スイッチ番号 | ON/OFF |
|---|---|
| 1 | ON |
| 2 | ON |
| 3 | OFF |
| 4 | OFF |
作成したライブラリも、上記の状態で動作させています。
モード
漢字表示に関するモードが存在します。以下の説明は、推測が入ります。
| モード | 意味 |
|---|---|
| 互換モード | 半角文字のみ表示 |
| 漢字モード | 半角文字以外も表示 |
| 2バイト文字無効 | 漢字モード時 |
| 2バイト文字有効 | 漢字モード時 |
| 日本語漢字表示モード | 2バイト文字有効時 |
| ハングル表示モード | 2バイト文字有効時 |
| 簡体字表示モード | 2バイト文字有効時 |
| 繁体字表示モード | 2バイト文字有効時 |
図にすると以下のようになります。
Arduinoと蛍光表示管(VFD)モジュールとの接続
以下のように接続しました。
| Arduino UNO R4 WiFi | CU20029-T3030C |
|---|---|
| 5V | VCC |
| GND | GND |
| 1 | RXD |
| 8 | #RESET |
| 9 | BUSY |
VFDとの接続に利用するコネクタはPHコネクタです。コードは自分で作成しました。
ソースコード
以下にソースコードを配置しました。
- CU20029-T303C制御用ライブラリ
- 文字コード変換ライブラリ
作成したライブラリの仕様
Arduinoから利用するために、以下のようなライブラリを作成しました。
- CU20029-T303C制御用ライブラリ
- 文字コード変換ライブラリ
- UTF-8→UTF-16
- UTF-16→Shift_JIS
動作確認はArduino UNO R4 WiFiで行いました。他の機種での検証は行っていません。UTF-16をShift_JISに変換するのに変換テーブルを用いています。このテーブルが比較的大きいので、他の機種では動作しない可能性があります。PROGMEMを使えばいいのですが。
CU20029-T303C制御用ライブラリ
以下のAPIを実装しました。LiquidCrystalライブラリに似せて作りました。
garretlab_CU20029T303C
名称
garretlab_CU20029T303C()
説明
garretlab_CU20029T303Cのコンストラクタ。
書式
garretlab_CU20029T303C(HardwareSerial *serial, int resetPin, int busyPin);
引数
| serial | シリアル通信を行うオブジェクト。 |
| resetPin | リセットピン。 |
| busyPin | ビジーピン。 |
戻り値
garretlab_CU20029T303Cオブジェクト。
begin()
名称
garretlab_CU20029T303C::begin()
説明
VFDを開始する。
書式
void garretlab_CU20029T303C::begin(int baudRate);
引数
| baudRate | シリアル通信のボーレート。 |
戻り値
なし。
clear()
名称
garretlab_CU20029T303C::clear()
説明
VFDの表示を消去しカーソルを1行1桁目に移動する。
書式
void garretlab_CU20029T303C::clear();
引数
| なし |
戻り値
なし。
home()
名称
garretlab_CU20029T303C::home()
説明
カーソルを1行1桁目に移動する。
書式
void garretlab_CU20029T303C::home();
引数
| なし |
戻り値
なし。
setCursor()
名称
garretlab_CU20029T303C::setCursor()
説明
カーソル位置を設定する。
書式
void garretlab_CU20029T303C::setCursor(int column, int row);
引数
| column | 列 |
| row | 行 |
戻り値
なし。
write()
名称
garretlab_CU20029T303C::write()
説明
VFDに文字を出力する。
書式
size_t garretlab_CU20029T303C::write(uint8_t c);
size_t garretlab_CU20029T303C::write(uint16_t s);
引数
| c | 出力する文字 |
| s | 出力する文字 |
戻り値
書き込んだ文字数。
print()
名称
garretlab_CU20029T303C::print()
説明
VFDに文字を出力する。
表示モードが漢字モード、かつ、2バイトモードがtrue、かつ、スクリプトがjapaneseの場合は、UTF-8をShift_JISに変換して表示する。
書式
size_t garretlab_CU20029T303C::print(const char s[]);
引数
| s | 出力する文字 |
戻り値
書き込んだ文字数。
cursor()
名称
garretlab_CU20029T303C::cursor()
説明
カーソルを表示する。
表示モードが漢字モード、かつ、2バイトモードがtrue、かつ、スクリプトがjapaneseの場合は、UTF-8をShift_JISに変換し手表示する。
書式
void garretlab_CU20029T303C::cursor(cursorShape_t type);
引数
| type | カーソルの形状。 |
typeは以下の通り。
| 値 | カーソルの形状 |
|---|---|
| garretlab_CU20029T303C::underline | 下線(デフォルト) |
| garretlab_CU20029T303C::block | ブロック |
| garretlab_CU20029T303C::invert | 反転タイプ |
戻り値
書き込んだ文字数。
noCursor()
名称
garretlab_CU20029T303C::noCursor()
説明
カーソルを表示しない。
書式
void garretlab_CU20029T303C::noCursor();
引数
| なし |
戻り値
なし
blink()
名称
garretlab_CU20029T303C::blink()
説明
カーソルを点滅させる。
書式
void garretlab_CU20029T303C::blink();
引数
| なし |
戻り値
なし
display()
名称
garretlab_CU20029T303C::display()
説明
ディスプレイを点灯させる。
書式
void garretlab_CU20029T303C::display();
引数
| なし |
戻り値
なし
autoscroll()
名称
garretlab_CU20029T303C::autoscroll()
説明
右下端まで表示したら表示を左にずらす。
書式
void garretlab_CU20029T303C::autoscroll();
引数
| なし |
戻り値
なし
noDisplay()
名称
garretlab_CU20029T303C::noDisplay()
説明
ディスプレイを消灯させる。
書式
void garretlab_CU20029T303C::noDisplay();
引数
| なし |
戻り値
なし
noAutoscroll()
名称
garretlab_CU20029T303C::noAutoscroll()
説明
文字を右下端まで表示したら、左上端に移動する。
書式
void garretlab_CU20029T303C::noAutoscroll();
引数
| なし |
戻り値
なし
createChar()
名称
garretlab_CU20029T303C::createChar()
説明
ユーザー定義文字を作成する。
書式
void garretlab_CU20029T303C::createChar(uint8_t location, uint8_t charmap[]);
引数
| location | 文字番号。0x20-0xff。 |
| charmap | 7バイトのビットマップデータ。データは下位5ビットが有効。 |
戻り値
なし
createChar15x16()
名称
garretlab_CU20029T303C::createChar15x16()
説明
ユーザー定義文字を作成する。
書式
void garretlab_CU20029T303C::createChar15x16(uint8_t location, uint8_t charmap[]);
引数
| location | 文字番号。0x20-0xff。 |
| charmap | 32バイトのビットマップデータ。データは下位5ビットが有効。 |
戻り値
なし
hardReset()
名称
garretlab_CU20029T303C::hardReset()
説明
ディスプレイをソフトリセットする。
書式
void garretlab_CU20029T303C::hardReset();
引数
| なし |
戻り値
なし
setBrightness()
名称
garretlab_CU20029T303C::setBrightness()
説明
ディスプレイの輝度を設定する。
書式
void garretlab_CU20029T303C::setBrightness(uint8_t setBrightness);
引数
| brightness | 輝度。設定可能な数値は、100、75、50、25。 |
戻り値
なし
softReset()
名称
garretlab_CU20029T303C::softReset()
説明
ディスプレイをソフトリセットする。
書式
void garretlab_CU20029T303C::softReset();
引数
| なし |
戻り値
なし
setCompatibleMode()
名称
garretlab_CU20029T303C::setCompatibleMode()
説明
互換モードにする。
書式
void garretlab_CU20029T303C::setCompatibleMode();
引数
| なし |
戻り値
なし
setKanjiMode()
名称
garretlab_CU20029T303C::setKanjiMode()
説明
漢字モードにする。
書式
void garretlab_CU20029T303C::setKanjiMode();
引数
| なし |
戻り値
なし
disable2ByteMode()
名称
garretlab_CU20029T303C::disable2ByteMode()
説明
2バイト文字を無効にする。
書式
void garretlab_CU20029T303C::disable2ByteMode();
引数
| なし |
戻り値
なし
enable2ByteMode()
名称
garretlab_CU20029T303C::enable2ByteMode()
説明
2バイト文字を有効にする。
書式
void garretlab_CU20029T303C::enable2ByteMode();
引数
| なし |
戻り値
なし
displayJapanese()
名称
garretlab_CU20029T303C::displayJapanese()
説明
日本語の漢字を表示する。
書式
void garretlab_CU20029T303C::displayJapanese();
引数
| なし |
戻り値
なし
displayHangeul()
名称
garretlab_CU20029T303C::displayHangeul()
説明
ハングルを表示する。
書式
void garretlab_CU20029T303C::displayHangeul();
引数
| なし |
戻り値
なし
displaySimplifiedChinese()
名称
garretlab_CU20029T303C::displaySimplifiedChinese()
説明
中国語の漢字(簡体字)を表示する。
書式
void garretlab_CU20029T303C::displaySimplifiedChinese();
引数
| なし |
戻り値
なし
displayTraditionalChinese()
名称
garretlab_CU20029T303C::displayTraditionalChinese()
説明
中国語の漢字(繁体字)を表示する。
書式
void garretlab_CU20029T303C::displayTraditionalChinese();
引数
| なし |
戻り値
なし
displayAsciiThin()
名称
garretlab_CU20029T303C::displayAsciiThin()
説明
漢字モード時のASCII文字を細字表示する。
書式
void garretlab_CU20029T303C::displayAsciiThin();
引数
| なし |
戻り値
なし
displayAsciiThick()
名称
garretlab_CU20029T303C::displayAsciiThick()
説明
漢字モード時のASCII文字を太字表示する。
書式
void garretlab_CU20029T303C::displayAsciiThick();
引数
| なし |
戻り値
なし
文字コード変換ライブラリ
以下のAPIを実装しました。
utf8ToUtf16()
名称
utf8ToUtf16()
説明
UTF8コードをUTF16コードに変換する。
書式
int utf8ToUtf16(const char *utf8, uint16_t *utf16);
引数
| utf8 | UTF8文字コード |
| utf16 | UTF16文字コード |
戻り値
変換したUTF8文字コードのバイト数。エラーの場合は0。
注意
4バイトの文字コードの場合は、0x25a1(□)を返す。
utf16ToSjis()
名称
utf16ToSjis()
説明
UTF16コードをShift_JISコードに変換する。
書式
int utf16ToSjis(uint16_t utf16, uint16_t *sjis);
引数
| utf16 | UTF16文字コード |
| sjis | Shift_JIS文字コード |
戻り値
変換に成功したら1、失敗したら0。
バージョン
| Hardware: | Arduino UNO R4 WiFi |
| Software: | Arduino IDE 2.3.6/Arduino UNO R4 Boards 1.4.1 |
最終更新日
June 17, 2025