2021年4月24日土曜日

M5stackのSD書き込み速度

はじめに

前回、M5stackのSDカードへの書き込み確認を実施しました。今日は、書き込み速度について計測してみます。

準備

SDカードは、前回書き込めることが確認できた2種類を使用します。FAT32フォーマットをしておきます。WWW情報を調べると書き込みに20ms程度必要だという記事がありました。参考リンクを読みながらArdurinoソースを活用し書き込み時間を測定します。

書き込み時間測定

M5stackのSDカードへの書き込み時間を計測します。以下のように10byteづつ時間とデータを書き込んであとから書き込み時間を計算してグラフにします。

count,time,diff

0,4237,0
1,4338,101
2,4438,100
3,4538,100
4,4638,100
5,4738,100
  1. タイプスタンプを取得
  2. 書き込みデータを作成(10byte)
  3. SD_write (fileへappend)
  4. delay
  5. 1.を繰り返す

というプログラムをarduinoで記述して、計測データを取得しました。取得したデータは、VScode+jyupiter拡張機能、python+pandas+matplotlibを使って処理してグラフを作成しました。

★書き込みパラメータ

カウンター値、タイムスタンプ、差分の10byte程度の文字列をSDカードへwrite

ディレイ時間(2,3,10,50,100ms)と変えて、それぞれ10,000ポイント程度計測

測定結果

測定時間は書き込み処理以外の時間も含まれていますが、ざっくりの参考値です。横軸が書き込みのカウント回数、縦軸が処理時間です。上のグラフは、書き込み処理後にdelayを2,5,10,50,100ms挿入したときのグラフです。下のグラフをdeleyを0msにした時のグラフです。

delay時間を変化させても10byteほどの書き込みには影響はないようです。ただし、不定期に処理時間が遅延する場合があり、フィルター処理等をしていると影響があるかもしれません。delay無しで2-3msの書き込み時間ということがわかりました。書き込み時間10msとしても10byte程度であれば1秒間に100回は書き込めます。

ただし、他の処理を含めてプログラム全体をよく検討する必要があります。使用したマイコンはesp32なので、デュアルコアを使いこなして処理を分割できると不定期に発生する長い処理時間を回避できるかもしれません。

今日のまとめ

M5stackのSDへの書き込み時間を測定しました。10byte程度の書き込みだと1秒間に100回以上は書き込めることが確認できました。

参考リンク

【PowerMeter2020】M5StackのSD遅い<20msec周期でも遅延発生>


2021年4月17日土曜日

M5Stack SD書き込みを試してみる

はじめに

今日は、M5stackのSDカードの書き込みを試してみます。取得したセンサーデータを保管したい場合を想定します。M5stackがシリアルやWiFiで繋がっていれば、母艦PCやIoTクラウドに書きたいデータを投げれば保管できます。単独運用にて屋外だとWiFi接続が必ず可能なわけでもなく、内部メモリだけではすぐ一杯になるので、SDカードの出番となります。先人の知恵を見ていると、カードの相性問題があるという記事があり、これは試しておかないとです。

準備

今回は配線等必要ありません。M5stackとSDカードを用意すればハードはOKです。SDカードは、SD card formatterでFAT32フォーマットをしておけば問題ないようです。手元に2種類のSDカードがあるので、相性問題を含めて試してみます。

SDカードは以下の2枚です。

  • SP(Silocon Power)製 32GB
  • ELECOM製 8GB
M5StackへSDカードは、カードの端子面を上向きに挿入します。
逆だと入らないので間違わないとは思います。

ソフトウェアの準備

参考リンクのArduinoコードをほぼそのまま活用します。サンプルプログラムは、以下の動作をします。

  1. M5Stackは家ルーターにWiFI接続して、ntpサーバーをたたいて時刻同期をします。
  2. SDカード上にlogファイルをオープンする。
  3. ボタンA-Cが押されたら、時間とどのボタンを押したかという内容をcsv形式でファイルに書き込む
  4. 3.繰り返す

結果

2種類のSDカードへ問題なくデータが書き込まれていることを確認しました。 時間、どのボタンが押されたかを記録しています。

2021/4/6,9:41:26,ボタンA
2021/4/6,9:41:29,ボタンB
2021/4/6,9:41:30,ボタンC
2021/4/6,9:41:31,ボタンA
2021/4/6,9:41:31,ボタンB
2021/4/6,9:41:32,ボタンC
2021/4/6,9:41:32,ボタンC
2021/4/6,9:41:33,ボタンC
2021/4/6,9:41:33,ボタンC
2021/4/6,9:41:33,ボタンB
2021/4/6,9:41:34,ボタンB
2021/4/6,9:41:34,ボタンA
2021/4/6,9:41:35,ボタンA
2021/4/6,9:41:35,ボタンA
2021/4/6,9:41:35,ボタンA
2021/4/6,9:41:35,ボタンB

今日のまとめ

M5stackのSD書き込みを試してみました。手動でボタンを押した時間は、問題なく書き込まれことを確認できました。センサーデータ等もっと間隔の短いデータをどこまで書き込めるか更に調べていきたいと思います。

参考リンク

M5StackでSDカードにCSVデータを作成する

2021年4月10日土曜日

CAN送受信...3ノード

今回は

前回M5stackとM5stcickC plusを使って送受信試験をしました。今回は、更にesp32をCAN BUSに加えて3ノードの送受信試験をしてみました。

CAN BUSに3ノード

準備

CAN BUSに以下の3つのノードを接続します。IDは、標準の11bit、BUS速度は500kbpsです。

  • M5stack+commuモジュール[受信]
  • M5StickC Plus+mcp2562[送信] 送信ID=1
  • esp32+mcp2562[送受信] 送信ID=5

図で書くと以下のようになります。

実際の構成は、写真のとおりです。

試験結果

送受信結果をesp32+mcp2562ノードをPCにUSB接続してシリアル出力を確認します。

> Executing task: C:\\Users\\kaji\\.platformio\\penv\\Scripts\\platformio.exe device monitor <

--- Available filters and text transformations: colorize, debug, default, direct, esp32_exception_decoder, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at <http://bit.ly/pio-monitor-filters>
--- Miniterm on COM7  115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n
New standard frame from 0x00000001, DLC 8
H       e       l       l       o       C       A       N
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n
New standard frame from 0x00000001, DLC 8
M       5       S       T       A       C       K
send frame:e    s       p       3       2       c       a       n
send frame:e    s       p       3       2       c       a       n

受信専用のM5StackのTFT画面の動画はこちら。


 https://youtu.be/_ZjJ3LRkQ8s

2ノードから送信されたメッセージは、それぞれ受信されていることが確認できました。CAN BUSは共通なのでethernetと同じくCSMA/CD方式にてデータの衝突は回避しているようです。と、思ってましたがさらに調べてみると、データの衝突回避は「無損失ビット単位アービトレーション方式」が採用されています。CANデータは、500kbps程度ですが、各コントローラが更に高い周波数でデータをサンプリングして同期をとっているようです。なるほど、CAN BUS上にクロック線がないのにどうやって同期しているのかと思っていました。ノイズの多い車の中で安く確実にという観点でよく考えられています。細部はWikipediaに詳しく書いてあります。

今日のまとめ

CAN BUSに3ノード接続して送受信試験をやってみました。2ノードから送信されたデータが受信できていることを確認しました。M5シリーズを使ってCAN送受信できることがわかりました。

引き続き、実機データの吸出し、SDカードにデータの書き込みや6軸センサーとの同時記録等進めていきたいと思います。

参考リンク

【M5Stack】CommuモジュールでCAN通信

M5Stack Commuモジュール - スイッチサイエンス

Controller Area Network - Wikipedia

ページ引っ越しました

このページは、以下に引っ越しました。内容も逐次移行中です。引き続きよろしくお願いします。  https://hkaji.github.io →こちら