開発環境

ESP32へのプログラム書き込み

周辺デバイスの制御を中心とした 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にします。

詳しくはこちらをご覧ください。

進め方

プログラム書き込みの準備と進め方は以下のとおりです。

  1. ドライバのインストール
  2. Arduino IDEのインストール
  3. Qumcum Lab. と USBシリアル変換モジュールの接続
  4. USBシリアル変換モジュールとPCの接続
  5. 動作確認試験

PCとの接続方法

組み込みシステムは実際の動作対象となるシステムと、プログラムの開発環境が異なります。
PCで完結するシステム開発と異なり、動作対象となるシステム( Qumum Lab. )と、プログラムの開発環境を電気的に接続する必要があります。

書き込み回路の概要

プログラムの書き込みは外部に追加した USBシリアル変換モジュールを介してPCと接続します。

Arduino IDE などの開発ツールによっては、IDE( 開発ツール )からの操作により書き込みモードと通常起動モードを切り換えることができます。USBシリアル変換モジュールの RTSと DTRによりモード切換えをします。手動ブートリセット回路は押しボタンスイッチがありモードの選択をスイッチで行うこともできます。
詳しくは、ハードウエア・リセットとプログラム書き込み(ESP32)をご覧ください。

USBシリアル変換モジュール

シリアル変換モジュールは必要なときに接続します。またモジュールを選択できます。用途やお好みにより選択します。Qumcum Lab.とモジュールはコネクタ CND1で接続します。CND1 はプログラム書き込み用の接続以外に、JTAGの信号線も配線しています。モジュールを2チャンネル接続用にすることによりひとつのモジュールで、プログラムの書き込みと JTAGデバッグの両方を行えます。以下はUSBシリアル変換モジュールの例です。

FT2232D USBシリアル2ch変換モジュール

USBシリアル変換モジュールの例

FT232RL USBシリアル変換モジュール
秋月電子通商 / 製品の詳細

FT2232D USBシリアル2ch変換モジュール
秋月電子通商 / 製品の詳細

FT2232H(2ch)高速USBシリアル変換モジュールキット
株式会社ストロベリー・リナックス / 製品の詳細

接続コネクタ

シリアル変換モジュールと接続するコネクタ CND1は以下のとおりです。

CND1( 黄色枠 )は ESP32用
CND2,3は STM32の SWD用

コネクタの型番: Molex 0010897120 / Datasheet

Pin No.NameCategoryPort / Pin
1+3.3V
2+3.3V
3RTSUART
4DTRUART
5RXD0UARTIO3
6TXD0UARTIO1
7JTAG-TDIJTAGIO12
8JTAG-TCKJTAGIO13
9JTAG-TMSJTAGIO14
10JTAG-TDOJTAGIO15
11GND
12GND

1. ドライバのインストール

USBシリアル変換モジュールのドライバをインストールします。

ここでは FT2232D USBシリアル2ch変換モジュール( 秋月電子通商 AE-FT2232 )を例にします。

モジュールをPCに接続すると、仮想COMポートとして認識されます。COM7, COM8 が認識された仮想 COMポートです。2ch変換モジュールなので二つ表示されます。

2. Arduino IDE のインストール

開発ツールに Arduino IDEを使用します。

Arduino IDEのインストールは以下の手順です。

  1. Arduino のホームページにアクセスします
    https://www.arduino.cc/
  2. SOFTWARE のページを開きます。
  3. IDEにはいくつかの種類とバージョンがあります。
    ここでは Legacy IDEをダウンロードします。

Arduino IDE 2.xx はシステムやハードウエアにより問題を生じる場合があります。

この取扱説明書では以下を使用しています。
Arduino IDE 1.8.19

Arduino のホームページ(1)
SOFTWARE のページ(2)

Arduino IDE の設定

ハードウエア( MCU )に合わせて IDEを設定します。

  1. Arduino IDEを開きます
  2. メニュー [ ファイル ]- [ 環境設定 ] を開きます
  3. 「追加のボードマネージャのURL:」に下記URLを入力します
    https://dl.espressif.com/dl/package_esp32_index.json
  4. メニュー [ ツール ]- [ ボード ]- [ ボードマネージャ ] を選択します
  5. ボードマネージャの検索ボックスに「esp32」を入力してインストールします。
Arduino IDE の起動画面(1)
環境設定ダイアログボックス(2,3)
ボードマネージャ・ダイアログボックス(4,5)

3. Qumcum Lab. と USBシリアル変換モジュールの接続

秋月電子通商の AE-FT2232( FT2232D USBシリアル2ch変換モジュール )を使用した場合の接続例です。先々、JTAGも使用したいこと、1chのモジュールとの価格差を考えて AE-FT2232を選択しています。
モジュールはピン接続なのでブレッドボードに搭載します。ブレッドボードと Qumcum Lab.をジャンパワイヤ(オス~メス)接続します。

プログラム書き込み時の接続
( 参考 )JTAG用の結線(黄色)も追加

使用した部品は以下のとおりです。

  • 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.名 称ポート
40BD0OUTPUTTXD 出力5RXD0IO3
39BD1INPUTRXD 入力6TXD0IO1
38BD2OUTPUTRTS# 出力3RTS
36BD3OUTPUTDTR# 出力4DTR
17VCCIOBPOWERCh.B 外部電源用 *1+3.3V
18VCCIOAPOWERCh.A 外部電源用 *2+3.3V
25GNDGNDGND11GND
12GND

*: 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ケーブルで接続します。

  1. Arduino IDEを開きます
  2. メニュー [ ツール ]- [ ESP32 Dev Module ]を選択します
  3. メニュー [ ツール ]- [ シリアルポート ] で USBシリアル変換モジュールの仮想ポートを選択します。仮想ポートは、1.ドライバのインストールで確認したポートです。( この例では COM7または COM8 )

5. 動作確認試験

プログラムが正しく書き込めることを確認します。

BOOTスイッチと、リセットスイッチは右図のとおりです。メインボードの右側にあります。

SW1: Reset ( EN )
SW2: Boot

動作確認試験は、SW2 を操作( ON / OFF )して、その状況を Arduino IDE のシリアルモニタで表示することにより確認します。手順は以下のとおりです。

  1. Arduino IDE に以下のコードを貼り付けます。
  2. メニュー [ ツール ]- [ シリアルポート ] で USBシリアル変換モジュールの仮想ポートを選択します。
  3. コンパイルして書き込みます。( → ボタン )
  4. 書き込み後、シリアルモニタに 0.5秒ごとに SW2 の状態が表示されます。
  5. SW2 を ON / OFF してシリアルモニタの表示に反映されることを確認します。
//
// Functionality Verification Test Program
//
int pushButton = 0;

void setup() {
  Serial.begin( 115200 );
  pinMode( pushButton, INPUT );
}

void loop() {
  int buttonState = digitalRead( pushButton );
  Serial.println( buttonState );
  delay( 500 );
}
コンパイル、書き込みが完了した画面
シリアルモニタの表示

プログラムが書き込まれない

プログラムが書き込まれない場合は以下を確認してみてください。

  • TX と R Xの接続( 逆になっていると通信できません。 )
  • USB ケーブルの接続( 別のケーブルで試めす。 )
  • 他の USB ポートに差し替えてみる。
  • 「ツール」→「ボード」で正しいボード( ESP32 Dev Module )の選択
  • 「ツール」→「シリアルポート」で正しいポートの選択( 他のポートを試す。 )
  • 一度、シリアルモニタを閉じて再び開いてみる。
  • すでに動作している他の ESP32のボードがあればそれで確認する。
  • 電源を入れ直す。

参考情報

参考になる情報は以下のとおりです。

このホームページ内

  • 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。

他のWebサイト

カテゴリー
最近の記事 おすすめ記事

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

記事一覧を表示するには、カスタム投稿「ブログ」にて、4つ以上記事を作成してください。

TOP