コンテンツにスキップ
ショップ

LCDに文字を表示する(AVR+USB-C)

いつものAIとセットアップ

Gemini・その他のAI

質問文をコピーして、いつものAIに貼り付け。キットの確認から動作確認まで、一つずつ進められます。

Geminiを開く

質問文をコピーして、Geminiの入力欄に貼り付けてください。

質問文を確認

AP01B(AVR MCU)、AI04A(LCD)、AZ01C(USB-C)を使って、LCDの1行目に Hello!、2行目に Leafony を表示します。AI04Aは8桁×2行なので、各行の文字列は8文字以内にします。

Hello!
Leafony
用意するもの役割
AP01B AVR MCUスケッチを実行するマイコン
AI04A LCD8桁×2行の文字表示
AZ01C USB-Cパソコンとの通信、USBからの給電
データ転送対応のUSBケーブルパソコンとAZ01Cの接続
パソコンとArduino IDEスケッチの作成と書き込み

最初は上記3枚だけを使い、USBから給電します。BLEリーフ、CR2032電源リーフなどは外しておきます。

  1. USBを抜き、電池を含めてすべての給電を止めます。 リーフの追加・取り外しは必ずこの状態で行います。
  2. 各リーフの型番とコネクタの向きを確認して、AI04A、AP01B、AZ01Cを接続します。よくある質問の組み立て確認も参照してください。
  3. AP01Bのリセットスイッチの位置を確認します。AI04Aの下に隠れて押せない場合は、リセットスイッチを操作できないときを参照してください。
  4. USBケーブルでAZ01Cとパソコンを接続します。

Arduino IDEの設定に沿ってIDEをインストールし、次の設定にします。

設定箇所選択する値
ボードマネージャArduino AVR Boards(未インストールならインストール)
ツール → ボードArduino Pro or Pro Mini
ツール → プロセッサATmega328P (3.3V, 8MHz)
ツール → ポート/シリアルポートAZ01Cを接続したときに現れるポート

この構成では、追加のボードマネージャURLは不要です。

ポートはパソコンごとに異なります。macOSでは /dev/cu.usbserial-…、Windowsでは COM…、Linuxでは /dev/ttyUSB… などが候補になります。例をそのまま入力せず、AZ01Cの接続前後で増減するポートを選んでください。表示されない場合は、データ転送対応ケーブルとAZ01Cのドライバ情報を確認します。

3. 指定のST7032ライブラリを入れる

Section titled “3. 指定のST7032ライブラリを入れる”

このスケッチは tomozh氏の arduino_ST7032 を使います。Arduino標準の Wire に加えて、このライブラリだけが必要です。

  1. tomozh/arduino_ST7032を開き、Code → Download ZIP からダウンロードします。
  2. Arduino IDEで スケッチ → ライブラリをインクルード → ZIP形式のライブラリをインストール を選びます。
  3. ダウンロードしたZIPファイルを指定します。ZIPは展開せずに選択します。

ライブラリ検索で見つかる LCD_ST7032ST7032_asukiaaa は、別のライブラリです。このガイドでは置き換えず、上記のZIPを使ってください。ST7032.h: No such file or directory と表示された場合は、インストール先と指定したZIPを確認します。

Arduino IDEで新しいスケッチを開き、内容を次のコードに置き換えて保存します。

#include <Wire.h>
#include <ST7032.h>
const uint8_t I2C_EXPANDER_ADDR = 0x1A;
ST7032 lcd;
void writeExpander(uint8_t reg, uint8_t value) {
Wire.beginTransmission(I2C_EXPANDER_ADDR);
Wire.write(reg);
Wire.write(value);
Wire.endTransmission();
}
void setup() {
Wire.begin();
// AI04A: configure P0 as an output, then turn on LCD power.
writeExpander(0x03, 0xFE);
writeExpander(0x01, 0x01);
// The ST7032 library handles LCD initialization and its wait times.
lcd.begin(8, 2);
lcd.setContrast(30);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hello!");
lcd.setCursor(0, 1);
lcd.print("Leafony");
}
void loop() {
}

AI04Aでは、I/OエキスパンダのP0でLCDへの給電を制御します。0x03 レジスタに 0xFE を書いてP0を出力にし、0x01 レジスタに 0x01 を書いてLCD電源をONにしてから、lcd.begin(8, 2) を呼びます。

lcd.begin() のあとに lcd.setContrast(30) を呼ぶ順序は、既存のLCDサンプルと同じです。初回はこの順序と指定ライブラリを使って表示を確認してください。

AZ01Cの公開回路では、USB-UARTからAP01BのRESETを自動操作する配線がありません。 書き込み開始に合わせて、AP01Bのリセットスイッチを手動で操作します。AZ01Cの詳細も参照してください。

  1. Arduino IDEの「検証」ボタンでコンパイルし、エラーがないことを確認します。
  2. シリアルモニタ・シリアルプロッタや、同じポートを使うほかのアプリを閉じます。
  3. AP01Bのリセットスイッチを押したまま、IDEの「書き込み」ボタンを押します。
  4. IDEがコンパイルから「書き込み中」の表示に切り替わるタイミングで、リセットスイッチを離します。
  5. IDEに書き込み完了が表示されたら、LCDの2行を確認します。

リセットを解除すると、AP01Bのブートローダーが一時的に書き込みを受け付けます。受付時間や操作タイミングはブートローダーなどの条件で変わるため、秒数は固定できません。失敗した場合はポートとボード設定を再確認し、離すタイミングを調整して再試行します。

avrdude: not in sync などで書き込みに失敗する

Section titled “avrdude: not in sync などで書き込みに失敗する”

選択したポート、ボードとプロセッサ、ポートを使っているアプリ、手動リセットのタイミングを確認します。このエラーだけで、LCDリーフの故障や接触不良とは判断できません。

USBの抜き差しは、ほかの電源から給電が続いているとAP01Bのリセットになりません。また、USB再接続後のポート認識にかかる時間とブートローダーの受付時間は別なので、抜き差しだけで書き込み開始を合わせられるとは限りません。

リセットスイッチを操作できないとき

Section titled “リセットスイッチを操作できないとき”

AI04Aの下にスイッチが隠れている場合は、次の手順で書き込みと表示確認を分けられます。

  1. USBを抜き、電池を含めてすべての給電を止めます。
  2. AI04Aを取り外し、AP01B+AZ01Cの2枚にします。
  3. USBを接続し、上記の手動リセット手順でスケッチを書き込みます。この時点ではLCDは接続しません。
  4. 書き込み完了後にUSBを抜き、すべての給電が止まっていることを確認します。
  5. AI04Aを取り付けてからUSBを接続し、LCDの表示を確認します。

この手順はスイッチにアクセスするための方法です。AI04Aを積むと書き込めなくなるという一般的な不具合を示すものではありません。

書き込みは完了したが文字が見えない

Section titled “書き込みは完了したが文字が見えない”
  1. writeExpander() の2行が lcd.begin() より前にあることを確認します。LCDへの給電とLCDの初期化は、それぞれ必要です。
  2. ライブラリが指定の tomozh/arduino_ST7032 であること、lcd.begin(8, 2)lcd.setContrast(30) があることを確認します。
  3. I/Oエキスパンダのアドレス設定を確認します。上記スケッチは 0x1A を使います。AI04Aを 0x1E に設定している場合は、I2C_EXPANDER_ADDR を変更します。
  4. 組み立てを確認し直す場合は、USBと電池など、すべての給電を止めてからコネクタを確認します。
AI04A上の部品7ビットI2Cアドレス役割
PCA9557 I/Oエキスパンダ0x1A または 0x1ELCD電源の制御、スイッチ入力
ST7032 LCDコントローラ0x3E初期化と文字表示

I2Cスキャンでの検出やACKは、通信への応答を示します。LCDの駆動電圧、コントラスト、表示の初期化まで正しいことを保証するものではありません。直接I2Cコマンドを書く場合の注意点は、AI04 LCDの資料を参照してください。

ページのAI相談機能などを使う場合は、基板の写真、積んでいる型番と順序、USB・電池などの給電方法、操作できるリセットスイッチ、IDEのエラー全文を共有すると切り分けやすくなります。「光った」の対象も、USBリーフのLEDか、LCDに見えた文字かを具体的に伝えてください。

LCDサンプルでは、LCDの2つのスイッチの状態を表示できます。AI04 LCDには桁数、I2Cアドレス、回路図などの資料をまとめています。生産終了したリーフでも、手元の製品を使うための技術資料を参照できます。