環境構築
ESP-IDFをローカルにセットアップするか、代わりにDockerを使います。お好みの方法をどうぞ。
どちらの方法でも、まずはサブモジュールを含めてリポジトリをクローンします。
$ git clone --recursive https://github.com/picoruby/R2P2-ESP32.git
$ cd R2P2-ESP32
ESP-IDFを使う場合
前提条件
Espressifのインストールガイド に従ってESP-IDFをセットアップしてください。ビルドはESP-IDF v5.5で確認されています。
ESP-IDFを有効化する
新しいシェルセッションを開始するたびに、ESP-IDFを有効化してツールをPATHに追加します。
$ source ~/.espressif/tools/activate_idf_v5.5.x.sh
$ export PATH="$IDF_PATH/tools:$PATH"
続いて、お使いのバージョン管理ツールで対応するRubyをPATHに通します。
# mise
$ mise use ruby@4.0.5
# asdf
$ asdf local ruby 4.0.5
# rbenv
$ rbenv local 4.0.5
Tip: direnvを使うと、これらの環境変数をプロジェクト ディレクトリ内に限定して自動的に適用できるため、毎回手動で有効化する必要がなくなります。
Note: ターゲットのセットアップは、一部の ホスト側ツールをネイティブ(クロスではない)ツールチェーンでビルドします。 ESP-IDFのクロスツールチェーンが
PATHに含まれていても通常は自動検出されますが、 検出結果が正しくない場合はHOST_CC/HOST_AR環境変数で上書きしてください。
Dockerを使う場合
ESP-IDFやRuby、ホストツールチェーンをマシンに直接インストールする代わりに、
公式のespressif/idfイメージをベースにした
コンテナ内で完結してビルドすることもできます。このイメージにはすでにESP-IDF、gcc、rubyが
含まれています。プロジェクトのdocker/Dockerfileは、そのイメージに不足しているパッケージ
(ruby-dev、libssl-dev)を追加するだけのものです。rake docker:*タスクは、初回実行時に
このイメージを自動的にビルドします。ホスト側に必要なのはDockerだけです。
macOS: virtiofsを有効にする
プロジェクトディレクトリはコンテナにバインドマウントされるため、Dockerのファイル共有
バックエンドがシンボリックリンクを正しく扱える必要があります。ビルドは
components/picoruby-esp32/picoruby以下にベンダリングされたシンボリックリンクを通じて
ファイルの読み書きを行います。
macOSではvirtiofsを有効にする必要があります。 それ以外のバックエンド
(Docker DesktopのgRPC FUSE / osxfs、Rancher Desktopのreverse-sshfs / 9p)では
Operation not permittedエラーが発生します。
ESP-IDFバージョンの指定
デフォルトで固定されているESP-IDFパッチバージョン(v5.5.4、rakelib/docker.rakeの
DOCKER_IDF_TAGを参照)と異なるバージョンを使いたい場合は、
イメージのタグ一覧からESP_IDF_DOCKER_TAGを
設定します。
$ export ESP_IDF_DOCKER_TAG=v5.5.5
$ rake docker:build
.envによる設定
ネイティブビルドと異なり、docker:*タスクはシェル環境からSDKCONFIG_DEFAULTSや
USE_WIFIなどを読み込みません。代わりに、プロジェクトルートに(gitignore済みの)
.envファイルを置いてください。存在する場合はそのままコンテナに渡されます。
Dockerの--env-file形式はシェルのようにクォートを取り除かないため、
値をクォートしないでください。
# .env
SDKCONFIG_DEFAULTS=sdkconfig.defaults;sdkconfigs/usb_console
SDKCONFIG_DEFAULTSに何を指定するかは設定を参照してください。
Note:
docker:flash/docker:monitorタスクは用意されていません。ほとんどの コンテナ環境(macOS/WindowsのDocker DesktopやRancher Desktop)では、デバイスの シリアルポートをコンテナに渡すことができないためです。これはDockerfileやCLIフラグの 問題ではなく、それらのLinux VM内からポートそのものが見えないことが原因です。docker:buildでビルドしたイメージは、ホスト側からフラッシュとモニタリング してください。これらもフルのESP-IDFインストールは不要です。ネイティブLinuxでは、docker run --device=/dev/ttyUSB0 ...でシリアルデバイスを渡せば、コンテナ内から 書き込むことも可能です。
必要なツールのインストール
ホスト側でのフラッシュ・モニタリングにも、フルのESP-IDFインストールは不要です。
rake flash / rake monitor(フラッシュとモニタリングを参照)は
idf.pyではなくesptool / esp-idf-monitorを直接呼び出すため、Dockerでビルドした
build/であっても、ホスト側は次の2つのPythonパッケージだけで動作します。
$ pip install esptool esp-idf-monitor
これだけです。フラッシュ・モニタリングだけであれば、ESP-IDFの有効化(activate)は 必要ありません。(ESP-IDFを直接使ってビルドした場合は、そのインストールの一部として すでに手元にあります。)
次のステップ
設定でハードウェア固有の設定を確認し、最初のビルドの前に ターゲットのセットアップを行ってください。
このページの内容