こんにちは、shotaです。
前回の記事ではモーショントラッキングセンサICM-20648とSPI通信するライブラリを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から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) のインストール
公式手順に従って安定版をインストールします。
この記事では詳細なインストール手順について記載しません。公式手順を参照してください。
また参考として、下記のアールティブログ記事を紹介します。
環境設定の注意
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に記述します。
# 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モジュール内部のフラッシュメモリのデータを読み書きします。