質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

SPIFFS領域へのファイル作成や読みこみのコードでエラー発生。

MaeharaKenji
MaeharaKenji

総合スコア83

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

1回答

0グッド

1クリップ

506閲覧

投稿2022/10/13 06:57

編集2022/10/13 07:20

前提

現在、ESP32C3用のプログラムを作成しています。

実現したいこと

SPIFFS領域へファイルを作成したり、読み込みためのプログラムを追加してビルドするとエラーが発生してしまいます。
プログラム作成では下記のサイトを参考にしました。
ESP32でSPIFFSにファイルを読み書きする方法 | 次世代情報技術研究所(仮)

何かインクルードするべきライブラリなどありますでしょうか?

解決方法をご教示の程よろしくお願い致します。

発生している問題・エラーメッセージ

[Starting] Analyzing sketch 'OnDemandAP.ino' [Warning] Output path is not specified. Unable to reuse previously compiled files. Build will be slower. See README. 構成をロード中… パッケージを初期化中… ボードを準備中… 検証中… OnDemandAP:11:14: error: variable or field 'listDir' declared void void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ ^~ OnDemandAP:11:14: error: 'fs' has not been declared OnDemandAP:11:22: error: 'fs' was not declared in this scope void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ ^~ d:\mywork\Arduino\CarDoorChecker\OnDemandAP.ino:11:22: note: suggested alternative: 'fls' void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ ^~ fls OnDemandAP:11:26: error: expected primary-expression before 'const' void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ ^~~~~ OnDemandAP:11:56: error: expected primary-expression before 'levels' void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ ^~~~~~ OnDemandAP:42:15: error: variable or field 'readFile' declared void void readFile(fs::FS &fs, const char * path){ ^~ OnDemandAP:42:15: error: 'fs' has not been declared OnDemandAP:42:23: error: 'fs' was not declared in this scope void readFile(fs::FS &fs, const char * path){ ^~ d:\mywork\Arduino\CarDoorChecker\OnDemandAP.ino:42:23: note: suggested alternative: 'fls' void readFile(fs::FS &fs, const char * path){ ^~ fls OnDemandAP:42:27: error: expected primary-expression before 'const' void readFile(fs::FS &fs, const char * path){ ^~~~~ OnDemandAP:62:16: error: variable or field 'writeFile' declared void void writeFile(fs::FS &fs, const char * path, const char * message){ ^~ OnDemandAP:62:16: error: 'fs' has not been declared OnDemandAP:62:24: error: 'fs' was not declared in this scope void writeFile(fs::FS &fs, const char * path, const char * message){ ^~ d:\mywork\Arduino\CarDoorChecker\OnDemandAP.ino:62:24: note: suggested alternative: 'fls' void writeFile(fs::FS &fs, const char * path, const char * message){ ^~ fls OnDemandAP:62:28: error: expected primary-expression before 'const' void writeFile(fs::FS &fs, const char * path, const char * message){ ^~~~~ OnDemandAP:62:47: error: expected primary-expression before 'const' void writeFile(fs::FS &fs, const char * path, const char * message){ ^~~~~ OnDemandAP:79:17: error: variable or field 'appendFile' declared void void appendFile(fs::FS &fs, const char * path, const char * message){ ^~ OnDemandAP:79:17: error: 'fs' has not been declared OnDemandAP:79:25: error: 'fs' was not declared in this scope void appendFile(fs::FS &fs, const char * path, const char * message){ ^~ d:\mywork\Arduino\CarDoorChecker\OnDemandAP.ino:79:25: note: suggested alternative: 'fls' void appendFile(fs::FS &fs, const char * path, const char * message){ ^~ fls OnDemandAP:79:29: error: expected primary-expression before 'const' void appendFile(fs::FS &fs, const char * path, const char * message){ ^~~~~ OnDemandAP:79:48: error: expected primary-expression before 'const' void appendFile(fs::FS &fs, const char * path, const char * message){ ^~~~~ exit status 1 [Warning] Failed to generate IntelliSense configuration. [Error] Analyzing sketch 'OnDemandAP.ino': Exit with code=1

該当のソースコード

c

1#include "FS.h" 2#include "SPIFFS.h" 3 4 5 6#define FORMAT_SPIFFS_IF_FAILED true 7 8String gSerialName; 9 10 11void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ 12 Serial.printf("Listing directory: %s\r\n", dirname); 13 14 File root = fs.open(dirname); 15 if(!root){ 16 Serial.println("- failed to open directory"); 17 return; 18 } 19 if(!root.isDirectory()){ 20 Serial.println(" - not a directory"); 21 return; 22 } 23 24 File file = root.openNextFile(); 25 while(file){ 26 if(file.isDirectory()){ 27 Serial.print(" DIR : "); 28 Serial.println(file.name()); 29 if(levels){ 30 listDir(fs, file.path(), levels -1); 31 } 32 } else { 33 Serial.print(" FILE: "); 34 Serial.print(file.name()); 35 Serial.print("\tSIZE: "); 36 Serial.println(file.size()); 37 } 38 file = root.openNextFile(); 39 } 40} 41 42void readFile(fs::FS &fs, const char * path){ 43 Serial.printf("Reading file: %s\r\n", path); 44 45 File file = fs.open(path); 46 if(!file || file.isDirectory()){ 47 Serial.println("- failed to open file for reading"); 48 return; 49 } 50 51 Serial.println("- read from file:"); 52 53 while(file.available()){ 54 Serial.write(file.read()); 55 //Serial.println(file.read()); 56 } 57 file.close(); 58} 59 60 61 62void writeFile(fs::FS &fs, const char * path, const char * message){ 63 Serial.printf("Writing file: %s\r\n", path); 64 65 File file = fs.open(path, FILE_WRITE); 66 if(!file){ 67 Serial.println("- failed to open file for writing"); 68 return; 69 } 70 if(file.print(message)){ 71 Serial.println("- file written"); 72 } else { 73 Serial.println("- write failed"); 74 } 75 file.close(); 76} 77 78 79void appendFile(fs::FS &fs, const char * path, const char * message){ 80 Serial.printf("Appending to file: %s\r\n", path); 81 82 File file = fs.open(path, FILE_APPEND); 83 if(!file){ 84 Serial.println("- failed to open file for appending"); 85 return; 86 } 87 if(file.print(message)){ 88 Serial.println("- message appended"); 89 } else { 90 Serial.println("- append failed"); 91 } 92 file.close(); 93} 94 95 96void setup() { 97 98 if (!SPIFFS.begin(true)) { 99 Serial.println("An Error has occurred while mounting SPIFFS"); 100 return; 101 } 102 103} 104 105void loop() { 106 // put your main code here, to run repeatedly: 107 108 109} 110 111 112 113 114 115

試したこと

気になる点があるのですが、

今まで、マルチタスク機能やAWS機能を入れたコードを作成していましたが、正常に動作しない箇所があるため、一旦上記コードのようにほぼsetup,loopのシンプルなものにして再ビルドしていました。
そしてとりあえずファイル操作のプログラムを追加してみたところ、今回の不具合に遭遇しました。

上記のファイル操作に関するプログラムは別のファイル”spiffs.ino”というファイルにいままではまとめていました。
その時は、正常にビルド成功しており、プログラムも動作しておりました。その時のgitのリビジョンに戻れば、正常にビルドできます。

今回setup,loop関数のあるファイルにまとめる作業を行ってみたところ、現在の不具合現象が発生しております。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

ozwk

2022/10/13 08:12 編集

inoファイルが複数あったりしませんか …してるようですね
MaeharaKenji

2022/10/13 08:38 編集

現在のgitのリビジョンでは、OnDemandAP.ino以外のファイルはすべて削除しました。 元々上記のファイル操作関連のコードはspiffs.inoに書かれていて、そのgitのリビジョンに戻せば正常にビルドできる感じです。

回答1

0

ベストアンサー

Arduinoではinoファイルが複数あると1つのファイルに結合してコンパイルします
使っていないinoファイルを削除してみてください

投稿2022/10/13 08:34

ozwk

総合スコア13084

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

MaeharaKenji

2022/10/13 08:36

回答頂きありがとうございます。 現在、わざとOnDemandAP.inoだけにして、他のファイルはすべて削除してみたのですが・・・ 元々上記のファイル操作関連のコードはspiffs.inoに書かれていて、そのgitのリビジョンに戻せば正常にビルドできる感じです。
MaeharaKenji

2022/10/13 08:41

大変申し訳ありません。同じフォルダ内に、AWSIotSecrets.hという、インクルードはしていないファイルをそのままにしていて、それを削除したらビルド成功を確認しました。 
ozwk

2022/10/13 08:44 編集

新しくプロジェクトを作ってみてもそうなりますか? こちらで試してみました(ArduinoIDE)が コンパイルできました …と書いていたら解決したようですね

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。