2016/09/26

Arduinoのライブラリを作る

お仕事でArduinoのライブラリを作ることになった。
作る内容はさておき、そもそもどうやってつくるんじゃ?というところを調べておこう。
仕事の内容はネタにできないが、こういう一般的なものであればネタにできるのだよ。


いま(2016/09/26時点)のArduino IDEは、v1.6.12のようだ。
Web Editorというものもあるようだが、IDEでやる。
私はWindows10を使っているので、以下もWindows版についてとなる。

 

IDEでスケッチを作ると、拡張子は.inoになるが、ライブラリは普通のC++形式で作ればよいようだ。
ちなみに、IDEでcppやhを読もうとすると怒られる。

image

テキストエディタで作って、サンプルだけIDEで作ってビルドすることになるか。
ライブラリだからと言って.aとかにするわけではなく、ソース提供するだけになるみたいだ。

 

作る場所は、どこがよいか。
How to write libraries for the Arduino?」では「hardware\libraries」に置きそうなことを書いてあるが、そういうフォルダはない。
だいたい、XPとか書いてあるので、ずいぶん前のことじゃなかろうか。。。

Program Filesに置くものでも無いので、スケッチを置くフォルダが妥当だろう。
最初から「libraries」というフォルダはあるのだが、これはライブラリをインストールしたら配置されるようだ。
ただ、これもIDEがv1.0.5となっているから、古い可能性がある。
試しておくか。

 

まず、librariesフォルダの中に「hiro99ma」というフォルダを作り、Arduino IDEを起動する。
うん、「スケッチ>ライブラリをインクルード」には出てこない。

image

では、この中に「hiro99ma.h」という空ファイルを置いて、IDEを再起動する。
出てきた。

image

「インクルード」だから、ヘッダファイルだけあればよいということか。
選択しても、スケッチの先頭にincludeされるだけのようだ。


では、中身がないうちに、ビルドするexamplesスケッチも用意しておこう。

Arduinoがインストールされるフォルダの中にあるlibraries(うちでは「C:\Program Files (x86)\Arduino\libraries」)には、IDEインストール時に提供されたインクルードできるライブラリが入っているようだ。

見てみると、だいたいがライブラリ名のフォルダの中に、以下が置かれていた。

  • examplesフォルダ
  • srcフォルダ
  • keywords.txt
  • library.properties
  • README.adoc

srcがなく直下に置いてあるもあるし、README.adocじゃなくてreadme.mdのもあったが、まあ傾向としてはこうなっていた。

では、先ほどの「hiro99ma.h」も、srcフォルダを作って移動させて、インクルードする一覧に出てくるかやっておく。
・・・出てこない。
これはちょっと、IDEがよくないと思うが、どうだろうか。

ひとまず、srcフォルダは作らず、直下にソースファイルを置いていく。


こういう構成にした。
examplesにtest1フォルダを作り、その中にtest1.inoというビルド用スケッチを置いた。
hiro99ma.hとhiro99ma.cppは、hiro99maフォルダの中に置いている。

image

順番に、hiro99ma.h、hiro99ma.cpp、test1.inoの内容。


#ifndef HIRO99MA_H__
#define HIRO99MA_H__

class hiro99ma {
public:
    hiro99ma();
    virtual ~hiro99ma() {}

    void hello();
};

#endif /* HIRO99MA_H__ */


#include <Arduino.h>
#include "hiro99ma.h"

hiro99ma::hiro99ma()
{
}

void hiro99ma::hello()
{
}


#include <hiro99ma.h>

void setup() {
  // put your setup code here, to run once:
  hiro99ma h9m;
  h9m.hello();
}

void loop() {
  // put your main code here, to run repeatedly:

}


この内容でIDEの「検証」を行うと、エラーは発生しなかった。
試しにhiro99ma.cppを抜いてみると、ちゃんとエラーが発生したので、ビルドしているようだ。

ただ、IDEでtest1.inoを変更して保存しようとすると、書込禁止扱いになってしまった。
テキストエディタでは編集できるし、ファイルの属性も問題なさそうなので、libraries以下にあるものは書込禁止扱いにしているのかもしれない。

また、もしかしたらcppファイルはsrcフォルダに置いてもビルドしてくれるのではないか、と期待したが、ダメだった。
では、zipファイルに固めたらいけるんじゃなかろうか?

単純にzipにすると、まずライブラリとして受け入れてくれなかった。
library.propertiesファイルを置いて、適当に埋めると、インストールに成功した。
見え方は、さっきのインクルードと同じ。
ちゃんと、librariesフォルダに「hiro99ma」が展開されていた(zipインストール前に作っていたフォルダは消しておいたので、新たにインストールされたものだ)。

zipはこういう構成で、Windows標準のZIP圧縮で固めただけだ。

hiro99ma
│  library.properties

├─examples
│  └─test1
│          test1.ino

└─src
        hiro99ma.cpp
        hiro99ma.h

ちゃんとexamples\test1も「ファイル>スケッチの例」に入っていた。
ビルドすると、library.propertiesのcategoryを適当に書いたため警告が出たが、エラーは出なかった。


あれ、じゃあ、library.propertiesを置いておけば、zipじゃなくてlibrariesフォルダに置いておいてもsrcにCPPファイルを置いておけたんじゃないだろうか?

だめだ・・・。
インクルードできるライブラリの一覧に出てこない。

あまり納得できんが、zipでインストールしたときだけsrcフォルダが有効になると言うことと覚えておくことにする。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。