指紋スキャナーモジュールGT-521F52のArduino用ライブラリをVSCodeのPlatformIOで扱えるようにする


M5Stackの開発に統合開発環境を導入する

さて前回 指紋スキャナーモジュール GT-521F52をM5stackで動くようにしてみる デモ編でM5stackにコードを移植していくと書いたのですが、その前にやっておくことがあります。それは統合開発環境の導入です。
Arduino系標準のArduinoIDEってちょっとしたコードを書くのにはシンプルでいいんですが、ライブラリをばらしたりするようになると力不足です。
例えば補完機能は便利ですし、ライブラリを解読するときに変数や関数の定義にキー入力で飛べるようになると効率が格段に上がります。
そこで、マイコン開発用の統合開発環境を導入してみます。
VisualStudioCodeにPlatformIOというプラグインがあるので導入してみます。
参考にしたのはこちらの記事M5Stackの開発環境を整える - PlatformIO IDE編です。
この記事でM5Stackサンプルプログラムを書き込めるようになりました。
まずはここまでです。

PlatformIOでGT-521F52のライブラリを取り扱うにはどうするか

さて、問題はここからです。PlatformIOでプロジェクトを作って、公式のガイドにあるGitHubのArduino用のライブラリを、どうすればPlatformIOで取り扱い、コンパイルし、書き込めるようになるのかということについて少し手間取りました。まあわかってしまえば簡単なのですが。

必要なファイル

GT-521F52をM5stackで動作させるために必要なファイルは3つです。

サンプルプログラム1つ

サンプルファイルexamplesには
FPS_Blink(動作チェック用のLチカプログラム)
FPS_Enroll(読み取った指紋をセンサに登録する)
FPS_IDFinger(読み取った指紋が過去に登録されたものかチェックする)
の3つのサンプルファイルがあります。
動作が複雑になると追いきれなくなるかもしれないのでとりあえずはFPS_Blinkでいいでしょう。
拡張子inoはArduinoIDEのものなので、一般的な拡張子cppに変更しました。

ライブラリのファイル2つ

srcにおいてある
FPS_GT511C3.cpp
FPS_GT511C3.h
の2つがライブラリを構成しています。
拡張子hがヘッダファイルでライブラリのオブジェクトや変数、関数の定義が書き込まれています。
拡張子cppはライブラリの本体で、オブジェクトの処理が書いてあります。
こちらはファイル名を変える必要はとくにありません。

ファイルの置き場

これらのファイルをPlatformIOでM5Stackのプロジェクトを作成して、フォルダに配置します。
そしてファイルの置き場所についてですが、PlatformIOで作ったプロジェクトフォルダのlibフォルダにあるREADMEを読めば解決します。
以下google翻訳です

このディレクトリは、プロジェクト固有の(プライベート)ライブラリを対象としています。
PlatformIOはそれらを静的ライブラリにコンパイルし、実行可能ファイルにリンクします。

各ライブラリのソースコードは、独自の個別のディレクトリに配置する必要があります
( "lib / your_library_name / [ソースファイルはこちら]")。

たとえば、次の2つのライブラリ FooBarBarの構造を参照してください。

|--lib
| |
| |--Bar
| |  |--docs
| |  |--examples
| |  |--src
| |    |- Bar.c
| |    |- Bar.h
| |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
わ>| |--Foo
| |  |- Foo.c
| |  |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
  |- main.c

これを要約すると
プログラム本体はプロジェクトフォルダのsrcフォルダに入れてください(main.c)
ライブラリは、ライブラリ用のフォルダを作って、そこに入れてください(Foo.h,Foo.c)
となります。
libフォルダに直接ライブラリのファイル(Foo.h,Foo.c)を入れても動きません。
大事なところです。
私はやらかしました
まだREADMEは続きます

そして、 src / main.cの内容:

#include <Foo.h>
#include <Bar.h>

int main (void)
{
  ...
}

PlatformIO Library Dependency Finderは自動的に依存関係を見つけます
プロジェクトソースファイルをスキャンするライブラリ。

PlatformIO Library Dependency Finderの詳細
-https://docs.platformio.org/page/librarymanager/ldf.html

READMEファイルはここまでです
つまりライブラリごとのフォルダを作って、そこにライブラリのファイルを入れておけば、

#include <Foo.h>
#include <Bar.h>

という一般的なヘッダファイルのインクルードをすることで、PlatformIOがlibフォルダの中を探してくれるということです。
なのでファイルの配置はこうなります。

srcフォルダにはサンプルプログラムファイルmain.cpp(名前は変更しています)
libフォルダにはFPS_libというフォルダを作って、その中にライブラリを構成するFPS_GT511C3.cppFPS_GT511C3.hを入れます。
これで開発環境の準備は完了です。

当然ですがこのままビルドしてもエラーが出て動きません。
しかし、統合開発環境での取り扱いができるようになりますので、ここから読み解いていきましょう。