はじめに
最近流行りのM5Stackの波に乗りたいと思い、余り使ったことがなかったArduino IDEを触っていてハマった点の1つを共有します。
解決したら大したことない、むしろ超初歩体で恥ずかしいぐらいのことだったかもしれないですが、意外と知らないと何が起きているかわからない?と思っていたので記事にしてみました。
何のエラーが出ていたか
結論に近い話から書きます。
私がArduino IDEで出たエラーは
collect2.exe: error: ld returned 1 exit status
です。
原因
原因は、.inoファイルにライブラリと同じファイルが置いてあったことでした。
ライブラリは設定にもよるかもしれませんが、
C:\Users\UserName\Documents\Arduino\libraries
に配置されています。
ここにある.ccp, .hと同じファイルをスケッチと同じディレクトリに置くと悪さをします。
気をつける点
スケッチに置くファイルとライブラリのファイル確認
原因で書いた通り、ライブラリにあるものはスケッチ(.ino)のディレクトリには置く必要はありませんので削除します。
ヘッダフィアルの参照
ライブラリのヘッダを参照する場合は<>で囲みます。
#include <hoge.h>
スケッチ(.ino)のディレクトリ以下のファイルは参照する場合は""で囲みます。
#include "piyo.h"
ビルドファイルの削除
これが結構ハマった点ですが、すぐにこれはファイル構成が悪いと気づき、スケッチディレクトリのファイルを削除しましたが、改善されず混乱しました。
これは一度作成したビルド済みのファイルが残っていたことが原因のようです。
私の場合は、事前にIDEのファイル/環境設定の
C:\Users\UserName\AppData\Local\Arduino15\preferences.txt
を編集し、
build.path=C:\Users\UserName\AppData\Local\Temp\arduino_build
を追加していました。
この中の
build.path=C:\Users\UserName\AppData\Local\Temp\arduino_build\sketch
に以前のファイルが残っているとビルドエラーが改善されないことがあります。
なのでその場合はsketch以下のファイルを削除した方が良いです。
Arduino IDEはビルドクリーン的なものは存在しないんでしょうか。
コンパイルログを全て表示
なぜ失敗しているか把握するために、先程と同じ環境設定からコンパイラの警告
を全て
に選択します。
そうすると詳細なコンパイルエラーが表示されるので原因が推測出来ます。
具体的に何でエラーが出たか
実際に私がやろうとしていたことは、M5StackでAvatar+AquesTalkTTSを使ってしゃべらせることです。
ExampleはライブラリマネージャでM5Stack
で検索すると出てくるM5Stack_Avatar
をInstall済みの状況です。
スケッチ例のM5Stack_Avator/talkではしゃべることは確認出来ていたので、次にほぼ同じ内容のコードでinoファイルを作成し、AquesTalkTTS.ccp/.hをinoと同じディレクトリに配置してビルドしました。
AquesTalkTTS.ccp/.hは以前Exampleを動かすときにlibrariesに配置していたため今回の問題が発生しました。
参考サイト
こちらにArduino/ESP32系の注意点が多数出ているので参考になります。
ESP32 ( ESP-WROOM-32 , M5Stack )自分的 トラブルシューティング まとめ