web-dev-qa-db-ja.com

すべてのライブラリをArduinoスケッチディレクトリに保持する

私はあなたがarduinoインストールディレクトリの「ライブラリ」フォルダの下に任意の外部ライブラリを配置することになっていることを知っていますが、私はプロジェクトのために作成したいくつかのライブラリを使用し、主にそのすべてのコードを自己完結型に保つプロジェクトを持っていますメインpdeファイルの。ただし、ライブラリをメインPDEファイルと同じディレクトリに配置して、すべてをSubversionで簡単に同期できるようにしました(複数のコンピューターで作業しています)。ライブラリを個別にバックアップおよび同期します。また、スケッチフォルダーを簡単にZip圧縮し、必要なものがすべて含まれていることを確認できるようにするためです。

ヘッダーファイルを新しいタブとしてスケッチに追加しようとしましたが、それはまったく機能しないようです...それらがarduino IDEで起動するかどうかさえ気にしないでください。

また、ライブラリをサブディレクトリ内のスケッチディレクトリに追加して(非常に好む)、次のようにリンクしました。

#include "mylib/mylib.h"

そして

#include <mylib/mylib.h>

ただし、これらは両方とも、ファイルが見つからないというエラーになります。

これは可能ですか?そして、もしそうなら、ビルドのメインファイルにそれらを含めるにはどうすればよいですか?できれば独自のサブディレクトリで。

42
Adam Haile

同じ問題がありました。 Arduino IDE> 1.8。で解決しました。参考文献によると、新しいIDEの専門分野(?)のようです(下のリンクを参照)。

ライブラリフォルダを作成する前に、「src」サブディレクトリを追加する必要があります。したがって、基本的にプロジェクトは次のようになります。

/SketchDir (with *.ino file)  
/SketchDir/src  
/SketchDir/src/yourLib (with .h and .cpp file)  

最後に、スケッチで参照します:

#include "src/yourLib/yourLib.h"  

それ以外の場合、「src」フォルダーが欠落している場合、yourLib.cppファイルが見つからないというエラーメッセージが表示されます。

注:Windowsシステムを使用しており、実際にはVS CodeがArduino IDEのラッパーとして使用されています。ただし、両方ともIDEこの構造でコンパイルします。

参照: https://forum.arduino.cc/index.php?topic=445230.

13
Uwe Hafner

私が持っているスケッチについては、"*.h"および"*.cpp"ライブラリファイルは実際にはスケッチと同じフォルダにあり、"someheader.h"sketchメニューとadd file...スケッチを閉じて再度開くまで、ファイルは表示されません。

9
KyleWpppd

仰るとおりです;これはソフトウェアを開発する耐え難い方法です。メインプログラムと同じディレクトリにある必要があるすべてのファイルが必要です!

これを回避するには、makeを使用して、.hおよび.hソースから単一の.cppファイルをまとめます。これは このMakefile で使用されています。

PREPROCESS=gcc -E -C -x c -iquote ./src
# -E : Stop after preprocessing.
# -C : Don't discard comments.
# -x c : Treat the file as C code.
# -iquote ./src : Use ./src for the non-system include path.

TARGETS=sketches/morse/morse.h

all: $(TARGETS)

clean:
    rm $(TARGETS)

%.h: %.h.in
    $(PREPROCESS) $< -o $@

Arduinoはファイルの末尾について非常に気難しいです-.cppまたは.ccファイルをそのディレクトリに配置すると、ソースで自動的に使用され、.cpp以外のものを含めることはできません、.ccまたは.h-これが唯一の方法です。

JavaScriptファイルをまとめるのにも同様のトリックを使用します here

これには、ファイルの編集後にmakeを実行する必要がありますが、とにかく外部エディター(Emacs)を使用しているため、これは面倒な作業ではありません。

8
Tom Swirly

残念ながら、Arduino IDEはひどく、改善の兆候はありません。実際のビルドシステムはないため、単一のディレクトリにあるプログラムのみをビルドできます。

唯一の実際の解決策は、メイクファイルを作成することです。その後、実際のIDEを使用できます。いつか誰かがQtCreatorのArduinoプラグインを書くことを期待しています。

次に、メイクファイルの例を示します。

http://volker.top.geek.nz/arduino/Makefile-Arduino-v1.8

4
Timmmm

これと同じ問題が発生したので(コードを自己完結させたいので)、メモを書き留めます。 MyPdeSketch.pdeを使用してMyLibClass.cppを使用しているとします。それから私はそれをこのように整理しました

/path/to/skdir/MyPdeSketch/MyPdeSketch.pde
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.h

(原則として、ここの/path/to/skdir/~/sketchbook/と同等です)

私のために働いたのは次のようなものです:

mkdir /path/to/arduino-0022/libraries/MyLibClass
ln -s /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.* /path/to/arduino-0022/libraries/MyLibClass/

IDEの再起動後、MyLibClassが[Sketch/Import Library]の下に表示されます。

ライブラリクラスファイルが他のライブラリファイルを参照する唯一の方法は、それらがすべて同じメインarduino-0022/librariesフォルダー(おそらく)にあると仮定して、( '現在の場所'から)相対的に含めることです。関連するStack Overflowの質問:Arduino IDEを使用して別のライブラリのライブラリを含めることは可能ですか?)。

そうでない場合は、手動でディレクトリを作成してからファイルをシンボリックリンクする代わりに、MyLibClassディレクトリを直接arduino-0022/librariesにシンボリックリンクすることも可能です。同じ理由で、代替場所~/sketchbook/librariesへのシンボリックリンクにも問題が生じる可能性があります。

最後に、おそらくより良い組織は次のとおりです。

/path/to/skdir/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyLibClass/MyLibClass.h
/path/to/skdir/MyLibClass/MyPdeSketch/MyPdeSketch.pde

... librariesへのシンボリックリンクの後、ArduinoのMyPdeSketchライブラリの例の下にMyLibClassを強制的に表示しますIDE(ただし、単一のディレクトリの下に複数のクラスフォルダーを含める必要がある場合は、適用できない場合があります。

編集:または Makefile を使用します。これはavr-gccで直接動作し、Arduino IDE(この場合、スケッチブックのファイル編成はややゆるい)..

3
sdaau

何が正確に必要なのか知っていると思う。

MYPROJ_FOLDERというプロジェクトフォルダーがあり、Librariesを含めたいカスタムライブラリ用のより多くの子フォルダーを含むフォルダー。

次のことを行う必要があります。1-次のようにフォルダーを作成します。

-MyProjFolder
-MyProjFolder/MyProjFolder        

そして、拡張子が.inoのフォルダー名でファイルを作成します-MyProjFolder/MyProjFolder/MyProjFolder.ino

2-ライブラリフォルダーの作成:-MyProjFolder/libraries <<<<< nameはオプションではありません。

3-その後、独自のライブラリを作成します-MyProjFolder/libraries /lib1-MyProjFolder/libraries/lib1/lib1.cpp -MyProjFolder/libraries/lib1 /examples<<<<これはフォルダーです-MyProjFolder/libraries/lib1/examples /example1

ステップ3を必要なだけ繰り返します

http://arduino.cc/en/Guide/Libraries も確認してください

1
M.Hefny

私のために働いたのは、スケッチディレクトリの下に「src」などのディレクトリを作成し、その下に各個人ライブラリのディレクトリを作成することです。

例:

ObstacleRobotというプロジェクトがあり、その下に障害物ロボット(IDEによって自動的に作成された)という名前のスケッチ用のフォルダーがあり、そこに私のスケッチ「obstacleRobot.ino」があります。

これまでに次のものがあります。

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino

次に、このプロジェクトに完全に関連し、IDEライブラリに含めることは意味がありませんでしたが、実際にはロボットの各部分にこれを行いたいしかし、私はまだそれに取り組んでいます。

最終的に私のために働いたのは:

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino
       /src
          /Sonar
             Sonar.h
             Sonar.cpp

次に、メインスケッチで行う必要があるのは、次のようにインクルードを記述することです。

#include "src/Sonar/Sonar.h"

そして、それだけです。

0
RaistlinMolina