血圧計の解析(5)

挫折寸前! まずは状況を確認。

  • そもそも、単体だときちんと更新されているのか? → されてた
  • M5StickCをつないでから、血圧計をコールドブートさせたら? → エラーがでて起動しなかった。
  • オシロスコープだけをつないだら? → 普通に起動するし、記録される

M5StickCがわるいみたい。

オシロスコープのプローブが壊れた?

ところで、またオシロを取りだしてつかってたんだけど、 片方のプローブ(ここではプローブAとする)からデータが読めなくて焦った。

血圧計を壊したか、(パターンをはがしてしまった)配線が取れたか、とか調べたら問題なくて、 別のプローブBでは読める。 オシロスコープのポート自体にも問題はなくて、 最終的にプローブAが怪しいという事になった。

オシロについている公正用信号も読めない。

プローブの先のクリップがあるキャップを外して、ピンにして押し当てると読める。

更に組合せをためしたら、 プローブAについていたキャップAを、プローブBにつけても動くし、 プローブBについていたキャップBを、プローブAにつけても動くのを発見した。

つまり、プローブAにキャップAをつけたら、断線していて、 ほかの組み合わせでは問題は発生しない。

たぶん、前回使った時に、キャップとプローブの組み合わせを反対にしてしまったのだろう。

全く同じにみえるのに、何で組み合わせがあるの? 予備のプローブを買おうかな。

GPIOの高速化

一昨日考えていた本命の方を試してみた。 フラッシュメモリに保存されなくても、 サーバーに保存されてればそれでいいはずだし。

一昨日、調べた所に、 高速化させるためのコードがあったので、 このコードをコピペしてみた。

試してみたら、まだビット欠けが残ってる。

駄目か。

Arduino UNO を使ってみる

手元にあった他のデバイスという事で、Arduino UNOで同じ事を試してみる。

Arduinoの場合、高速化を真面目にやらないと間にあいそうにない。

幸い、 Arduinoで似たような事をやってる人がいた。。 これは高い、Arduino Mega 2560を使っているが、 メモリを大量に使いたいからのようなので、 とりあえず、これをUNOに移植してみた。

一旦に、波形を全部バッファに保存して、後でゆっくりデコードしてる。

あと、1つのポートにSCLとSDA両方をつないで、一気に両方読む事でスピードを稼いでる。

適当な移植なので、たぶんバグがありそうだけど、 とりあえず、メモリを減らしたのでパケット先頭だけだけど、 問題なく読めた。

また、つないだままでも、起動や保存ができるのを確認した。

つづく

さて、これからどうしたものか。

  1. ESP32がどんな悪い事をしてるのかつきとめてなおす。
  2. 血圧計 - Arduino UNO (スニッフィング) - M5StickC
  3. 血圧計 - Arduino UNO (ソフトi2c) - M5StickC
  4. 血圧計 - レベルシフタ - Arduino UNO (ハード i2c) - M5StickC

1ができれば、いいんだけど、ちょっと検索した感じでは駄目そう。 2は今日やったののつづきだけど、メモリが足りなさそう。

Arduino UNOにi2cを話させるとすると、電圧が問題になりそう。 Arduinoは5Vだから、3V動作してる血圧計に信号を送ると壊れそう。 ソフトi2cで、ライブラリをカスタマイズして工夫して回避するか、 レベルシフタを導入するか。どっちがいいかな。

他の方法としては、Arduinoを3V動作にするとか。 その場合は、動作速度を落とする必要があったはず。

あと、ArduinoとM5StickCの間で通信するのも試さないと。

コンポーネントが増えると大きくなりそうで嫌だな。 ケースとか考えないといけないかも。