ESP32マウス(shota) マウス自作研修

ESP32マウスPart.39 ESP-IDF v3.3 から v4.0 (stable) へ移行する

ESP32マウス(shota)

こんにちは、shotaです。
前回の記事ではモーショントラッキングセンサICM-20648SPI通信するライブラリC++で作成しました。

今回は内部フラッシュメモリを使ったファイルシステムについて書く予定でしたが、、、
その準備としてESP-IDFのバージョンを旧安定版のv3.3から最新安定版のv4.0に移行します。

これまで作成したサンプルコードがv4.0で動くことも確認するので、サンプルコードの振り返りとしてご覧ください。

ブロクで書いたサンプルコードはGitHubに公開しています。

ESP-IDFのバージョンと移行する理由について

ESP32のプログラムはESP-IDFというフレームワークによって生成されます。
このESP-IDFにはバージョンがいくつかあり、2020年7月時点で、最新バージョンはv4.2、安定バージョンはv4.0となっています。

ESP-IDFのバージョンについては下記ページに詳しく書かれています。
製品に使うなら安定版を推奨する、とページには書かれています。
趣味で使うなら最新版でも安定版でも旧安定版のv3.3でも良いと思います。

さて、なぜEspecialのコードをv3.3からv4.0に移行するのか、という話ですが、
次回の記事で参照するESP-IDFのファイルシステムに関するサンプルコードとドキュメントが、v3.3とv4.0で大きく違ったためです。

v3.3は2022年2月までサポートされるので、慌てて移行する必要はありません。詳細はこちら

開発環境をv3.3からv4.0に移行する

それでは、開発環境をv3.3からv4.0に移行しましょう。

ESP-IDF v3.3のアンインストール

ESP-IDF v3.3 Getting Startedで実行した作業のをします。

まずは、ESP32ツールチェーンとESP-IDFを削除します。

$ rm -rf ~/esp/xtensa-esp32-elf 
$ rm -rf ~/esp/esp-idf

つづいて、.~/.profileを編集し、ESP-IDF関連の環境変数を削除します。

# 以下を削除
export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"
export IDF_PATH=~/esp/esp-idf

ESP-IDF v4.0.1 (stable) のインストール

公式手順に従って安定版をインストールします。

執筆時点の安定版と、最新のESP-IDFの安定版はバージョンが異なる場合があります。下記手順は参考程度に閲覧してください。

この記事では詳細なインストール手順について記載しません。公式手順を参照してください。
また参考として、下記のアールティブログ記事を紹介します。

環境設定の注意

v4.0からは「いつでもどこでもESP-IDFを使える」、から「使いたいときにESP-IDFをセットアップする」ように変わります。

ESP-IDFを使いたいとき(ESP32の開発をしたいとき)に、次のコマンドを実行します。

. $HOME/esp/esp-idf/export.sh

export.shを実行するとESP-IDFの仮想環境が設定されます。
これは、ESP32以外の開発環境に影響を与えるので、例えば~/.bashrcのようなログイン時に読み込まれる設定ファイルでexport.shを実行すると、
ログインするたびにESP-IDF環境が設定されてしまいます。

とはいえ、毎回

. $HOME/esp/esp-idf/export.sh

を実行するのは面倒なので、
「export.shを実行するコマンド」のエイリアスを~/.profileに記述します。

私の環境では.profileに記述してもうまく機能しなかったため、~/.zshrcに以下を記載しました。
# set ESP-IDF path and alias
export IDF_PATH=~/esp/esp-idf
alias get_idf='. $HOME/esp/esp-idf/export.sh'

Hello Worldの実行

無事にインストールできたらHello Worldプロジェクトをビルドできるか確認しましょう。

まず、プロジェクトをコピーします。

$ cd ~/esp
$ cp -r $IDF_PATH/examples/get-started/hello_world .

つづいて、Hello Worldプロジェクトの初期設定をします。
そのためにはexport.shの実行が必要です。

今回は手動でエイリアスを設定します。
次回からは起動後にエイリアスが設定されるので、get_idfコマンドを実行すれば、export.shが実行されます。

$ alias get_idf='. $HOME/esp/esp-idf/export.sh'
$ get_idf
$ idf.py menuconfig
$ idf.py build
$ idf.py -p /dev/ttyUSB0 flash
$ idf.py -p /dev/ttyUSB0 monitor

Hello Worldが表示されたら完了です。

Especialのコードをv4.0へ移行する

ESP-IDF v4.0からは、ビルドシステムがGNU MakeからCMakeに移行されました。
ビルド時に実行するコマンドもmakeからidf.pyに変わっています。
ビルドシステムの詳細については下記の公式マニュアルを参照してください。

そのためEspecialのコードもちょっとだけ書き換えています。
書き換えた内容については下記プルリクエストを参照してください。この記事では説明を省略します。

それでは、これまでに作成したサンプルコードを実行してみましょう。

0_hello_world

「ESP32マウスをはじめよう!」という文字列を表示するサンプルです。

$ cd ~/esp/especial/examples/0_hello_world
# v3.3のビルドで生成されたファイルが残っていれば削除します
$ rm -rf build sdkconfig
$ idf.py -p /dev/ttyUSB0 flash monitor

1_led

GPIOでLEDを点滅するサンプルです。

$ cd ~/esp/especial/examples/1_led
$ idf.py -p /dev/ttyUSB0 flash monitor

2_battery_checker

AD変換でバッテリー電圧を測るサンプルです。

$ cd ~/esp/especial/examples/2_battery_checker
$ idf.py -p /dev/ttyUSB0 flash monitor

3_object_detector

GPIOとAD変換で物体検出センサを使うサンプルです。

$ cd ~/esp/especial/examples/3_object_detector
$ idf.py -p /dev/ttyUSB0 flash monitor

4_motor_driver

MCPWMでモータを回すサンプルです。

$ cd ~/esp/especial/examples/4_motor_driver
$ idf.py -p /dev/ttyUSB0 flash monitor

5_encoder

SPI通信でエンコーダの値を読み取るサンプルです。

$ cd ~/esp/especial/examples/5_encoder
$ idf.py -p /dev/ttyUSB0 flash monitor

6_motion_tracking

SPI通信でモーショントラッキングセンサの値を読み取るサンプルです。
C++でコードを書いてます。

$ cd ~/esp/especial/examples/6_motion_tracking
$ idf.py -p /dev/ttyUSB0 flash monitor

次回の記事

次回はESP-IDFのファイルシステム機能を使って、ESP32モジュール内部のフラッシュメモリのデータを読み書きします。

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