Linux Mint(Ubuntu)上でESP-IDFの開発環境を作る

ハードウェア関係の開発環境ってWindows向けのものが結構多いんですよね。不思議です。なんでなんだろ??
ドライバの書きやすさ的にいえばオープンなLinuxとかのがいいんじゃないの??最近はそうでもないのかな。

さて、最近ESP32を使って遊んでいるのですが、私は普段から潔癖症(?)なのでどうしてもというような理由がない限り、基本的にソフトウェアをインストールしません。
exeアレルギーですし、ちょっと試すだけに環境変数やレジストリを汚すようなものは断じてお断りです。

なので私は普段からホスト環境のVMWare上のLinuxで開発をしています。

ところで...Linuxを使う一番の理由はフリーだからです。
VMイメージをコピーしようがOSのライセンス料が発生しません。
スナップショットも移行もらくらくです。

おっと話がそれました。

今回はESP32のSDKであるESP-IDFをそんなVM上のLinuxMint(Ubuntu 14.04.5 LTS)上に構築するお話です。

結論

公式ドキュメントを読めばOKです。
以降は、日本語かどうかの違いだけなので英語が読める人は公式で問題ないです。

依存ライブラリ等を導入する

下記のコマンドでesp-idfが依存するライブラリを一括でインストールしていきます。
python関連はesp32へのソフトウェア転送で使用されます。

sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-serial

なおpyenv等でpythonのバージョン管理をしている人はpip等でpython-serialをインストールしないとダメかもしれません。

Toolchainのダウンロード&インストール

下記のようにクロスコンパイルするためのツールチェインのダウンロードと展開をします。

cd ~
wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz

mkdir -p ~/esp
cd ~/esp
tar -xzf ~/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz
rm ~/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz

Toolchainのパスを通す

とりあえず全ユーザーで使用することにするので、下記のように~/.profileへパスを追加します。(環境変数の追加)
特定ユーザーであれば~/.bashrcや~/.bash_profileでも大丈夫だと思います。(未確認)

vi ~/.profile

で、~/.profileの最終行に下を追加。
もしツールチェインを別の場所に配置した場合は下記の配置を適切な値に変更してください。

# esp32
export PATH="$PATH:$HOME/esp/xtensa-esp32-elf/bin"
alias get_esp32='export PATH="$PATH:$HOME/esp/xtensa-esp32-elf/bin"'
export IDF_PATH=~/esp/esp-idf
source ~/.profile

で反映します...が、ログオフしてオグオンしろとあるのでその通りにしたほうが良いかも。

printenv PATH

で下記のように追加したパス($PATH:$HOME/esp/xtensa-esp32-elf/bin)とかが表示されてればOK

/home/user-name/bin:/home/user-name/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/user-name/esp/xtensa-esp32-elf/bin

デバイスへのシリアル通信を許可する

デバイスとシリアル通信をするためにはパーミッションを適切に設定する必要があります。
過去に付与してある場合は不要ですが、今回が初めての場合は恐らく/dev/ttyUSB0にアクセスするタイミングで読み書きできずに下のようなエラーになると思います。

Failed to open port /dev/ttyUSB0

なので下記のようにuermodコマンドでdialoutグループに現在ログイン中のユーザーを参加させることでデバイスとのシリアル通信が出来るようになります。

sudo usermod -a -G dialout $USER

ESP-IDFのダウンロード

esp-idfはgitでバージョン管理されてるのでクローンします。楽ですね。

cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git

ちなみに--recursiveオプションを忘れるとサブモジュールを取りこぼすので、うっかり付け忘れた(私)場合は下記でsubmoduleを一括でpullします

cd ~/esp/esp-idf
git submodule update --init

ESP-IDFのパス設定

もう既に設定済みですが、esp-idfツールチェインはIDF_PATHを参照するので適切に設定されていないとプロジェクト生成時にこけます。
下記で正しく設定できているか確認します。

echo $IDF_PATH

もし設定できてない人(空の場合)は、毎回下記変数を実行して閑居変数を設定してから実行するか、~/.profileに追加してくださいね。

export IDF_PATH=~/esp/esp-idf

以上で、開発環境の構築は完了です。
Lチカのデモとかプロジェクトの構築についてはまた別記事でまとめます。