【M5】M5StickCのFlashメモリにSPIFFSでデータログ<意外と便利>

M5Stackは、マイクロSDカードスロットがついているので、単独でデータログできるのですが、M5StickCは、小型ゆえ記憶媒体がついてないとあきらめていたのですが、SPIFFSというSPI経由でFlashメモリーヘファイル読み書きできるファイルシステムが用意されてましたので使ってみたらプログラムも簡単で結構便利でした。
※注意
SPIFFSでデータログをいろいろやり始めたのですが、数百msecに1回の連続的appendでエラーが発生することが
ありました。デバッグしてみると1回のappendするデータ長が10バイト以上になるとエラーがでやすいです。
長いデータの速い連続的なappendをするときは、データを10バイト以下に切って、複数回に分けてappend書き込みする方法でエラーを逃げました。writeだと何も問題がなかったので、appendがどうも不具合があるような気がします。もしかすると私のプログラムにどこか別のバグがあるかもしれませんが、ご参考までにメモしておきます。

●SPIFFSの基本動作
 下記ページに備忘録保存してあります。
基本的な動作は、②のリンク記事内で備忘録してあります。
書き込みが遅いですが、十数バイトのデータなら数msecで記録できるので
サンプリング周期が10msecより遅い現象なら大丈夫だと思います。
①公開されている基本動作サンプルPgm
GITからESP32 ArduinoでSPIFFSを使うテストライブラリー
があります。https://github.com/espressif/arduino-esp32/blob/master/libraries/SPIFFS/examples/SPIFFS_Test/SPIFFS_Test.ino

②これを使って、自分で基本動作を実験した結果は、下記記事に詳細が書いてあります。

【M5】M5StickCでSPIFFS動作実験<書き込み遅い16byte/msec>

●SPIFFSの記録容量の設定
おなじみLangShip様のページに解説があります。

①SPIFFSの説明

https://lang-ship.com/blog/work/m5stack-atom-echo-spiffs-mp3/

②SPIFFS容量の設定方法
デフォルトで1.5MB、OTA無設定で2MB、minimal設定で1.9MBあるので
ArduinoIDEのTOOL>PartitionSchemeをNoOTA(LargeApp)にすれば
2MB設定に拡張できます。解説は下記Lang-Ship様リンクです。

https://lang-ship.com/reference/unofficial/M5StickC/Storage/Partition/

 

●応用例:COCOAカウンターの接触ログをSPIFFSでログした


◆厚労省の仕様のCOCOAの課題点
課題1:個人情報保護やりすぎ
接触相手の情報が一切残りません、接触時刻、場所、端末のBLEアドレスなどCOCOAでは、検知しても保存されません。

 

課題2:過去2週間、1m以内、15分以上でないと接触と認められない
新型コロナ、まだ、確定した性質が少ない未知のウィルスなので、検知するための基準は、決められないのが現状ですが、厚労省はエイヤで決めてしまいました。

■M5SickCのBLEを使ったCOCOAカウンタは、QIITAで公開されてます。前回の解説記事です
実用性は、Androidスマホ版のココア補完アプリが高機能なのでそちらを
使えばいいと思いますが、私は、あいにくiPhone使いなので、Androidスマホでは、ココアをインストールできるバージョンの機種をもってないので使えませんので、M5Stickで遊んでみます。
M5StickCのプログラムは、GITのGISTに置いてあります。
https://gist.github.com/dj1711572002/4739a0168460bc8cfe45da4cb0f1d8b9

電源オンでプログラムがスタートしてBLEが届く範囲のCOCOA端末を検知してアドレスを取得してカウントします。5秒ごとにスキャンして、ログします。ログデータは、ログ時間(スタートからの秒数)RSSI(電波強度)相手端末アドレス、端末数の4つのデータです。

操作1:ログファイルダウンロード(Bボタン押リリース)
ログファイルをPCへダウンロードするには、USBシリアル接続して
TeraTermで接続してからBボタン(右上)を押すと、readFileが動いて、
TeraTermへログファイルのデータが送信されます。TeraTermのログファイルをEXCELなどで読み込み解析します。

操作2:ログファイルを消去リセット(Aボタン 一番大きな正面のボタン 押リリース)
Aボタンを押して離すと、ファイルが消去されてプログラムが
リスタートしてゼロ秒からカウントしなおします。

■その後もSPIFFS関係でプログラムを発展させてます。

●2021年1月6日 SPIFFS  UIプログラム追加
これで、ファイル作ってメモ書きして保存して、DirからReadできます。
いじってみてSPIFFSの感触を味わってください。

【M5】SPIFFSでキーボードからファイルWrite/Read/Listでメモ書き<SPIFFSいじる>

●2021年1月25日追記
結局最終的にPCで見るので、一時ログしたデータを、WEBサーバーにアップロードしてファイル保存しておけば
PCからFTP経由でファイルを選択してダウンロードできるのでその方法のほうが便利だと思います。
一時的にSPIFFSでファイル1個にまとめたら、自動でWEBサーバーにアップロードすればあとはPCで処理すればいいという方法です。M5Stackで実験してみたら、Rolipop月100円サーバーでOKでしたので、これからは、M5系のデータは全部WEBサーバー保存しようかと構想してます。まずは、WEBサーバー接続の基礎実験結果です。
SDがないM5StickCとかM5Atom用にもSPIFFSを操作して、WEB SERVERにファイル送信して保管させるプログラム
作ってみました。デバッグ中ですが、ほぼ動作します。
https://gist.github.com/dj1711572002/31f73d5913ce249b464f583f4183c4d5

【M5】M5StackからWebサーバーへ測定データを送信して保管した<115200bps付近の速度出る>

 

●装備
 電池が内蔵では不足なので、京商ドローンレーサー1000mAHを直接BATへ突っ込んであります。
  電圧の余裕がM5StickCのバッテリーは3.5V以上でないと動作しません。LiPO電池公称は3.7Vなので
  余裕がないのですが、満充電だと4.1Vくらいになっているので、満充電から3.5Vくらいでつかえます
  多分、数日間連続で使えると思います。
※写真のリポ膨れている原因は過充電だそうです。
https://drone-tech.biz/forfun/drone-battery-guide-no1/

2 thoughts on “【M5】M5StickCのFlashメモリにSPIFFSでデータログ<意外と便利>”

  1. はじめまして。
    突然のコメント失礼いたします。
    現在、【M5】M5StickCのFlashメモリにSPIFFSでデータログ<以外と便利>を参考にさせていただいて、プログラムを制作しているのですが、操作1でteratermでログデータをどのようにファイルとして出力しているのか分からず、ご教示いただきたいです。
    ボタンを押すと
    Reading file: /hello.txt
    – read from file:
    sec,rssi,address,devNum
    と出てくるのですが、ログファイルはどのように設定等すれば取得できるのでしょうか。
    お忙しいところ恐縮ですが、ご教示いただけますと幸いです。よろしくお願いいたします。

    1. お待たせしてすみません。コメント欄は、週末にしか見ませんので、失礼いたします。メールでも差し上げましたが、一案としてTeraTermの自動ログ機能を使う手があります。2案としては、使い勝手の仕様を決めて、SPIFFSのファイル読み込みからBlueToothでスマホにCSVファイルとして転送するとかの手もあります。ご意見いただければ幸いです。宜しくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です