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

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

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

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

Q&A

解決済

1回答

1782閲覧

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

MaeharaKenji

総合スコア86

Arduino

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

0グッド

1クリップ

投稿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/ツールのバージョンなど)

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2022/10/13 08:12 編集

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

2022/10/13 08:38 編集

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

回答1

0

ベストアンサー

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

投稿2022/10/13 08:34

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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)が コンパイルできました …と書いていたら解決したようですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問