其實我眼饞青萍空氣檢測儀很久了,但是要 700 + 的價格實在是下不了手,於是萌生了自己做一個類似的桌面擺件的想法,一方面是想嘗試下製作包含硬件的小玩意,一方面確實是想整一個擺件放在桌面。
選型#
芯片#
在正式開始採購元件以及編碼之前要先選定這個擺件將要採用的元件,因為是第一次真正意義上做這種加入了硬件的擺件,所以選擇了對新手比較友好的 NodeMCU 上面有 ESP8266 芯片,這樣的話就可以同時解決網絡通信的問題,同時 NodeMCU 支持 Arduino 方式編程,這就很方便了,網上有各種各樣的庫可以給我調用。
屏幕#
由於是桌面擺件肯定要有個界面展示出來,OLED 屏幕成本太高了不考慮,最終選定了 ST7796 這塊帶觸摸的 4 英寸 TFT 屏幕,一方面是價格還可以接受,另一方面是觸摸屏也可以方便後續可以滿足我可能突然想做觸摸交互功能的想法(也許會一直只是想做)。
傳感器#
PM2.5 什麼的數據公開的 API 其實已經夠了,其實青萍空氣檢測儀打動我的點是那個二氧化碳檢測的功能,所以這個擺件的二氧化碳檢測功能是肯定要安排上的,空氣檢測模塊就在淘寶那裡找了個 SGP30,這個模塊可以檢測 CO2 和 TVOC,也夠用了。
編碼#
其實寫這篇文章的時候,這個擺件的主要功能已經寫完了,目前有這些功能
- OTA 升級,不用插 USB 就可以刷新固件
- 保存配置文件開機進行自動配置
- WIFI 連接失敗自身開啟熱點讓用戶進行配網
- 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 有些地方返回的數據太多了,有些數據用不上,然後數據量太多有可能會觸發軟件看門狗導致 Reset,所以用 python 的 flask 糊了個洗數據的服務端。
成品#
歡迎給我 Star~ https://github.com/johnpoint/Weather-Card
本體#
WEB 管理界面#
後續#
後續打算想想怎麼把屏幕的布局改一下,右下角似乎有一些空,然後有可能做個 3D 打印的外殼。
嗯,ESP8266 真香,玩硬件真的是好容易產生 快感 (??) 成就感。