LoginSignup
2
0

More than 3 years have passed since last update.

Flashair からArduinoでテキストを読み出している際、Wi-fiがストップする件について

Posted at

作ろうとしているもの

ただいま、Flashairに書き込まれたデータを読み出して、枯山水を自動で描くマシーンを作っています。

使用しているもの

  • Arduino Mega 2560
  • SD基盤(自作)
  • Flashair W-03 8GB (ソフトウェアV3.00.02, STAモードで使用)

問題

今回の問題は単に自分の環境かもしれません。
他の人で同じような現象に悩んでいる、あるいは同じようなこと(FlashairからSD.hを利用した読み出し)をしているが動いているという方がいましたらご報告ください。

ただ、どうもFlashairをからデータを繰り返し読むコードを実行するとFlashairのWi-fiがストップしている様子です。
今回実行しているファイル読み出し部分を超簡単に書くと以下のようなコードになります。
具体的にはSDのマウントを行ってからWi-fiが停止するようです。
(実際はcsvファイルの構文解析処理などが入りますが、以下のように読み出しを定期的に行うコードだけでもWi-fiが停止していました。)

// wi-fiが停止する
SD.begin(A0);
while(1){
  char c;
  delay(1000);
  File myFile = SD.open("TEST.TXT",FILE_READ);
  c = myFile.read();
  myFile.close();
}

解決策

ダミーファイルを作って定期的に書き込みを行えば通信が維持します。

// これなら動く
SD.begin(A0);
while(1){
  char c;
  delay(1000);
  File myFile = SD.open("TEST.TXT",FILE_READ);
  c = myFile.read();
  myFile.close();

  // ダミーファイル書き込み
  myFile = SD.open("TEST2.TXT",FILE_WRITE);
  myFile.seek(0);        
  myFile.println("hey");
  myFile.close();
}

考察

最初これが発生したときは、閃 ソラ(@Hirameki_Sora)様やあおいさや(@La_zlo)様の助言を頂き、電源周りを疑って安定化電源を使うなど行いましたが、効果がありませんでした。

そこで試しに公式のサンプルを動作させたところ正常に動きました。これのSD処理周りを抜き出して超単純に書くと以下のようになります。

// これなら動く
SD.begin(A0);
while(1){
  delay(1000);
  File myFile = SD.open("TEST.TXT",FILE_WRITE);
  myFile.println("hey");
  myFile.close();
}

どうやらSDをマウント(SD.begin())しても、ファイルに書き込む操作(File.println())が定期的に行われていればwi-fi機能が持続するらしい…です。
SDライブラリとFlashairの組み合わせの都合かはわからないのですが、なんだか気持ち悪い結果になりました。
この書き込み操作を何かしらのコマンドで置き換えればかなり無駄が減ると思います。
何かより良い方法があれば追記していきたいと思います。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0