AP01B(AVR MCU)、AI04A(LCD)、AZ01C(USB-C)を使って、LCDの1行目に Hello!、2行目に Leafony を表示します。AI04Aは8桁×2行なので、各行の文字列は8文字以内にします。
Hello!Leafony1. 用意して組み立てる
Section titled “1. 用意して組み立てる”| 用意するもの | 役割 |
|---|---|
| AP01B AVR MCU | スケッチを実行するマイコン |
| AI04A LCD | 8桁×2行の文字表示 |
| AZ01C USB-C | パソコンとの通信、USBからの給電 |
| データ転送対応のUSBケーブル | パソコンとAZ01Cの接続 |
| パソコンとArduino IDE | スケッチの作成と書き込み |
最初は上記3枚だけを使い、USBから給電します。BLEリーフ、CR2032電源リーフなどは外しておきます。
- USBを抜き、電池を含めてすべての給電を止めます。 リーフの追加・取り外しは必ずこの状態で行います。
- 各リーフの型番とコネクタの向きを確認して、AI04A、AP01B、AZ01Cを接続します。よくある質問の組み立て確認も参照してください。
- AP01Bのリセットスイッチの位置を確認します。AI04Aの下に隠れて押せない場合は、リセットスイッチを操作できないときを参照してください。
- USBケーブルでAZ01Cとパソコンを接続します。
2. Arduino IDEを設定する
Section titled “2. Arduino IDEを設定する”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 に加えて、このライブラリだけが必要です。
- tomozh/arduino_ST7032を開き、
Code → Download ZIPからダウンロードします。 - Arduino IDEで
スケッチ → ライブラリをインクルード → ZIP形式のライブラリをインストールを選びます。 - ダウンロードしたZIPファイルを指定します。ZIPは展開せずに選択します。
ライブラリ検索で見つかる LCD_ST7032 や ST7032_asukiaaa は、別のライブラリです。このガイドでは置き換えず、上記のZIPを使ってください。ST7032.h: No such file or directory と表示された場合は、インストール先と指定したZIPを確認します。
4. 表示用スケッチを用意する
Section titled “4. 表示用スケッチを用意する”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サンプルと同じです。初回はこの順序と指定ライブラリを使って表示を確認してください。
5. 手動リセットして書き込む
Section titled “5. 手動リセットして書き込む”AZ01Cの公開回路では、USB-UARTからAP01BのRESETを自動操作する配線がありません。 書き込み開始に合わせて、AP01Bのリセットスイッチを手動で操作します。AZ01Cの詳細も参照してください。
- Arduino IDEの「検証」ボタンでコンパイルし、エラーがないことを確認します。
- シリアルモニタ・シリアルプロッタや、同じポートを使うほかのアプリを閉じます。
- AP01Bのリセットスイッチを押したまま、IDEの「書き込み」ボタンを押します。
- IDEがコンパイルから「書き込み中」の表示に切り替わるタイミングで、リセットスイッチを離します。
- IDEに書き込み完了が表示されたら、LCDの2行を確認します。
リセットを解除すると、AP01Bのブートローダーが一時的に書き込みを受け付けます。受付時間や操作タイミングはブートローダーなどの条件で変わるため、秒数は固定できません。失敗した場合はポートとボード設定を再確認し、離すタイミングを調整して再試行します。
6. うまくいかないとき
Section titled “6. うまくいかないとき”avrdude: not in sync などで書き込みに失敗する
Section titled “avrdude: not in sync などで書き込みに失敗する”選択したポート、ボードとプロセッサ、ポートを使っているアプリ、手動リセットのタイミングを確認します。このエラーだけで、LCDリーフの故障や接触不良とは判断できません。
USBの抜き差しは、ほかの電源から給電が続いているとAP01Bのリセットになりません。また、USB再接続後のポート認識にかかる時間とブートローダーの受付時間は別なので、抜き差しだけで書き込み開始を合わせられるとは限りません。
リセットスイッチを操作できないとき
Section titled “リセットスイッチを操作できないとき”AI04Aの下にスイッチが隠れている場合は、次の手順で書き込みと表示確認を分けられます。
- USBを抜き、電池を含めてすべての給電を止めます。
- AI04Aを取り外し、AP01B+AZ01Cの2枚にします。
- USBを接続し、上記の手動リセット手順でスケッチを書き込みます。この時点ではLCDは接続しません。
- 書き込み完了後にUSBを抜き、すべての給電が止まっていることを確認します。
- AI04Aを取り付けてからUSBを接続し、LCDの表示を確認します。
この手順はスイッチにアクセスするための方法です。AI04Aを積むと書き込めなくなるという一般的な不具合を示すものではありません。
書き込みは完了したが文字が見えない
Section titled “書き込みは完了したが文字が見えない”writeExpander()の2行がlcd.begin()より前にあることを確認します。LCDへの給電とLCDの初期化は、それぞれ必要です。- ライブラリが指定の
tomozh/arduino_ST7032であること、lcd.begin(8, 2)とlcd.setContrast(30)があることを確認します。 - I/Oエキスパンダのアドレス設定を確認します。上記スケッチは
0x1Aを使います。AI04Aを0x1Eに設定している場合は、I2C_EXPANDER_ADDRを変更します。 - 組み立てを確認し直す場合は、USBと電池など、すべての給電を止めてからコネクタを確認します。
| AI04A上の部品 | 7ビットI2Cアドレス | 役割 |
|---|---|---|
| PCA9557 I/Oエキスパンダ | 0x1A または 0x1E | LCD電源の制御、スイッチ入力 |
| ST7032 LCDコントローラ | 0x3E | 初期化と文字表示 |
I2Cスキャンでの検出やACKは、通信への応答を示します。LCDの駆動電圧、コントラスト、表示の初期化まで正しいことを保証するものではありません。直接I2Cコマンドを書く場合の注意点は、AI04 LCDの資料を参照してください。
状況を相談する
Section titled “状況を相談する”ページのAI相談機能などを使う場合は、基板の写真、積んでいる型番と順序、USB・電池などの給電方法、操作できるリセットスイッチ、IDEのエラー全文を共有すると切り分けやすくなります。「光った」の対象も、USBリーフのLEDか、LCDに見えた文字かを具体的に伝えてください。
次のステップ
Section titled “次のステップ”LCDサンプルでは、LCDの2つのスイッチの状態を表示できます。AI04 LCDには桁数、I2Cアドレス、回路図などの資料をまとめています。生産終了したリーフでも、手元の製品を使うための技術資料を参照できます。