家の気温垂れ流しbot
#プロジェクトメモ #マイコン
家の気温や湿度、気圧や二酸化炭素濃度をslackに垂れ流すシステムを作りたい
さらに、エアコンの操作を遠隔でやりたい
2024/06/20現在の構成
#ESP32
SHT31
温湿度
MH-Z19C
二酸化炭素
BME680
気圧 (+温湿度+ガス)
SC2004CSLB
ディスプレイ
2024/06/20
slackにグラフを投稿できるようにしたい
slackからエアコンを操作できるようにしたい
↑家に転がっている #RaspberryPi を使う?
ラズパイ+slack参考: https://monomonotech.jp/kurage/raspberrypi/slack.html
2024/06/20
面白そう(難しそう?)なので一旦ESP32縛りでやってみる。
エアコン操作: https://github.com/crankyoldgit/IRremoteESP8266
配線: https://github.com/crankyoldgit/IRremoteESP8266/wiki#ir-sending
Slackの受信周り: https://zenn.dev/k_takata/articles/esp32c3-envmeter-rev2-2
JSON操作: https://kurobekoblog.com/json
文字列操作: https://www.delftstack.com/ja/howto/arduino/arduino-split-string/
エアコン操作ができた!!!
諸々のコマンドを追加したので、これで快適に使えそう!
https://scrapbox.io/files/667422e15a4073001cc13058.png
https://scrapbox.io/files/66742785989969001d33bdef.png
esp32だけでこんなことができるんだ…slackのAPIがすごい。
2024/06/21
家にLPS25HBという気圧センサが転がっていたので、BME680(精度が怪しい)を外してこっちに乗り換えたい
https://akizukidenshi.com/catalog/g/g113460/
無事完了
https://scrapbox.io/files/6674f80b64f43a001d0ad572.png
ついでにコマンドとLCD表示も若干変更した
ACアダプタからの給電だとなぜか気圧が990hPaくらいと低く出るので、USB給電にした
2024/06/25
ac autoのコマンドをac auto on / ac auto off に変更する
done
ac autoの挙動が怪しいので確認
バグ解消
タイムスタンプを送信するようにする
done
毎時0分ぴったりに定期投稿するようにする
done
2024/07/02
過去X時間(24時間くらい?)の各数値の変化をグラフにしてslackに投稿したい!!
最近のマイコンは性能が高いので、esp32だけでできるような気がしている
2024/07/02
生活リズムを整えたいので、22時くらいになったら部屋を自動で暗くする機能をつけたい!!
参考
Arduinoでシーリングライトを操作: https://qiita.com/SnowDango/items/8e4da3d04d5f676019c4
2024/07/09
睡眠記録機能をつけたい!
睡眠時間と室温などをあわせて記録できるやつを作りたい。
2024/07/11追記: 別に家でだけ寝るわけでもないので、ちょっとこれは考えものな気がする。別で睡眠時間だけ記録するbotを作ってもいいかも?
いや、気温と一緒に記録するモードみたいなものを作ってもいいかもしれんな
2024/07/10
気温のグラフを作る
参考
esp32でビットマップを作る
https://www.mgo-tec.com/blog-entry-esp32-mjpeg-bmp.html/3
https://programresource.net/2020/02/23/2943.html
画像をslackに投稿する
https://qiita.com/stkdev/items/992921572eefc7de4ad8#fileuploadを利用する方法 (python)
https://qiita.com/ikegam1/items/f9a9351bb7d325b02ed3
slackのfiles.uploadが廃止されるらしいので、結構面倒なことになりそう
https://zenn.dev/slack/articles/7ce5065cc4daa7
面倒なのでもうasciiアートでいいか?という気がしてきた。
いや、もうちょい粘る
files.uploadを使わずに直接apiを叩く方法がある
https://zenn.dev/slack/articles/7ce5065cc4daa7#直接-api-を利用する場合
★
画像をbase64で送る
https://qiita.com/mserizawa/items/7f1b9e5077fd3a9d336b
https://qiita.com/ekzemplaro/items/ff05b36d075c1997dd6c
base64はだめそう
画像(png)の送信
https://qiita.com/dzonesasaki/items/1417b917751443994ffc
このサンプルがうまく動いた!!!
files.uploadを使えずに新しいやり方(★)でうまくやった
bmpの送信にも成功!
bmpはslackでプレビューが出ないので、pngに変換できたら良いなぁと思いつつ、保留
bmpのファイル構造
https://www.setsuki.com/hsp/ext/bmp.htm
https://qiita.com/spc_ehara/items/03d179f4901faeadb184
bmpは横方向のバイト数が4の倍数でないといけないらしいということに注意!!
参考: https://qiita.com/spc_ehara/items/03d179f4901faeadb184#bmp構造の編集
送った画像: graph.bmp
グラフのフォーマットを作った
https://scrapbox.io/files/668e5284a12af0001c0050fb.png
graph (4).bmp
2024/07/11
気温グラフ作成
温度を表す色つきの線と、1度ごとの薄い灰色の線を作った
前後の値を見て連続するようにグラフを描くようにした
https://scrapbox.io/files/668f68992fbab3001da867c5.png
https://scrapbox.io/files/668f691e13f5f0001d19133c.png
x軸の目盛りをつけた
https://scrapbox.io/files/668f6babd09fe1001dee5f63.png
とりあえずこれで完了!
可能だったら画像形式をjpgにしよう
arduinoにjpgエンコードライブラリがあるらしい。メモリとかが大丈夫か知らんけど。
2024/07/11
ESP32からSlackに画像を送る方法を記事にまとめた: https://qiita.com/Nyanyan_Cube/items/c6e74ce6e6c8cd159df7
2024/07/12
温度推移グラフに、昼と夜の色分けをつけた方が良さそう。
日の出・日の入り時間を調べてみる?
6時/18時で固定する?
こっちでいいか。見やすいし。
可能ならx軸に数字を表示したいけど、さすがに画素数が足りない気がする(横幅6ピクセルにしないといけないので)
x軸は6時間ごとに線入れた方がいいかも?
x軸は0, 6, 12, 18時に数字を入れて、目盛りは現在-整数時ではなくて絶対的な整数時にいれるようにしよう。
結局、3時間ごとに縦線を引いて、6-18時を黄色、それ以外を青色の背景とした。また、0時と12時だけ目盛りを大きくした。
https://scrapbox.io/files/66910aa5b49e4d001d1b609a.png
バグ修正版
https://scrapbox.io/files/6691ce6ad28bdf001d7a0210.png
2024/07/12
esp32のボードマネージャを3系にするとエアコン制御ライブラリでコンパイルエラーが出る
esp32のボードマネージャに破壊的な変更があったらしい。
参考: https://github.com/espressif/arduino-esp32/issues/8765
とりあえずボードマネージャのバージョンを2系に下げて対処
2024/07/12
筐体を綺麗に3Dプリンタで作りたい気がする
2024/07/13
グラフの上部に日付と時間、タイトルをいれると良さそう。
数字とタイトルは自前でドット絵を描くか~
https://scrapbox.io/files/66923300225214001dac7c70.png
完成!!いい感じ!!!!
タイトルを1pxだけ下に下げた。いい感じ。
2024/07/13
気温以外のデータもグラフ化したいなぁ…
追加した!!
2024/07/13
グラフのy軸、主軸だけでも数値をつけておきたいなぁ…
完了!!
https://scrapbox.io/files/66926a250f5070001cc7393d.png
https://scrapbox.io/files/66926a2a3716a1001c807fee.png
2024/07/13
グラフの左下のスペースに単位を書きたいなあ
完了!!
https://scrapbox.io/files/66926efec6eefa001de6c47e.png
2024/07/13
x軸に時刻を書きたいなあ
タイトルを上左寄せにして、時刻を上右寄せにすると下のスペースが広くなる
完了!!
https://scrapbox.io/files/669279dd9c6031001ccc53a2.png
2024/07/15
すべてのグラフで値の範囲に応じていい感じにグラフの表示範囲を変更するようにした
不快指数の表示とグラフ化を追加した
2024/07/23
気象庁から気温などのデータを取ってきて、それもあわせてグラフ描画すると良いかも?と思った
参考: ESP32で気温・降水確率&時計
2024/11/07
これからつけたい機能
暖房をつける機能
bmpじゃなくてjpgを配信する機能
参考: https://www.mgo-tec.com/blog-entry-jpeg-decode-encode-esp32.html
2024/12/19
bmpを全部本文の添付ファイルとして送信するようにした
参考: Slackでファイルを添付
https://scrapbox.io/files/6763d60a8b7da8abb5134ff4.png
2025/09/28
iPhoneからだとbmp画像が中途半端にサムネイル表示されてしまうので、iPhoneアプリ内のslackワークスペースで画像のサムネイル表示をやめたらうまく動くようになった
#技術