ESP32でCO2を測定

自宅で仕事をしていると、急激に眠くなることがあります。で、ふと思ったのが、CO2濃度との関連。CO2濃度が高くなってくると眠くなる、と聞いたことがあります。

そこで、以前AliExpressで買っていたCO2センサMH-Z19BをESP32に接続してCO2濃度を測定してみたいと思います。ベースとなる部分は少し前に動作確認した18650のリチウムイオン電池とOLEDがついているボード(これもAliExpressで購入)を使って作ります。

“ESP32でCO2を測定” の続きを読む

中華激安HDMIキャプチャ

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モデルは)キャプチャできました(が、問題があります)。

“中華激安HDMIキャプチャ” の続きを読む

mosquitto_subのデフォルトオプション

デバッグでmosquitto_subを使って、オプションにユーザー名とパスワードを記述すると、ps コマンドであらわになってしまいます。ユーザーごとのデフォルトオプションを設定して、これを回避します。

説明は mosquitto のマニュアルに記載があります。具体的には、 ~/.config/mosquitto_sub に1行ずつオプションを記述していけばOKです。

なので、以下の内容のファイルを作って、デフォルトオプションを設定します。

-h 接続先ホスト
-p 1883
-u (ユーザー名)
-P (パスワード)

これで、他のオプションのみをコマンドラインで記述してmosquitto_subを起動します。

Ubuntuでタイムゾーン設定

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に設定しました。

ESP32でSmartConfig

ESP8266のSmartConfigのサンプルをそのままESP32で動かすと、上手く動作しません。簡単に言うと、一度SmartConfigでSSID/パスワードを設定しても覚えてくれませんので、毎回設定しなければなりません。

で、調べてみると、ESP32ではこちらの記事のように設定を記憶する不揮発領域の処理は別処理になっているようです。参考にさせていただいて、忘れないようにしてみます。

“ESP32でSmartConfig” の続きを読む

ESP8266をディープスリープモードで動かしてみた

電池で動かす&自己発熱の抑制のため、こちらの記事を参考にさせていただいて、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ではやや低いので・・・)

あと、グラフも個体ごとに色をつけたいところですね。

ESP8266で収集したデータを表示させる(chart.JS編)

CanvasJSを使った表示は簡単で良かったのですが、ホビー利用でもメールで登録(だっけか?)がいるということが作ってからわかりました^^;。で、できるだけライセンスに縛られたくないので、chart.JSで作り直してみました。

正直、ちょっと触って使う分にはCanvasJSの方が使い勝手はいいです。サンプルもたくさんあるし。

“ESP8266で収集したデータを表示させる(chart.JS編)” の続きを読む