実は私は青萍空気検知器にずっと興味がありましたが、700 ドル以上の価格では手が出せませんでした。そこで、自分で似たようなデスクトップ装飾品を作るというアイデアが生まれました。一方で、ハードウェアを含む小さなおもちゃを作ってみたいという一方で、本当にデスクトップに置く装飾品を作りたいというのもあります。
選択#
チップ#
部品の購入とコーディングを本格的に始める前に、この装飾品に使用する部品を選択する必要があります。初めてハードウェアを含む装飾品を作るので、初心者にとって比較的使いやすい NodeMCU に搭載されている ESP8266 チップを選びました。これにより、ネットワーク通信の問題も解決できますし、NodeMCU は Arduino スタイルのプログラミングをサポートしているため、非常に便利です。さまざまなライブラリがオンラインで利用できます。
スクリーン#
デスクトップの装飾品には画面が必要ですので、OLED スクリーンはコストが高すぎるため、最終的にはST7796という 4 インチのタッチスクリーンを選びました。一方で価格が手頃であること、もう一方でタッチスクリーンがあるため、将来的に突然タッチインタラクションの機能を追加したいというアイデアにも対応できます(おそらくずっとやりたいだけかもしれません)。
センサー#
PM2.5 などのデータは API で公開されているので十分ですが、青萍空気検知器に私を感動させたのは二酸化炭素検知の機能です。したがって、この装飾品には二酸化炭素検知機能を組み込む必要があります。空気検知モジュールは淘宝で SGP30 というモジュールを見つけました。このモジュールは CO2 と TVOC を検出することができますので、十分です。
コーディング#
実際にこの記事を書いている時点で、この装飾品の主な機能はすでに完成しています。現在、次の機能があります。
- OTA アップデート:USB を差し込む必要なしでファームウェアを更新できます。
- 設定ファイルの保存と起動時の自動設定
- Wi-Fi 接続に失敗した場合、ユーザーにネットワーク設定を行うためのホットスポットを提供します。
- WEB インターフェースでの設定の変更
- WEB インターフェースでのパスワードの管理と認証
- NTP による時刻合わせ
- 和風天気 API を使用して天気データを取得
- CO2 と TVOC の監視
- 天気警報情報の表示
- 昼夜の天気アイコンの切り替え
使用ライブラリ#
TFT_eSPI.h
SPI.h
TFTスクリーンドライバ
https://github.com/Bodmer/TFT_eSPI
Arduino_JSON.h
JSONパース
https://github.com/arduino-libraries/Arduino_JSON
NTP.h
NTP時刻合わせ
https://github.com/sstaub/NTP
Adafruit_SGP30.h
SGP30ドライバ
https://github.com/adafruit/Adafruit_SGP30
ArduinoOTA.h
OTAサポート
https://github.com/jandrassy/ArduinoOTA
ESP8266WiFi.h>
ESP8266WiFiMulti.h
ESP8266HTTPClient.h
FS.h
LittleFS.h
WiFiClient.h
ESP8266WebServer.h
https://github.com/esp8266/Arduino
天気アイコン#
画像形式を変換したくなかったので、TFT_eSPI ライブラリの描画関数を使用して独自のアイコンを再描画しました。しかし、私はとても怠惰なので、現時点では私の周りで発生した天気だけを描画しています。そして、夜にも太陽を表示したくないと思ったので、一部のアイコンを描画し、夜のアイコンの切り替え機能を追加しました。
API プロキシ#
API のデバッグ中に、和風天気 API のいくつかのデータが多すぎることに気付きました。いくつかのデータは使用しないため、データ量が多すぎるとソフトウェアウォッチドッグがトリガーされてリセットされる可能性があるため、Python の Flask を使用してデータをフィルタリングするサーバーを作成しました。
完成品#
私のリポジトリにスターをお願いします~https://github.com/johnpoint/Weather-Card
本体#
WEB 管理インターフェース#
今後の予定#
今後、画面のレイアウトを変更して、右下にスペースがあるようにしたいと考えています。また、3D プリントのケースを作るかもしれません。
ええ、ESP8266 は本当に素晴らしいです。ハードウェアをいじることは本当に 快感 (??) 達成感があります。