ESP32: Visual Studio CodeでESP-IDFを使う(Windows編)

ESP-IDFはコマンドラインでmakeするので、今までなんとなくLinux+emacsで使ってました。でも、#defineされてる定数の定義を探すときとか、zshなら「grep キーワード **/*」で再帰検索できるとはいえ、やっぱりちょっとめんどくさいですよねー(´・ω・`)

それで、EclipseやNetBeans等のIDEを使っている方がいるようだったので、もしかして!と思って検索したら、MicrosoftのVisual Studio Code(VSCode)を使う方法が載っていたので、試してみました!インテリセンスとか使えるみたいです(≧∇≦)b

ちなみに、元記事ではLinuxで使っているようですが、コマンドラインを使わないならWindowsでもいいんじゃない?と思い、Windowsにインストールしてみました(*ノノ)
元記事:https://github.com/espressif/esp-idf/issues/303

1. ESP32のツールチェーンを解凍する

  • 公式セットアップガイドからWindows用のToolchainとMSYS2が入ったオールインワンのzipをダウンロードして、C:ドライブ直下、もしくは好きなフォルダに解凍します。この記事では「C:\msys32」にあると想定して説明します!

2. ESP-IDFをcloneする

  • 「C:\msys32\mingw32.exe」を実行して、以下のコマンドを実行します。
    mkdir ~/esp
    cd ~/esp
    git clone --recursive https://github.com/espressif/esp-idf.git
    echo export IDF_PATH=\"${HOME}/esp/esp-idf\" >/etc/profile.d/export_idf_path.sh
  • 「exit」してmingw32.exeを終了します。

3. Visual Studio Code(VSCode)をインストールする

  • https://code.visualstudio.com/からVisual Studio Codeをダウンロードして、インストールします。オプション等は、全部デフォルトにしました(●´ω`●)

4. VSCodeにC/C++ extensionをインストールする

  1. VSCodeを起動して、画面左端にある拡張機能のアイコンを押し、「Complete C/C++ Language support…」を探します。すぐ見つからない場合は、検索欄に「cpptools」と入れるといいかも。
  2. 緑色の「インストール」を押した後、アクティブ化のため青色の「再読み込み」を押します。

5. プロジェクトの設定

  1. ESP32のための設定はプロジェクト毎に行いますが、1回やってしまえば次回からは設定ファイルを使いまわしできます(≧∇≦)b
    ここでは試しに、「c:\msys32\home\ユーザー名\esp\esp-idf\examples\get-started\blink」を「c:\msys32\home\ユーザー名\esp\」にコピーして、設定してみたいと思います。
  2. [ファイル]メニューの[フォルダを開く]から、コピーしたプロジェクトのフォルダ「c:\msys32\home\ユーザー名\esp\blink」を開きます。
  3. Ctrl+Shift+Pを押して「edit」と入力して、「C/Cpp: Edit Configurations」を選択します。
  4. 「c_cpp_properties.json」が開かれるので、以下の内容に上書きします。 [ユーザー名]のところだけ、適宜置き換えてください。
    {
        "configurations": [
            {
                "name": "Win32",
                "includePath": [
                    "${workspaceRoot}",
                    "C:/msys32/home/[ユーザー名]/esp/esp-idf/components"
                ],
                "browse": {
                    "limitSymbolsToIncludedHeaders": true,
                    "databaseFilename": "",
                    "path": [
                        "${workspaceRoot}",
                        "C:/msys32/home/[ユーザー名]/esp/esp-idf/components"
                    ]
                },
                "intelliSenseMode": "clang-x64"
            }
        ]
    }
    
  5. 再びCtrl+Shift+Pを押して、「Tasks」と入力すると出てくる「タスク:タスクランナーの構成」を選択し、更に「Others: 任意の外部コマンドを実行する例」を選択します。
  6. 「tasks.json」が開かれるので、以下の内容に上書きします。
    {
        "version": "0.1.0",
        "command": "c:/msys32/usr/bin/bash",
        "args": ["--login","-c"],
        "isShellCommand": true,
        "showOutput": "always",
        "suppressTaskName": true,
        "options": {
            "cwd": "${workspaceRoot}",
            "env": {
                "CHERE_INVOKING": "enabled_from_arguments",
                "MSYSTEM": "MINGW32"
            }
        },
        "tasks": [
            {
                "taskName": "build app",
                "args": ["make app"],
                "isBuildCommand": true,
                "problemMatcher": {
                    "owner": "cpp",
                    "fileLocation": "absolute",
                    "pattern": {
                        "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
                        "file": 1,
                        "line": 2,
                        "column": 3,
                        "severity": 4,
                        "message": 5
                    }
                }
            },
            {
                "taskName": "clean app",
                "args": ["make app-clean"]
            },
            {
                "taskName": "flash app",
                "args": ["make app-flash"]
            },
            {
                "taskName": "monitor",
                "command": "c:/msys32/mingw32",
                "args": ["make","monitor"],
                "isShellCommand": false,
                "showOutput": "never"
            },
            {
                "taskName": "menuconfig",
                "command": "c:/msys32/mingw32",
                "args": ["make","menuconfig"],
                "isShellCommand": false,
                "showOutput": "never"
            }
        ]
    }
    

6. ビルドと実行

ここまで出来たら、あとはコマンドラインでやっていたのと同じことが、[タスク]メニューの[タスクの実行]からできます。
  • menuconfig: 別ウインドウが開いて、menuconfigできます。デフォルトだとシリアルポートのポート名が「/dev/ttyUSB0」となってますが、Windowsでは「COM数字」とかにするようです。
  • build app: ビルドします。
  • flash app: ESP32に書き込みます。
  • monitor:別ウィンドウでモニターを起動します。終了はLinuxと同じく「Ctrl+]」です。
  • clean app:クリーンします。

7. おわりに

うーん、なんと言いますか、やっぱりIDEはいいですね(≧∇≦)b
特にESP-IDFは、ペリフェラルを設定する構造体や定数を調べたくてソースを見たくなることが多いのですが、IDEだと定義に飛んだりするのがすごいらくちん~ヽ(´▽`)ノ

ただ、使ってみて判ったのですが、Windows版のToolchainは、Linux版よりコンパイルが遅いような・・・(´;ω;`)ウッ…
せっかくWindowsに入れたけど、Linuxにも入れてみたくなりました(  ̄- ̄)
(追記)Linuxに入れてみたら、Windows版と同じコンパイル速度でした(*ノノ)気のせいだったようです・・・


コメント

このブログの人気の投稿

Arduinoでステレオ電子ボリューム(FM62429)

PSoC5LP Prototyping Kitで作るUSBオーディオI/F(I2S出力対応)