周辺デバイスの制御を中心とした Peripheral MCU( ESP32 )にプログラムを書き込みます。外部にオプションUSBシリアル変換モジュールを接続します。
◀ この記事の前に: 複数のMCUをつなぐ
▶ この記事の次に:
プログラム書き込みの概要
Peripheral MCUは Qumcum Lab. のディスプレイなどの周辺デバイスの制御を行います。Body MCU ( Leafony Block )のプログラミングで Qumcum Lab. を制御できますが、周辺デバイスとの関係を変えたり改造を行う場合は、Peripheral MCUのプログラムを変更できます。Peripheral MCU は ESP32です。 ここでは Arduino IDEを対象としています。Arduino IDE以外の開発ツールも使用できます。また、デバッグ用の JTAGを使用できます。
注意事項・Body MCU( STM32 )との関係
プログラムの書き込み時に ESP32のモード選択に注意する必要があります。
モード選択に関係しているピンのうち、GPIO2が STM32の支配下にあります。そのため、ESP32にプログラムを書き込むときは GPIO2を HIGHにします。STM32側では F20( PA2 )に接続しています。
- ESP32の書き込み時: Flash Mode / GPIO0 = LOW、GPIO2 = HIGH
- GPIO2: Leafony Block F20 / PA2 / B-WAKEUP( Body MCU の ウエイクアップ信号線 )
STM32L4シリーズでは、リセット後のGPIOはデフォルトでアナログ入力モードに設定されており、フローティング状態です。プログラム書き込み時は出力にして HIGHにします。
詳しくはこちらをご覧ください。
進め方
プログラム書き込みの準備と進め方は以下のとおりです。
- ドライバのインストール
- Arduino IDEのインストール
- Qumcum Lab. と USBシリアル変換モジュールの接続
- USBシリアル変換モジュールとPCの接続
- 動作確認試験
PCとの接続方法
組み込みシステムは実際の動作対象となるシステムと、プログラムの開発環境が異なります。
PCで完結するシステム開発と異なり、動作対象となるシステム( Qumum Lab. )と、プログラムの開発環境を電気的に接続する必要があります。
書き込み回路の概要
プログラムの書き込みは外部に追加した USBシリアル変換モジュールを介してPCと接続します。
Arduino IDE などの開発ツールによっては、IDE( 開発ツール )からの操作により書き込みモードと通常起動モードを切り換えることができます。USBシリアル変換モジュールの RTSと DTRによりモード切換えをします。手動ブートリセット回路は押しボタンスイッチがありモードの選択をスイッチで行うこともできます。
詳しくは、ハードウエア・リセットとプログラム書き込み(ESP32)をご覧ください。
USBシリアル変換モジュール
シリアル変換モジュールは必要なときに接続します。またモジュールを選択できます。用途やお好みにより選択します。Qumcum Lab.とモジュールはコネクタ CND1で接続します。CND1 はプログラム書き込み用の接続以外に、JTAGの信号線も配線しています。モジュールを2チャンネル接続用にすることによりひとつのモジュールで、プログラムの書き込みと JTAGデバッグの両方を行えます。以下はUSBシリアル変換モジュールの例です。
接続コネクタ
シリアル変換モジュールと接続するコネクタ CND1は以下のとおりです。
コネクタの型番: Molex 0010897120 / Datasheet
Pin No. | Name | Category | Port / Pin |
---|---|---|---|
1 | +3.3V | ||
2 | +3.3V | ||
3 | RTS | UART | |
4 | DTR | UART | |
5 | RXD0 | UART | IO3 |
6 | TXD0 | UART | IO1 |
7 | JTAG-TDI | JTAG | IO12 |
8 | JTAG-TCK | JTAG | IO13 |
9 | JTAG-TMS | JTAG | IO14 |
10 | JTAG-TDO | JTAG | IO15 |
11 | GND | ||
12 | GND |
1. ドライバのインストール
USBシリアル変換モジュールのドライバをインストールします。
ここでは FT2232D USBシリアル2ch変換モジュール( 秋月電子通商 AE-FT2232 )を例にします。
モジュールをPCに接続すると、仮想COMポートとして認識されます。COM7, COM8 が認識された仮想 COMポートです。2ch変換モジュールなので二つ表示されます。
2. Arduino IDE のインストール
開発ツールに Arduino IDEを使用します。
Arduino IDEのインストールは以下の手順です。
- Arduino のホームページにアクセスします
https://www.arduino.cc/ - SOFTWARE のページを開きます。
- IDEにはいくつかの種類とバージョンがあります。
ここでは Legacy IDEをダウンロードします。
Arduino IDE 2.xx はシステムやハードウエアにより問題を生じる場合があります。
この取扱説明書では以下を使用しています。
Arduino IDE 1.8.19
Arduino IDE の設定
ハードウエア( MCU )に合わせて IDEを設定します。
- Arduino IDEを開きます
- メニュー [ ファイル ]- [ 環境設定 ] を開きます
- 「追加のボードマネージャのURL:」に下記URLを入力します
https://dl.espressif.com/dl/package_esp32_index.json - メニュー [ ツール ]- [ ボード ]- [ ボードマネージャ ] を選択します
- ボードマネージャの検索ボックスに「esp32」を入力してインストールします。
3. Qumcum Lab. と USBシリアル変換モジュールの接続
秋月電子通商の AE-FT2232( FT2232D USBシリアル2ch変換モジュール )を使用した場合の接続例です。先々、JTAGも使用したいこと、1chのモジュールとの価格差を考えて AE-FT2232を選択しています。
モジュールはピン接続なのでブレッドボードに搭載します。ブレッドボードと Qumcum Lab.をジャンパワイヤ(オス~メス)接続します。
使用した部品は以下のとおりです。
- FT2232D USBシリアル2ch変換モジュール: AE-FT2232 / 秋月電子通商
- ブレッドボード: BB-801 / 秋月電子通商
- ジャンパワイヤ: オス ~ メス 7本 / SKU 2294 / 株式会社スイッチサイエンス
選択時の注意点はこちらです。 - USBケーブル: モジュールとPCを接続するケーブルです。モジュールによりコネクタの種類が異なりますので注意します。( AE-FT2232は Mini-B です。 )
Technical Considerations USBのコネクタ
最近は USB Type-C が多くなりつつありますが、開発ツールなどは Mini-B, Micro-B が少なくありません。また、充電用のケーブルで信号線の配線がないもののありますので事前の確認をしておくことが望ましいです。
モジュールと Qumcum Lab.の接続( 端子の対応 )は以下のとおりです。
AE-FT2232 / USBシリアル2ch変換モジュール | Qumcun Lab. CND1 | |||||
---|---|---|---|---|---|---|
ピン No. | 名 称 | 種 別 | 機 能 | ピン No. | 名 称 | ポート |
40 | BD0 | OUTPUT | TXD 出力 | 5 | RXD0 | IO3 |
39 | BD1 | INPUT | RXD 入力 | 6 | TXD0 | IO1 |
38 | BD2 | OUTPUT | RTS# 出力 | 3 | RTS | |
36 | BD3 | OUTPUT | DTR# 出力 | 4 | DTR | |
17 | VCCIOB | POWER | Ch.B 外部電源用 * | 1 | +3.3V | |
18 | VCCIOA | POWER | Ch.A 外部電源用 * | 2 | +3.3V | |
25 | GND | GND | GND | 11 | GND | |
12 | GND |
*: AE-FT2232にはI/O電圧用の3.3Vレギュレータが乗っていないので、外部で作った3.3VをAE-FT2232に入力してやる必要があります。そのため、 JP2AとJP2Bを外して、VCCIOA, VCCIOB に3.3Vを接続します。
Technical Considerations 接続は TXとTX、RXとRXなの?
ESP32 と USBシリアル変換モジュールの接続で、ESP32 のTX、RXが USBシリアル変換モジュールの TX、RXのどちらと接続するか迷います。実際にネット上の情報でも「TXは TXに、RXは RXに」とあったり「TXは RXに、RXは TXに」とあったりと両方の表記があります。
ESP32の端子と、モジュールの IC( 例えばFT2232 )の端子で見ると「TXは RXに、RXは TXに」が正解です。「TXは TXに、RXは RXに」と記載されている場合、接続先が ESP32を搭載しているプリント基板のコネクタであったりします。その場合、基板内で TX, RXがクロスして接続していると「TXは TXに、RXは RXに」は正しい表記になります。
プリント基板に搭載している場合は、ICの端子とは異なる場合がありますので注意が必要です。
4. USBシリアル変換モジュールとPCの接続
USBシリアル変換モジュールのUSBコネクタとPCを USBケーブルで接続します。
- Arduino IDEを開きます
- メニュー [ ツール ]- [ ESP32 Dev Module ]を選択します
- メニュー [ ツール ]- [ シリアルポート ] で USBシリアル変換モジュールの仮想ポートを選択します。仮想ポートは、1.ドライバのインストールで確認したポートです。( この例では COM7または COM8 )
5. 動作確認試験
プログラムが正しく書き込めることを確認します。
動作確認試験は、SW2 を操作( ON / OFF )して、その状況を Arduino IDE のシリアルモニタで表示することにより確認します。手順は以下のとおりです。
- Arduino IDE に以下のコードを貼り付けます。
- メニュー [ ツール ]- [ シリアルポート ] で USBシリアル変換モジュールの仮想ポートを選択します。
- コンパイルして書き込みます。( → ボタン )
- 書き込み後、シリアルモニタに 0.5秒ごとに SW2 の状態が表示されます。
- SW2 を ON / OFF してシリアルモニタの表示に反映されることを確認します。
プログラムが書き込まれない
プログラムが書き込まれない場合は以下を確認してみてください。
- TX と R Xの接続( 逆になっていると通信できません。 )
- USB ケーブルの接続( 別のケーブルで試めす。 )
- 他の USB ポートに差し替えてみる。
- 「ツール」→「ボード」で正しいボード( ESP32 Dev Module )の選択
- 「ツール」→「シリアルポート」で正しいポートの選択( 他のポートを試す。 )
- 一度、シリアルモニタを閉じて再び開いてみる。
- すでに動作している他の ESP32のボードがあればそれで確認する。
- 電源を入れ直す。
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。
他のWebサイト
- SN74LVC1G3157 SPDT アナログスイッチ Datasheet