自宅で仕事をしていると、急激に眠くなることがあります。で、ふと思ったのが、CO2濃度との関連。CO2濃度が高くなってくると眠くなる、と聞いたことがあります。
そこで、以前AliExpressで買っていたCO2センサMH-Z19BをESP32に接続してCO2濃度を測定してみたいと思います。ベースとなる部分は少し前に動作確認した18650のリチウムイオン電池とOLEDがついているボード(これもAliExpressで購入)を使って作ります。
“ESP32でCO2を測定” の続きを読む趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
自宅で仕事をしていると、急激に眠くなることがあります。で、ふと思ったのが、CO2濃度との関連。CO2濃度が高くなってくると眠くなる、と聞いたことがあります。
そこで、以前AliExpressで買っていたCO2センサMH-Z19BをESP32に接続してCO2濃度を測定してみたいと思います。ベースとなる部分は少し前に動作確認した18650のリチウムイオン電池とOLEDがついているボード(これもAliExpressで購入)を使って作ります。
“ESP32でCO2を測定” の続きを読むLinuxMintで中華激安HDMIキャプチャを買ってみました。
PC側のインタフェースはUSB2.0またはUSB3.0、形状はドングル形状です。価格は約10ドル位。自分が買ったときはUSB2.0モデルだと10ドルを少し切って、USB3.0モデルは10ドルを少し超えました。USB3.0だと、FullHDで60fpsのキャプチャができる、という違いがありますが、普通の使い方ではあまり意味はないように思います。まあ、僅かな差なので、どう考えるかですが。
論理インターフェースの方は、UVC(USB Video Class)でPCからはカメラに見えるので、通常はOS側のドライバ無しで動作します。
Webサイトによっては「音声がモノラルになる」という記述も見かけたような気もしますが、LinuxMint 20.3環境では音声もステレオで(少なくともUSB3.0モデルは)キャプチャできました(が、問題があります)。
デバッグでmosquitto_subを使って、オプションにユーザー名とパスワードを記述すると、ps コマンドであらわになってしまいます。ユーザーごとのデフォルトオプションを設定して、これを回避します。
説明は mosquitto のマニュアルに記載があります。具体的には、 ~/.config/mosquitto_sub に1行ずつオプションを記述していけばOKです。
なので、以下の内容のファイルを作って、デフォルトオプションを設定します。
-h 接続先ホスト -p 1883 -u (ユーザー名) -P (パスワード)
これで、他のオプションのみをコマンドラインで記述してmosquitto_subを起動します。
隠すほどのデータがあるわけではないのですが、nginxにbasic認証をかけておきます。
WebArena上のVPSで動かしているFlaskのサイトをよく見ると、自力でグラフの横軸を出しているところで、時刻が9時間ほど遅れているのを発見しました。たぶん、これはタイムゾーン設定だということで、これを修正することにしました。
root@i-xxxxxxxx:~# date Tue Aug 18 14:52:27 UTC 2020 root@i-xxxxxxxx:~# timedatectl Local time: Tue 2020-08-18 14:52:33 UTC Universal time: Tue 2020-08-18 14:52:33 UTC RTC time: Tue 2020-08-18 14:52:34 Time zone: Etc/UTC (UTC, +0000) System clock synchronized: yes systemd-timesyncd.service active: yes RTC in local TZ: no root@i-xxxxxxxx:~# timedatectl set-timezone Asia/Tokyo root@i-xxxxxxxx:~# timedatectl Local time: Tue 2020-08-18 23:52:56 JST Universal time: Tue 2020-08-18 14:52:56 UTC RTC time: Tue 2020-08-18 14:52:57 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes systemd-timesyncd.service active: yes RTC in local TZ: no root@i-xxxxxxxx:~# date Tue Aug 18 23:53:02 JST 2020 root@i-xxxxxxxx:~#
ということで、無事にタイムゾーンをJSTに設定しました。
ESP8266のSmartConfigのサンプルをそのままESP32で動かすと、上手く動作しません。簡単に言うと、一度SmartConfigでSSID/パスワードを設定しても覚えてくれませんので、毎回設定しなければなりません。
で、調べてみると、ESP32ではこちらの記事のように設定を記憶する不揮発領域の処理は別処理になっているようです。参考にさせていただいて、忘れないようにしてみます。
次にESP32でMQTTにトライしてみます。
先のESP8266用のMQTTクライアントを改造して動かしてみます。(何箇所か引っかかったところがあり、こちらの記事を参考にさせていただきました)
久々に、ESP32で遊んでみます。
今回のターゲットのボードは
https://www.google.com/search?q=wemos+wifi+%26+bluetooth+battery+esp32
で見つかるものによく似ているのですが、微妙に違うようにも思います。とりあえず、写真のイメージが同じに見えるところにあった端子表をコピペしておくことにしました。
電池で動かす&自己発熱の抑制のため、こちらの記事を参考にさせていただいて、ESP8266をディープスリープモードで動かしてみました。
自作のESP8266ボードは回路自体は昔からディープスリープには対応していたので、ソフトウェアだけの修正で動作しました。(注:回路図上、電池電圧の測定や、ソフト・パワーオフの回路、ADコンバータやEEPROMなどもありますが、これらは搭載していません)
ソフトウェアは、当初はESP8266上でNTPクライアントを動作させて時刻をセットでMQTTサーバに送信していましたが、NTPでの時刻調整に7秒位かかる(=その分、電力消費する)ので、NTPクライアントの動作をやめて、サーバ側でデータを受信した時刻を記録するよう、改めました。(実際の作りとしては、ESP8266から時刻の情報がなければ、サーバ側の受信時刻をデータにつけるようにしています)
その上で、ESP8266側は電源投入後、WiFi接続ができたら、すぐにデータを送信して、ディープスリープに入るようにしました。
ESP8266とBME280は2セットに増やしてあります。時間軸の左半分がディープスリープ適用前、真ん中少し右がオフセットで温度が大きい方(グラフに直線区間がある方)のみディープスリープを適用、右端は2台ともディープスリープを適用しています。
ディープスリープ適用により、温度がクロスしていますので、自己発熱の影響が少なくなったものと思いますが、2台とも適用することにより、オフセットはほぼ同じ状態に戻りましたので、おそらくBME280の個体差なのではないかと思います。
肝心の消費電流は・・・図っていません。
電池化も考えていますが、レギュレータが3.15Vくらいで動作しているので、電池電圧をどうしようか考えどころです。(1.2V×3=3.6Vではやや低いので・・・)
あと、グラフも個体ごとに色をつけたいところですね。
CanvasJSを使った表示は簡単で良かったのですが、ホビー利用でもメールで登録(だっけか?)がいるということが作ってからわかりました^^;。で、できるだけライセンスに縛られたくないので、chart.JSで作り直してみました。
正直、ちょっと触って使う分にはCanvasJSの方が使い勝手はいいです。サンプルもたくさんあるし。