実は私は青萍空気検知器にずっと憧れていましたが、700 ドル以上もするので手が出せませんでした。そこで、自分で似たようなデスクトップ装飾品を作ろうという考えが生まれました。一方で、ハードウェアを含む小さなおもちゃを作ってみたいという一方で、本当にデスクトップに置く装飾品が欲しかったのです。
選択#
チップ#
部品の購入やコーディングを本格的に始める前に、この装飾品に使用する部品を選定する必要があります。初めてハードウェアを組み込んだ装飾品を作るので、初心者にとって比較的使いやすい NodeMCU を選びました。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 を使用してデータの洗浄サーバーを作成しました。
完成品#
Star をお願いします~https://github.com/johnpoint/Weather-Card
本体#
WEB 管理インターフェース#
今後の展望#
将来的には、画面のレイアウトを変更して、右下にスペースを作る方法を考えています。また、3D プリントのケースを作るかもしれません。
ええ、ESP8266 は本当に素晴らしいです。ハードウェアを扱うことは本当に簡単で、達成感があります。