Arduino – ESP32 WiFiClientSecure ライブラリのハングアップ問題がついに解決!

ESP32 ( ESP-WROOM-32 )

ESP-IDF で、Arduino IDE 環境用に libmbedtls.a をコンパイルする為の準備

では、Arduino core for ESP32 の WiFiClientSecure ライブラリでハングアップした原因の libmbedtls.a ファイルを修正していきます。
ここでは、ESP-IDF で Arduino IDE 環境用に拡張子.a 形式ファイルをコンパイルする方法を説明します。

普通に ESP-IDF でコンパイルするだけでも、拡張子.a 形式ファイルはビルドされるのですが、それを Arduino IDE にコピペしただけでは動作しません。

そこで、Arduino core for ESP32 を ESP-IDF コンポーネント化して、ESP-IDF でコンパイルするという方法を使います。
その方法は、お馴染みの GitHub の以下のリンクページの終わりの方に、Using as ESP-IDF component とあり、そこに掲載されています。

これを読んでもイマイチ分からないところがあるので、順番に説明します。

1.ESP-IDF をダウンロード、インストール

私なりにまとめた以下のページを参照してください。
先ほども紹介しましたが、インストールが済んでいたらここは飛ばしてください。

ESP-IDF ( ESP32 開発環境 ) の使い方

2.プロジェクトを作成

ここで、ESP-IDF の examples/protocols フォルダの中にある、https_request をコピペして、プロジェクトを作成します。
私の場合は、プロジェクトは d:\msys32\home の中に作成していますので、そこへコピペしてください。
このhttps_request フォルダが新たに作ったプロジェクトフォルダになります。

3.プロジェクトフォルダ内に components フォルダを作成し、Arduino – ESP32 をダウンロードする

次に、先ほどコピペした https_request フォルダ内に、components フォルダを作成します。
ESP-IDF では、components フォルダにいろいろなアイテムが入っています。
要するにプラグインやライブラリみたいな役割をするものを入れるフォルダです。
下図の様に作成します。
(もちろん、MSYS2 コマンドラインで mkdir コマンドで作成しても良いです)

次に、MSYS2 ( mingw32.exe または mingw64.exe )を起動して、cd コマンドで components フォルダまで移動します。
ここでは、

cd /d/msys32/home/https_request/components

と入力してエンターを押します。

次に、git clone コマンドを使って、Arduino core for ESP32 をダウンロードします。
(GitHub から ZIP ファイルをダウンロードして解凍しても良いと思います)

git clone https://github.com/espressif/arduino-esp32.git arduino

このコマンドを打つと、components フォルダに arduino フォルダが作成され、そこにダウンロードされます。

因みに、コマンドをコピペしたい場合はショートカットキーを使わず、Windows の場合は右クリックでコピペしてください。

Enter すると、ダウンロードが始まり、完了すると下図の様になります。

実際にフォルダを見てみると、ダウンロードされているのが分かると思います。

この後は get.exe を実行する必要はありません。
そのままでOKです。

これで、ESP-IDF で make menuconfig 画面で、Arduino IDE 用の設定ができるようになります。

menuconfig で、mbedtls と Arduino の設定をする

では、https_request ファイルをコンパイルする前に、menuconfig 画面でコンパイルビルドのオプション設定をしていきます。
ここに mbedtls の MPI ハードウェアアクセラレーション設定や、Arduino IDE 設定をすることができます。
先ほどやったように、components フォルダに Arduino – ESP32 をダウンロードすると、menuconfig 画面で Arduino 設定項目が表示されるようになるわけです。

下図の様に、先ほどのMSYS2 画面の続きで、

cd ..

というコマンドを打ち、https_request フォルダに移動します。

次に、

make menuconfig

というコマンドを打ちます。

しばらくすると下図の様な画面になります。
ちょっとフリーズしたような間がありますので、辛抱強く待ってください。

矢印カーソルキー[↓] で下図の様に Component config にカーソルを持っていき、Enter します。

次に、下図のように Arduino Configuration にカーソルを合わせ、Enter します。


(この、Arduino Configuration という項目は、プロジェクト内のcomponents フォルダに Arduino-ESP32 がインストールされていると表示されるものです。ただ単に ESP-IDF だけ使っていたらこの項目は表示されません。)

次に下図の様に
Autostart Arduino setup and loop on boot (メインにloop 関数を使う)
Disable mutex locks for HAL (HAL mutex locks を無効にする)
のところでキーボードの[Y]キーを押して、チェックをいれます。
Autostart Arduino は有効にしておかないと、Arduino でコンパイルが通りません。
HAL mutex locks については私はよく知りませんが、これは無効にしておいた方がよさそうです。

次に[Esc]キーを2回連続で押すか、<Exit> を選んで、前の画面に戻ります。
ここで保存しなくても、最後に保存すれば良いです。
そうしたら、下図の様にESP32-specific にカーソルを合わせ、Enterします。

次に、CPU frequency (160 MHz) にカーソルを合わせ Enter します。

そうしたら、下図のように ESP32 の CPU クロック周波数をご自分の好きな Hz に合わせて Enterキーを押せば反映されて、前の画面に戻ります。
ただ、今回の場合は libmbedtls.a ファイルをコンパイルすることが目的なので、あまり意味ないかもしれませんが、念のためやっておきます。

すると自動的に前の画面に戻り、下図の様に 240 MHz に反映されていることがわかります。

次に、[Esc]キーを2回連続で押すか、<Exit> を選んで、前の画面に戻り、下図の様に FreeRTOS にカーソルを合わせ Enter します。

ESP32 の CPU をデュアルコア(マルチタスク)で動かす場合が多いと思いますので、下図の様にチェックが外れているか確認してください。

次に、[Esc]キーを2回連続で押すか、<Exit> を選んで、前の画面に戻り、下図の様に mbedTLS を選択して Enter します。

ここからが今回の最も重要な点です。
下図の様に、mbedTLS のハードウェアアクセラレーションのチェックを外してください
最近のIDF ではデフォルトで外れています。

ここの文章でも書いてありますが、「buggy」とありますね。
要するに、バグが多いらしいので、今はまだ使うべからずです。

以上で menuconfig の設定が終わりなので、下図の様に矢印カーソルキー[→]で <Save>に合わせて Enter します。

すると、下図の様になるので、OKします。

すると下図の様になり、保存完了です。

その後、[Esc]キーを2回連続で押すか、<Exit> をひたすら Enter して、画面を抜けると下図の様にconfigファイルが make されます。

以上、menuconfig 設定でした。
このように、Arduino components を作ることによって、Arduino IDE 用の設定ができるので、今後様々なところで応用ができるかもしれません。

コメント

  1. カンパニー より:

    素晴らしい記事をありがとうございます。
    ぜひ参考にさせていただきます。

    1つ質問なのですが、私はESP32をスイッチサイエンスさんで販売されている
    “ESP-WROOM-32ブレイクアウトSD+”を使用しています。
    このボードではSDカードを”SDMMC”というライブラリを使うみたいで”ESP32_SD_ShinonomeFNT Beta ver 1.0″が動作しませんでした。

    できればmgo-tecさんのライブラリにSDMMC版が対応していただけるとありがたいです。

    • mgo-tec mgo-tec より:

      カンパニーさん

      今回も当記事をご覧いただき、ありがとうございます。

      私はスイッチサイエンスさんの委託販売ボード “ESP-WROOM-32ブレイクアウトSD+” は持っておりません。
      MMCライブラリしか対応していないので、敬遠していました。

      MMC については私は使ったことが無いので、これから検討してみたいと思います。
      しばらく時間がかかるかも知れませんので、何卒ご容赦くださいませ。

タイトルとURLをコピーしました