MAX30102で作ったパルスオキシメーター

以前の記事でパルスオキシメーターまで製作したけど、せっかくESP8266にやらせているんだからグラフでモニタリングできたらなと思った。そんな中こんなサイトを見つけた。

Highchartsっていうグラフ描画用のライブラリを使って、BME280からリアルタイムでセンシングした温度・気圧・湿度を表示している様子。とりあえず、手元にBME280があったのでチュートリアルに沿って動かしてみたら結構良さそうなので心拍数、SPO2のリアルタイム表示をしてみようと思った。

Youtubeで検索すると似たようなことをやってる人がいるけど、数値が安定してない様子。もっと精度上がらないものか・・・


Arduino IDEにSPIFFSファイルシステムアップローダの導入

先ほどのBME280を使ったサイトにも書いてあるけど、Arduino IDEにSPIFFSファイルシステムアップローダを導入しておかないといけない。SPIFFSとはESP8266にファイルを保存することができる領域のことで今回はindex.htmlを置いてブラウザでグラフを表示するようにしている。日本語サイトだと下あたりが参考になりました。

最終的には「ESP8266 Sketch Data Upload」が表示されるようになればいいようです。

ここでちょっとわからないことが・・・ボード設定のFlashSizeを設定するときに

Tools > Flash Size: “?〇M (〇M SPIFFS)”

とかSPIFFSのサイズを決めたいんだけど、うちのは

Tools > Flash Size: “〇M (FS:〇KB OTA:〇KB)”

しかなくて…OTAに割く設定はできるんだけども、SPIFFSの割く設定がわからなくて・・・。

「ESP8266 Sketch Data Upload」では問題なくファイルは転送できるんですよねぇ。転送できるからまぁイイとしたんだけど、なんか気持ち悪い。

知ってる人教えてください!!


MAX30102センサー・ESP8266の接続

前の記事と一緒ですw。EPS8266とI2CでMAX30102をつなげるだけです。治具でつなげるなり、コンバータつけるなりESP8266に書き込めて実行できるようにしといてください。


dataフォルダの中のindex.htmlの作成

これもほぼ先のサイトに書いてありますが、dataフォルダの中のindex.htmlは多少いじりました。HighChartsなんて使ったこともないのでよくわかりませんでしたが、デモサイトなどをみてかるーーく変更してみました。

ちなみに私、JavaScriptも触ったことありませんので適当に予測しながら書き換えです。

心拍数とSPO2の2つの表示に変えて、それぞれのY軸の最大値・最小値を固定し、それぞれの一般的なボーダーを描記してみました。データは1秒毎に読み込んでいます。


データ吐き出し用のWebサーバーのスケッチ

スケッチは以下のように書き換えました。BME280での要領で書きかえました。以前のコードよりもノイズ処理やイレギュラーな数値を拾わないようにしました。ノイズ処理が入りすぎるとコード可読性が悪いので基本コードは前の記事のコードを参考にしてください。

※SSIDとパスワードガッツリ記載してましたw。初歩的ミスです。いまは消しましたので見た人は忘れてネ!

下の2つのライブラリをZipファイルでダウンロードして[Zip形式のライブラリのインストール]からインストールしておきましょう。ライブラリマネージャからはインストールできないみたいです。include部をみるとわかると思いますが、ESP32だとESPAsyncTCPではなくAsyncTCPをインストールしましょう。

あと、移動平均のライブラリもお忘れなく。これはライブラリマネージャからインストールできます


動作確認

1秒毎のデータをプロットしていきます。40個(40秒)がMAXです。更新間隔を調整するなどはHighChartsで行えます。Youtubeに手持ちのパルスオキシメータとの比較や息ごらえしたときのSPO2の変化の動画をアップロードしましたので参考になればとおもいます。


 

投稿者 まる

Twitter : @dinagon Instagram : @d_dinagon フォロバします!!最近、ESP/Arduinoいじりすぎでアプリ開発が進んでない。歯医者なのに歯のことはあまり触れませんw