M5シリーズのESP-IDF開発環境をWSL2&Dockerで作る

ESP32 PSRAM Timer Camera X

​この記事は、M5Stack Advent Calendar 2024 に参加してます。

久しぶりのM5、ESP32

いろいろと作ってみたいものはありつつも、なかなか手がつかない日々でしたが、試したいことができたので久しぶりにM5シリーズのデバイスを買ってみました。

買ってみたのは、ESP32 PSRAM Timer Cameraです。こちらを使って、HTTPSでクラウドのサービスにつないでみるのが目的です。

で、今後また色々ビルドしたり、ESP32の機能を使うためにESP-IDF上で開発をしたいと思い準備しました。

ESP-IDFの環境はバージョンによってしばしば互換性が失われるので、昔のコードが最新Verでビルドできないのはしょっちゅうあるかと思います。そのときESP-IDFバージョンを上げ下げするのも大変です。

なので、試行錯誤するにはDockerで環境を作れると何かと便利です。その内容を共有したいと思います。環境はWSL2です。

準備

基本的には、公式の手順を読めばわかる内容ではありますが、すこし躓いた点もあったのでそのあたり説明したいと思います。

ビルドのコマンド例

例えば以下のようになります。

$ docker run --rm \
   -e MY_ENV_VAR="$MY_ENV_VAR" \
   -v $PWD/$TARGET_PROJECT:/project -w /project -u $(id -u $USER):$(id -g $USER) -e HOME=/tmp espressif/idf:$IDF_VER idf.py build

$PWD/$TARGET_PROJECT:/project の部分でホスト側のプロジェクトをコンテナから参照できるようにしてます。

$(id -u $USER):$(id -g $USER) ホスト側のユーザIDでコンテナ内で作業するようにします。

$IDF_VERの変数で、使用するIDFのバージョンを調整します。

Flash時のコマンド

通常は"idf.py -p (PORT) flash"でよいはずですが、なぜそれだとエラーが起きてしまったので、build時に表示されるesptoolを使ったコマンドを利用してます。

作業用のスクリプト

長いDockerコマンドを毎回打つのも面倒なので、簡単なシェルスクリプトにまとめました。menuconfigやイメージの書き込みなどもコンテナで実行できます。

実際のスクリプトはgithubで公開してます。(リンクは下の方に)

WSL2でESP32とシリアル通信

usbipdを使って、Windowsのホスト側のUSBデバイスをIP通信を介して、WSL2上でUSBデバイスとして認識させます。usbipdインストールについて検索すると色々情報が出てきますが、少し古くて、今だと不要な手順が書いてあったりするようです。

今(2024/12)は以下の公式の手順で準備するのがよいと思います。うまくいくと/dev/ttyUSB0として認識されました。

USB デバイスを接続する
usbipd-win を使用してお使いの WSL 2 Linux ディストリビューションに USB デバイスを接続する方法について説明します。

Cameraのサンプルコードについて

ESP32 PSRAM Timer Cameraのサンプルはいくつか存在しているのですが、それぞれ依存しているESP-IDFのバージョンが異なっているようで、最新のIDFだとビルドできなかったりして、サンプルを動かすことが難しかったです。

GitHub - m5stack/TimerCam-idf: TimerCam idf example
TimerCam idf example. Contribute to m5stack/TimerCam-idf development by creating an account on GitHub.

こちらはアーカイブになってました。

GitHub - m5stack/M5_Camera_Examples: M5 camera series product examples.
M5 camera series product examples. Contribute to m5stack/M5_Camera_Examples development by creating an account on GitHub.

今はこちらを使うのが良さそうでした。対応してるESP-IDFのバージョンがReadmeに書いてないのですが、v5系はダメなようなので、v4.4.8で動かしました。

Docker開発環境の例

githubで開発環境用のサンプルスクリプトを公開してます。

.envをいじったり、src以下にプロジェクトを配置したりして、使用できるかと思います。

GitHub - kishima/dev-esp-idf-docker: Development environment for ISP-IDF on Docker
Development environment for ISP-IDF on Docker. Contribute to kishima/dev-esp-idf-docker development by creating an account on GitHub.

さいごに

Dockerを使うと簡単に環境を差し替えたり、持ち運びできるので楽ですね。またmrubyビルドしたりして、面白いものを少しずつでも作っていきたいです。

会社のサービスに繋いでみた話は、会社の技術ブログで後ほど公開予定です。

aptpod Tech Blog
株式会社アプトポッドのテクノロジーブログです

Read more

PicoRuby向けのM5Unified/GFX mrbgemを作る話

PicoRuby向けのM5Unified/GFX mrbgemを作る話

この記事は、mrubyファミリ (組み込み向け軽量Ruby) Advent Calendar 2025に参加しています。 本日の記事では、先日のTokyuRuby会議16 でLTした内容をブログ記事としても残しておきたいと思います。 ESP32とPicoRuby PicoRubyはもともと、@hasumikin さんがRaspberry Pi Picoをターゲットとしてスタートしたプロジェクトです。 その後、ESP32への対応も@Yuuuさんの尽力もありなされています。(picoruby-esp32) PicoRubyをESP32のcomponentsとしてビルドしてリンクするような形でポーティングされています。 現在は主なESP32シリーズで、PicoRubyを動かすことができるようになっています。 M5Stackシリーズを使いたい ESP32を使いたい理由の一つとして、市場にいろいろなバリエーションのESP32をコアとしてパッケージングされた製品があるという点があると思います。 M5Unified/GFXを使いたい M5シリーズにはディスプレイやボタンや

By kishima
チキントマト煮と鶏レバーペーストのレシピの記憶

チキントマト煮と鶏レバーペーストのレシピの記憶

昨日はTokyuRuby会議16があり、そこで差し入れ料理の投票で1位を取ることができました。食べて頂いたみなさん、ありがとうございました。 長年スタッフ側で参加してて、いつか飯提供したい気持ちをずっと、温めてたんですが、今回は一般参加で飯提供の念願叶った上に、飯王までとれて最高でした。 その時のレシピを自分のためにも残しておきます。 分量は目分量でやってたので、そのあたりは適宜補完ください。 今回の料理の品目アイデア出しのブレストにはChatGPTにも手伝っていただきました。ありがとう。 チキントマト煮 材料 * 国産鶏むね肉(ハナマサで購入) * トマト缶 * 赤ワイン * たまねぎ * にんじん * にんにく * マッシュルーム * ローリエの葉 * ローズマリー(生) * 塩 * コンソメの素 * オリーブオイル * サラダオイル 下処理 鶏肉はまず塩を強めに降って揉み込んで数十分おいておく 塩で処理した鶏肉は水で洗い流して、余分な油を切り落として、一口サイズに切り分ける 切り分けた肉は皮を背にして、サラダオイルを引いたフラ

By kishima
PicoRubyベースのミニコンピュータ(PicoCalc編)

PicoRubyベースのミニコンピュータ(PicoCalc編)

以前の記事で、PicoCalcが届いたら、PicoRubyを動かしてみたい、というお話をしていました。 PicoRubyベースのミニコンピュータ先日、SNSを見ていたらPicoCalcというデバイスを見つけた PicoCalc | ClockworkPiClockworkPi - Creators of PicoCalc uConsole DevTerm and GameShell, Open Source Portable Hardware for Every Dev.ClockworkPi これはclockworkから出ているRaspberryPi Picoをコアとして、キーボードとモニタを搭載したスタンドアロンなポケットコンピュータキットです。 clockworkはRaspberryPiベースのロマンあふれるデバイスをこれまで提供している会社で、私も昔クラウドファンディングに参加したこともありました。 私自身も、以前、ラズパイをタカチケースに入れて気合でポケコンもどきを作ったりしたこともあったので、この洗練された筐体には当然心が躍りました。 デフォルトで動くのはBasicで、こ

By kishima

昔、Arduino Uno(RAM 2KB)でmrubyのバイトコードを走らせた話

背景 最近、生活が落ち着いてきたので、また電子工作やmrubyを触るようになりました。 ここ数年はPicoRubyが一部で盛り上がっており、私も勉強会に参加しつつエンジョイしているところであります。 PicoRubyのすごいところは、Raspberry Pi Picoのような264kBというメモリが少なめの環境でも、マイコン上でmrubyのコードをコンパイルして、実行できるところです。これまでいちいちPCでバイトコードにコンパイルしてマイコンに焼いたりしないといけないところが不要になります。加えてPicoRubyではターミナルで動くShellや、USBストレージまで実装されていて、それもまた使いやすさに大きく貢献してます。 ※ちなみに素のmrubyでもESP32のPSRAM(2MBや4MB)付きのものであればマイコン上でコンパイルできます。(Family mrubyの取り組み) 作者の羽角さんと以前、Arduinoでmrubyをなんか動かしたことがある、という話をしたときに、ふつう動かないよね?となったのですが、その時自分でも自分が何をしたのか完全に忘れていたので、それを振り

By kishima