方言を話すおしゃべり猫型ロボット『ミーア』をリリースしました(こちらをクリック)

【ESP32】Arduino IDEからPlatform IOへ移行方法

この記事は約9分で読めます。

前回、ESP32ボードで、LittleFSとSqlite3を使用してデータを呼び出すを終えた。

ArduinoIDEとPlatformIOの違い

PlatformIOの存在は知っていたのだが、Arduinoとは別のIDEなんだろうなくらいにしか思っていなくて、気に留めていなかったのだが、Arduino IDEで開発していて、Buildも遅いし、コード画面も分割できないし不便だなと思いながらArduinoでコード書いてた。

最近はコードだけはVSCodeで書いて、実行だけArduino IDEで行っていた。
しかし、partitionテーブルの設定で色々とArduinoだと不便なところがあり(別記事で記載予定)、PlatformIOだと、設定ファイルに記述するだけで良いから楽みたいな記事を見て、調べていくうちに、これはPlatformIOに移行した方が良さそうだと合点。
だいぶ、コードをすでにArduinoで書いてしまっていたが、PlatformIOに移行することに決めた。正直、最初からPlatformIOで書いておけばよかったと思ったが、情弱だったorz

PlatformとArduinoの比較は下記記事など参照

Arduino IDE ユーザーのためのPlatformIO導入案内 - Qiita
さぶん!この記事のターゲットArduino IDEでArduinoやESP32系、Teensyなどを使える。ライブラリの導入などもできる。PlatformIOは導入が面倒そうなのでなるべく…

ArduinoからPlatformIOへ移行

さて、下記記事を参考にして、移行開始

Arduino IDEからPlatformIOへの移行 - Qiita
ひとりアドベントカレンダー2日目2日目に思いついたので1日目は気が向いたら追加する。Arduino IDEで開発していたものをPlatformIOに移行したので備忘として元の環境Window…

PlatformIOでプロジェクト作成

コードエディタでVSCodeを使っている前提。
下記URLを参考に、VSCodeの拡張機能としてPlatformIO IDEをインストール

PlatformIO: Your Gateway to Embedded Software Development Excellence
Unlock the true potential of embedded software development with PlatformIO's collaborative ecosystem, embracing declarat...

インストールが終了したら、PlatformIOで新規プロジェクトを作成

今回は、名前、ボード、フレームワークを下記で指定している。名前は任意。ボードは、自分が使用しているボード名で

Finishボタンを押すと、Documents→PlatformIO→Projectsフォルダ配下に新規作成したプロジェクトが表示される

設定した内容(borad、framework)が、設定ファイルのplatorm.iniに記載されている

srcディレクトリ以下にソースをコピー

platformIOの場合には、プロジェクト名のルートディレクトリ配下にsrcフォルダが自動で作成されるので、この中に、ArduinoIDEで作成していたコードを一旦全部入れる。

画面右半分のarduinoのコードをコピーして、platformioのsrc配下にペースト

ライブラリの導入

物は試しで、一旦この状態でBuildしてみる。
VSCodeエディタの最下部にチェックボタンがあり、これがBuildアイコン。ここをクリック。

当然、めっちゃエラー出てくる。現時点で61エラー出現

上記エラーは「ESP32Serovライブラリが入ってないよ」と怒られている。
→確かに、まだplatform.iniにインストールするライブラリを何も定義していないので。

親切にも、ESP32Servo.hを探しているの?
platform IOだったらこちらのライブラリが該当するよとリンク付きで伝えているので、web>URLのURLの部分をクリック

PlatformIO Registry
The world's first package and project dependency management solution for embedded development

こんな画面に移動する。

This library attempts to faithfully replicate the semantics of the Arduino Servo library (see http://www.arduino.cc/en/Reference/Servo) for the ESP32, with two (optional) additions.
→ArduinoのESP32用のサーボモーターのライブラリを完全に補完しているので、このライブラリをインストールしてね

と書いてある。Installationタブをクリック

platform.iniのlib_depsセクションに、ライブラリを記載してねと書いてある。

lib_deps セクション

・プロジェクトで使用するライブラリの依存関係を定義するためのセクション
・library dependenciesの略
・公式サイト

lib_deps — PlatformIO latest documentation

というわけで、platformio.iniファイルにlib_deps=と記載して、さっきのinstallationに記載されていたライブラリを貼り付け。

61個あったエラーが56個に減った。

ターミナルでライブラリが入っていないことによるエラーメッセージの、Web > URLのURLをクリック
→開いたサイトでInstallationをクリック
→lib_depsセクションに貼り付けるべきライブラリをコピーして、platformio.iniのlib_depsセクションにコピー
→ライブラリが自動でインストールされるで、終わったら「upload」を押してライブラリの該当エラーがなくなったことを確認

これを繰り返して、必要なライブラリをインストールしていく。

拡張子inoファイルの修正

ライブラリを入れ終わったら、次は、拡張子inoファイルの修正と、他のエラーをつぶす。

・拡張子を.inoから.cppへ変更(PlatformIOでは.inoはサポートされていないため)
・.cppファイルの先頭に#include <Arduino.h>を追加(VSCode+PlatformIOでは明示的にArduino.hをincludeする必要あり)

また、arduino IDEの時は、複数の.inoファイルがあったので、そのまま拡張子をcppファイルにしただけでは、変数や関数の未定義エラーが続出した。

一旦、全部main.cppファイルにぶち込む。loop関数の後で、関数を定義している場合(.inoファイルの場合は、関数の順序に依存せずコードを実行できる)には、loop関数内で該当の関数を呼び出そうとすると未定義エラーが出るので、全部の個別関数をsetup()関数の前に持ってきて、とりあえずエラーを回避してビルドできるようにすることを先決。

関数プロトタイプを追加して、loop関数の後に定義した個別関数も正常に読み込まれるようにする方法もあるが、一旦後回し。

 

Build→Upload

VSCodeエディタ画面下部のBuildを押して、その後にUploadを押して、プログラムをESP32ボードに反映させる。

Arduino IDEの場合、ポートをいちいち、タブメニューから選択する必要があったが、PlatformIOの場合は、ポートを自動検出してくれるので選択不要なのが地味に嬉しい

 

 

動作しない→LittleFSへデータをアップロード

これで、エラーが解消されて、無事動くはずと思ったが、なぜか動かない。。
Serial monitorを開くと下記のエラーが。
sqlite3がDBとして認識できていないとのこと

そういえば、PlatformIOでLittleFSへのデータアップロードを、まだしていなかったことに気づき、DBもLittleFSへアップロードしてアクセスするものなので、確かにSQLクエリ走らせてもDBがそもそもないので、エラー発生するよなと。

というわけで、chat-gptにやり方を聞いたところ

ーーーーーーー
PlatformIOでのSPIFFSまたはLittleFSへのデータアップロードは、Arduino IDEのような直感的な方法ではなく、設定と手順が少し異なります。以下に、PlatformIOでLittleFSへのデータアップロードの一般的な手順を示します。

  1. まず、データファイルをプロジェクト内の特定のディレクトリに配置します。Arduino IDEの場合、これは通常、メインの**.inoファイルと同じレベルのdataディレクトリです。PlatformIOでは、デフォルトの設定ではdata**ディレクトリも同様に使われます。
  2. **platformio.ini設定ファイルを開き、board_build.filesystemlittlefs**に設定します。これにより、LittleFSがファイルシステムとして使われます。

    1. [env:your_env_name] board = your_board_name board_build.filesystem = littlefs
    2. 上記の**your_env_nameyour_board_name**は、あなたの環境名とボード名に適切に置き換えてください。
  3. その後、PlatformIOのターミナルまたはCLIで以下のコマンドを実行します。

    1. pio run -t uploadfs

このコマンドにより、**data**ディレクトリ内のファイルがLittleFS形式でビルドされ、その結果のイメージがESP32などのデバイスにアップロードされます。
ただし、Arduino IDEと同じく、この手順はボードがSPIFFSまたはLittleFSをサポートしていること、そして十分なストレージ領域があることを前提としています。

ーーーーーーー

とのこと。

言われた通りに、platform.iniにlittlefsのファイルシステムを定義し、

Bash
pio run -t uploadfs

をターミナルで走らせたがエラーに。

dataディレクトリを変更

 Ardiuno ideの時に作成していたコードを、すべてplatform ioのsrcディレクトリに移管したため、dataディレクトリが、root→src→dataになっていたことが原因。これをroot→dataに戻す必要あり。

再び、下記コマンドを実行してファイルシステムにデータをアップロード。今回はできた

Bash
pio run -t uploadfs

完成(したが、別問題浮上)

以上で、Uploadのエラーもなくなり、動くようになったのだが、下記のように目の画像がチラつくという別問題が浮上。
こちらに関しては、今後対応。

 

 

でも、これで、コード作成→Build→Uploadの全てをVSCodeで一元にできるようになったし、Buildの速度も体感的にはArduinoの時の2倍くらいにはなっている気がするので、移行してよかった。

コメント

タイトルとURLをコピーしました