本次範例是從instructables中看到有人DIY做了一個太陽能板WiFi氣象站,一開始我也仿照它的架構做了一個,後來我想說若是連線不到WiFi訊號的話有沒有更好的架構或方法。
我想到的就是直接將WeMos D1 mini轉成NB-IOT晶片,然後自己寫一個UDP Server,然後在UDP Server裏寫一個類別及函數,當NB-IOT訊號傳送過來時,馬上判斷訊號標頭是屬於那個產品格式,若是氣象站格式就依對應格式先取Line Notify的token值,再將收到的氣象站訊息傳送到Line Notify中介服務軟體,最後就可以即時在設定的Line聊天室收到即時訊息。
當然,在講解本範例時,會從基本的WeMos D1 mini架構談起。最後,再帶到NB-IOT架構。以下就帶各位一步步來完成太陽能可自動充電的無線氣象站範例。
文章目錄標題
氣象站具備以下功能:
- 氣象站可以測量:溫度、氣壓、海拔(未來可再增加更多感測值)
- 您可以從智能手機、ThingSpeak.com、Line或自架網站監視以上天氣參數
- 整個電路以及電源都放在3D列印的外殼中
- 若是WeMos D1 mini版本,則通過使用3dBi外部天線可以擴大設備的範圍約100米左右。
- NB-IOT版本則只要可以收到SIM卡的行動網路,就可以收到訊號。(本SIM卡是串請中華電訊)
所需的零件和工具
- Wemos D1 Mini Pro
- TP 4056充電板
- BME280感測器
- 太陽能板
- 單面纖維板
- 鋰離子充電電池及電池座
- 22 AWG電線
- 熱溶膠
- 3D列印PLA線材
使用工具:
- 3D列印機
- 烙鐵
- 熱溶膠槍
- 剪線鉗/剝線鉗
電源供應架構
本計劃是使用在戶外或偏遠地方,要持續運作氣象站,必須有連續的電源,否則系統將無法工作。可以向電路提供連續電源的最佳方法是使用電池,只是一般電池放電幾天之後,電池電量將耗盡。因此,該範例提出了一種太陽能充電電路,讓使用者利用從太陽中得到電能,為電池充電並為Wemos板供電。本案例是使用18650電池。
電池通過TP4056充電模組從太陽能面板充電。TP4056模組帶有電池保護晶片及不帶保護晶片。建議購買包含電池保護晶片的模組。
關於TP4056電池充電器
TP4056模塊非常適合為3.7V 1 Ah或更高的LiPo單體電池充電。基於TP4056充電器IC和DW01電池保護IC,該模組將提供1000 mA充電電流,然後在充電完成時切斷。另外,當電池電壓降至2.4V以下時,保護IC會切斷負載,以保護電池免受欠壓。它還可以防止過電壓和反極性連接。
測量天氣數據
早期,天氣參數(如環境溫度、濕度和氣壓)是通過單獨的模擬儀器測量:溫度計,濕度計和氣壓計。但如今,市場上充斥著可用於測量各種環境參數的價位低且高效的數位感測器。最好的例子是DHT11,DHT 22,BMP180,BMP280等感測器。
在此項目中,我們將使用BMP 280感測器。
BMP 280:
BMP280是一種複雜的感測器,可以非常準確地測量氣壓和溫度。BME280是Bosch的下一代感測器,是BMP085 / BMP180 / BMP183的升級產品,具有0.25m的低海拔噪聲和相同的快速轉換時間。
該感測器的優勢在於它可以使用I2C或SPI與微控制器進行通信。為了簡單易接線,建議購買I2C版本。
使用外部天線(3dBi)
Wemos D1 mini Pro開發板內建陶瓷天線,並可以連接外部天線以擴大範圍。在使用外部天線之前,必須將天線信號從內置陶瓷天線重新路由到外部插座,這可以通過旋轉(0603)零歐姆電阻來完成。可以看Alex Eames製作的影片來旋轉零歐姆電阻。然後將天線SMA連接器卡入Wemos Pro迷你天線插槽。
焊接針腳、電路圖架構
本範例太陽能大氣氣象站的電路圖架構圖如上圖所示,各位可以依上圖電路圖焊接。
Wemos-> BME 280
3.3 V–> VCC、CSB、SDO
GND->GND
D1-> SCL
D2-> SDA
TP4056連接
太陽能電池板端子-> +和-靠近微型USB端口
電池端子-> B +和B-
Wemos的5V和GND-> Out +和Out-
焊接在纖維板上
參考上述電路圖,將引腳母接頭、電路線焊接在纖維板上,再將WeMos、TP4056、BME280、太陽能板及電池盒安裝上。
氣象站外殼
這裏從作者已經設定好的stl檔直接下載印出來。我使用的3D列印規格如下:
3D印表機:Creality Ender 3 Pro
材料:PLA 1.75mm
主體印12小時、封面蓋子3.5小時
層高設定:0.2
射出頭溫度:預設200度
床溫:預設60度
印出速度:40 mm/s
安裝太陽能電池板和電池、安裝天線、安裝電路板、組合
以上請參考原稿文件說明。
程式碼編寫
這裏我是自己編寫自已架構的程式碼,主要架構為WeMos D1 mini pro + Line Notify服務。太陽能大氣氣象站定即將偵測到的相關數據傳送給Line Notify服務,通知Line設定的聊天室群組。Line Notify相關設定請參考我之前的文章。程式碼如下所示:
最後測試,各位可以參考instructables這位作者提供的APP及上傳到ThingSpeak網站來測試結果,而我這邊則是以測試Line聊天室收到的訊息來做測試。
另外,我也想到若太陽能大氣氣象站想將它放遠一點的話,若沒有WiFi訊號的話,是不是就沒辦法上傳資料了,所以我想到將WeMos D1 mini改成NB-IOT取代。
WeMos D1 mini pro由NB-IOT取代
NB-IOT首先要先申請一片4G的SIM卡及用NB-IOT開發版來替代。
- 4G SIM卡需要用公司名義向中華電訊、遠傳或台哥大申請,每個月費用10元,5M傳輸量,基本上是夠用的。
- NB-IOT開發版,這裏使用聯發科最新的DSI2598開發板。相關說明可以在網路上查詢到。
- 因我還是想用NB-IOT串接Line Notify服務,所以沒有依照說明中的到IDEAS Chain申請帳戶測試。我是自已架設UDP Server(之後會改成TCP Server)來抓取NB-IOT傳送資料,判斷後再將要傳給Line聊天室的數據呼叫Line Notify服務傳送。可以參考另一編有關NB-IOT-UDP Server說明。
- 架設UDP Server(或TCP Server)需要網路設定,最好有一固定IP,並設定一個Port(我設8888Port給NB-IOT)使用。
最後提供NB-IOT的程式碼:
結語
太陽能大氣氣象站的範例我覺得是一件有非常棒想法的範例,之後我也會放入更多可以讀取的數據(如:GPS、溼度、高度等等)來測試,還有之後也可以將無論是WiFi或是NB-IOT傳送過來的數據,將它上傳到自已架設的雲端資料及用網站來顯示。最後,也放上一張成果圖給各位參考。