網頁最後修改時間:2020/12/21
參考接線圖:
下面是無線溫溼度傳輸的發射端與接收端的參考接線圖。接線的時候盡量選擇手邊可用的相同材料即可,不限定一定要跟網頁一樣,因為這篇網頁的重點在無線數據的傳輸上,而不是取得 SHT31 的數據。
微控制器可選擇不一樣的 Arduino 開發板。若沒有相同的溫溼度感測器,使用其他的也可以 (改一下函式庫和相關程式碼),甚至手動建立數據也可以。發射端與接收端接在 <A1> 和 <A2> 接腳上面的開關圖示,代表是否選擇 UART 除錯輸出、使用整合型 LCD 顯示日期時間和溫溼度數據;這裡可以直接使用跳線替代,不接則不會輸出任何數據。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 發射端參考接線圖:
發射端參考接線圖 |
* 發射端接線材料:
- Arduino Nano / Uno
- 一些杜邦線
- 麵包板或Arduino Nano 擴充底板
- SHT31-D 溫溼度感測器
- NRF24L01+ (功率加強版本) 無線模組 (含轉接板)
- NRF24L01+ + PA+LNA 遠距離無線模組(含轉接板與 SMA 天線)
發射端實際接線完成參考圖 |
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 接收端參考接線圖:
接收端參考接線圖 |
* 接收端接線材料:
- Arduino Nano / Uno
- 一些杜邦線
- Arduino Nano 擴充底板
- 高精度即時時鐘 DS3231 + 32KByte EEPROM二合一模組
- {5V}整合型 {4/8BIT, IIC, 4SPI}1602英文字型藍底白字 LCD 螢幕
- NRF24L01+ (功率加強版本) 無線模組 (含轉接板)
- NRF24L01+ + PA+LNA 遠距離無線模組(含轉接板與 SMA 天線)
接收端實際接線完成參考圖 |
下面兩個 Arduino 函式庫,在編譯前必須先行安裝的,請至函式庫下方的連結網頁中下載;其餘的直接在程式碼中實現。
- DS3231 RTC Module 函式庫 (與下面網頁使用相同的函式庫)
*0*RTC(即時時鐘)模組*0* 如何更新 DS3231 RTC 模組的時間與大型數字時鐘製作 - nRF24L01+ 函式庫 (與下面網頁使用相同的函式庫)
*1*nRF24L01+*1* 如何提高 nRF24L01+ 無線模組的傳輸距離與穿牆效果? 加碼:不同天線形式的穿牆測試
這篇網頁使用 Arduino IDE v1.8.4 編譯上傳程式碼!
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
Arduino 程式碼:
下面兩個程式碼不做逐行解釋,在這裡只做整體說明,需要詳細說明的話,請自行再閱讀零件資料手冊與函式庫的說明。
在這兩個程式中,不管是發射端與接收端都使用 nRF24L01+ 做無線通訊,所以兩者的的無線頻率與基本組態設定都必須一樣,否則無法互相通訊!預設的情況下,nRF24L01+ 六個 data pipe 的自動確認 (Auto Acknowledgment) 功能都是開啟的,所以在發射端只要負責將數據準備好傳送 (write) 出去,接收端則是等待 (available())數據過來 (read) 後進行計算,其他的不需要去管,也不需要再做處理,nRF24L01+ 自己會搞定!至於附加的週邊,只是為了顯示處理後的數據而已,用與不用取決於實際應用的場合上,可自行再做選擇!
nRF24L01+ 可接收來自 6 個同頻率不同位址的無線數據,由於 data pipe 0 額外也用於傳送,所以在接收端的設定是使用 data pipe 1 來做數據接收,保留 data pipe 0 作為之後程式用。當 nRF24L01+ 無線模組有用到傳送與接收的功能時,如果又選擇 data pipe 0 作為接收,那麼每一次在傳送或是接收數據時,都必須重新設定傳送或是接收的位址,否則就會導致通訊失敗。這樣設定有點煩,簡單與程式碼容易了解起見,發射端與接收端分別使用不同的 data pipe。
接著,就直接進入到程式碼的部分。
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 發射端程式碼:
在發射端的程式碼主要是取得 SHT31-D 的溫溼度 raw data (原始數據,未經過計算),然後直接使用 nRF24L01+ 傳送出去。此時,若接收端不存在的話,開啟 UART 除錯就會出現 Tx failed 的文字訊息出現;從這裡也可以知道,自動確認是由 nRF24L01+ 自己完成。
在不開啟 UART 除錯功能的情況下,發射端除了訊息不輸出之外,也不再進一步的計算 SHT31-D 的溫溼度,這樣可減少 MCU 處理的時間增加空閒時間,讓 MCU 進入到睡眠的狀態節省電力 (在此先保留此功能)。由於是測試,所以每次通訊的時間設得比較短,只有 1000 ms。實際應用上,每次通訊可以設幾十秒或是幾分鐘一次,數據傳送出去之後,裝置就進入到睡眠狀態已節省電力,這樣的方式就很適合用在電池供應的裝置上。
發射端程式碼下載
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 接收端程式碼:
相對於發射端,接收端負責的東西就比較多,除了接收數據並進行運算之外,由於不使用網路上傳數據,所以除了選擇由 UART 輸出計算後的溫溼度之外,也提供整合型 LCD 顯示的方式,都是由外部接腳做控制。
開啟 UART 輸出的情況下,幾乎所有的訊息都會輸出,但是 DS3231 所提供的日期和時間不會;開啟使用整合型 LCD,則螢幕第一行分時顯示現在日期和時間,第二則顯示最近一次接收並計算之後的溫溼度值。
接收端程式碼下載 (2020/12/21 更新)
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
程式碼與資料都在網頁提供的連結或是網頁中,請自行下載使用與測試!
/*-/--*-*/*/*/*/***//-*-*-**-*/*-*-/*/*/*-*-/-////--/**/**--**/--///--//**----**//--**//**----***//*-**//*
/*--*//**---/*///**---*-*////***--*/*///***----*///--*/*///**--*/*//**--**/*//
* 測試影片:
下面是測試的影片,兩個線路中的 <S1>、<S2>和<S3> 全部接地,UART 輸出與硬體線路一起動作,動作與測試過程影片中有文字描述
結論:
為什麼要花這麼多的篇幅來寫 nRF24L01+ 這個已經存在很久的無線模組,其實是為了 LoRa (Long Range) 鋪路,兩者都是無線模組 (前者是 2.4GHz,後者是 433 MHz / 866 MHz / 915 MHz ),特別適用於網路不普及也不方便的區域處數據的取得,一但這些數據連接到網路時,不就是 "物聯網" 了嗎 ?
所以呢 ? ESP8266 出現了!
不過寫到這裡之前我已經在想,到底下一篇是要 Arduino + ESP8266 (AT 指令),還是直接使用 ESP8266 來延續這個網頁裡面的東西 ? 記得有人問過我 "Arduino + ESP8266 (AT 指令) 和 Blynk 怎麼結合來用,並將資料顯示在手機上",要不下一篇就這個主題吧!
<< 部落格相關網頁 >>
- *0*nRF24L01+*0* Arduino 二點四GHz 訊號掃描器
- *1*RF24L01+*1* 如何提高 nRF24L01+ 板載天線無線模組的傳輸距離與穿牆效果 ? 加碼:不同天線形式的穿牆測試
- *2*nRF24L01+*2* SHT31 單點無線溫溼度傳輸
- 初遇 Blynk ( 物聯網手機 APP ) - 如何使用 Arduino 和 AT 韌體 ( Ai-Mod, AT v1.2.0.0 based on SDK v1.5.4.1 ) 的 ESP8266 (ESP-01, ESP-01S) 連上 Blynk 伺服器和儲存數據 {*2_1*nRF24L01+*2_1*}
- *3*nRF24L01+*3* 初遇 Blynk - 建立從 nRF24L01+ 到 ESP8266 再到 Blynk 的 SHT31 單點無線溫溼度傳輸物聯網
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !