PlatformIO IDE を使って ESP-WROOM-02 の開発をする
昨日作った ESP-WROOM-02 の実験用ボードを使って、温湿度センサー DHT11 からデータを取得したい。以前 NodeMCU で DHT11 を使ってみた記事はこちら。
これまでは、Visual Studio Code extension for Arduino を使って VS Code 上で開発していた。しかし、
というような不満があった。そこで、今回は PlatformIO を使ってみる。
PlatformIO のデスクトップ IDE は、VS Code の拡張機能として動く1。
VSCode — PlatformIO 5.1.1a1 documentation
インストールとプロジェクト作成
ということで、VS Code 上で拡張機能「PlatformIO IDE」と検索し、インストールした。しばらく時間がかかるが、完了すると「Finish! Please restart VSCode.」というメッセージが出てくるので、VS Code を再起動する。
右下の 🏠 アイコンをクリックすると PlatformIO のホーム画面が開く。[New Project] をクリック。
プロジェクト作成のウィザートが開くので、適当な名前をつける。Board は ESP-WROOM-02 (Espressif)
を選択。下図のようなファイル構成のプロジェクトが作成された。
ビルド・書き込み
src/main.cpp
に簡単なプログラムを書く。初期状態で補完も効いていて使いやすい。
画面下部の ✔️ アイコンをクリックするとビルドが走る。ショートカットキーは Ctrl+Opt+B。
また、➡️ アイコンをクリックすると(ビルド+)書き込み(upload)が行われる。ショートカットは Ctrl+Opt+U。
しかし、自分の場合は上のように OSError: [Errno 16] Resource busy: '/dev/cu.usbserial-2'
というエラーが出てうまく行かなかった。別のポートが選択されている様子。自分の場合は、前の記事でシリアル通信を試したように、ESP-WROOM-02 には /dev/tty.usbserial-DM02NA6M
でアクセスできる。そこで、プロジェクトの設定ファイル platformio.ini
を編集して upload_port
を明示的に指定した。
--- a/platformio.ini +++ b/platformio.ini @@ -12,3 +12,4 @@ platform = espressif8266 board = esp_wroom_02 framework = arduino +upload_port = /dev/tty.usbserial-DM02NA6M
再度書き込みを試したら成功。
ちなみに、前回作成した実験用ボードでは、
というボタン操作をする必要があるので注意。
シリアルモニター
こちらも、monitor_port
と monitor_speed
をあらかじめ指定しておく。
--- a/platformio.ini +++ b/platformio.ini @@ -13,3 +13,5 @@ platform = espressif8266 board = esp_wroom_02 framework = arduino upload_port = /dev/tty.usbserial-DM02NA6M +monitor_port = /dev/tty.usbserial-DM02NA6M +monitor_speed = 115200
画面下部の 🔌 アイコンをクリックするとシリアルモニターが開く。ショートカットキーは Ctrl+Opt+S
。
自分の場合、一度ブレッドボード上のリセットボタンを押して再起動しないと、出力が表示されなかった。
ライブラリを依存関係に追加して使う
次に、温湿度センサー DHT11 を使うためのライブラリを追加する。ちなみに、以前 VS Code の Arduino 拡張機能で開発していたときは、Arduino IDE のライブラリマネージャーからインストールする必要があった。
PlatformIO では、Libraries のページから検索できる。dht11
を検索窓に入力すると、DHT sensor library が出てくるので、クリック。
ライブラリの詳細画面が表示されるので、そこから [Add to Project] をクリック。
インストール先のプロジェクトを選択して [Add] で追加する。
platformio.ini
の lib_deps
に依存が追加された。
--- a/platformio.ini +++ b/platformio.ini @@ -15,3 +15,4 @@ framework = arduino upload_port = /dev/tty.usbserial-DM02NA6M monitor_port = /dev/tty.usbserial-DM02NA6M monitor_speed = 115200 +lib_deps = adafruit/DHT sensor library@^1.4.1
バージョンも指定されているので、他のプログラミング言語の依存管理みたいに、再現性のあるビルドができる。
しかし、このライブラリを使ったコード(後掲)をビルドしようと思ったら、Adafruit_Sensor.h: No such file or directory
というエラーが出た。
依存の依存 Adafruit Unified Sensor も自分でインストールする必要があるらしい。先ほどと同じく、GUI から検索して追加した結果。
--- a/platformio.ini +++ b/platformio.ini @@ -15,4 +15,6 @@ framework = arduino upload_port = /dev/tty.usbserial-DM02NA6M monitor_port = /dev/tty.usbserial-DM02NA6M monitor_speed = 115200 -lib_deps = adafruit/DHT sensor library@^1.4.1 +lib_deps = + adafruit/DHT sensor library@^1.4.1 + adafruit/Adafruit Unified Sensor@^1.1.4
これでビルドができるようになった。
完成
DHT11 は以下のモジュールを使った。モジュール上に抵抗も実装されている。
この DHT11 モジュールの出力を、ESP-WROOM-02 の IO4 ピンに接続した。
プログラムは、先日 NodeMCU で使ったものと DHTPIN
以外は同様。
#include <Arduino.h> #include "DHT.h" #define DHTPIN 4 // IO4 ピンからセンサーの値を得る #define DHTTYPE DHT11 // DHT 11 を使う DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(115200); dht.begin(); } void loop() { float t = dht.readTemperature(); float h = dht.readHumidity(); Serial.println("Temperature: " + String(t, 1) + "°C\tHumidity: " + String(h, 0) + "%"); delay(2000); }
取得した値がシリアルモニターに無事表示されている。
-
一応、他のエディタにもある程度対応はしている様子。↩