今天用到的材料清單如下:
- 內建藍牙筆電(或有藍牙接收器的 PC ) x 1
- Arduino UNO x 1
- DHT11 溫濕度 Sensor x 1
- HC-05 藍牙模組 x 1
- 杜邦線 (公母頭) x 7
- 外接電源(行動電源或手機充電器) x 1
- USB 線 x 1
若你手上的 HC-05 藍牙模組需要更改 Baud rate ,請依照 HC-05 藍牙模組設定 這篇文章先進行 Baud rate 設定。
Step 1 :
首先我們先將以下程式燒錄到 Arduino
/*
Board int.0 int.1 int.2 int.3 int.4 int.5
Uno, Ethernet 2 3
Mega2560 2 3 21 20 19 18
Leonardo 3 2 0 1
Due (any pin, more info http://arduino.cc/en/Reference/AttachInterrupt)
*/
#include <idDHT11.h>
int idDHT11pin = 2; //Digital pin for comunications
int idDHT11intNumber = 0; //interrupt number (must be the one that use
//the previus defined pin (see table above)
//declaration
void dht11_wrapper(); // must be declared before the lib initialization
// Lib instantiate
idDHT11 DHT11(idDHT11pin,idDHT11intNumber,dht11_wrapper);
void setup()
{
Serial.begin(9600);
Serial.println("idDHT11 Example program");
Serial.print("LIB version: ");
Serial.println(IDDHT11LIB_VERSION);
Serial.println("---------------");
}
// This wrapper is in charge of calling
// mus be defined like this for the lib work
void dht11_wrapper() {
DHT11.isrCallback();
}
void loop()
{
Serial.print("\nRetrieving information from sensor: ");
Serial.print("Read sensor: ");
//delay(100);
DHT11.acquire();
while (DHT11.acquiring());
int result = DHT11.getStatus();
switch (result)
{
case IDDHTLIB_OK:
Serial.println("OK");
break;
case IDDHTLIB_ERROR_CHECKSUM:
Serial.println("Error\n\r\tChecksum error");
break;
case IDDHTLIB_ERROR_ISR_TIMEOUT:
Serial.println("Error\n\r\tISR Time out error");
break;
case IDDHTLIB_ERROR_RESPONSE_TIMEOUT:
Serial.println("Error\n\r\tResponse time out error");
break;
case IDDHTLIB_ERROR_DATA_TIMEOUT:
Serial.println("Error\n\r\tData time out error");
break;
case IDDHTLIB_ERROR_ACQUIRING:
Serial.println("Error\n\r\tAcquiring");
break;
case IDDHTLIB_ERROR_DELTA:
Serial.println("Error\n\r\tDelta time to small");
break;
case IDDHTLIB_ERROR_NOTSTARTED:
Serial.println("Error\n\r\tNot started");
break;
default:
Serial.println("Unknown error");
break;
}
Serial.print("Humidity (%): ");
Serial.println(DHT11.getHumidity(), 2);
Serial.print("Temperature (oC): ");
Serial.println(DHT11.getCelsius(), 2);
Serial.print("Temperature (oF): ");
Serial.println(DHT11.getFahrenheit(), 2);
Serial.print("Temperature (K): ");
Serial.println(DHT11.getKelvin(), 2);
Serial.print("Dew Point (oC): ");
Serial.println(DHT11.getDewPoint());
Serial.print("Dew Point Slow (oC): ");
Serial.println(DHT11.getDewPointSlow());
delay(2000);
}
Step 2 : 接上藍牙與溫濕度 Sensor
在 Step 1 中將程式碼燒錄完成後,我們可以開始將感測器與藍牙接上 Arduino。以下的接線過程中,記得要讓 Arduino 保持斷電狀態。
Bluetooth 腳位對照表,請將各腳位對應至 Arduino 上接好
DHT 11 溫濕度 Sensor 腳位對照表,請將各腳位對應至 Arduino 上接好
Step 3 : 下載通訊軟體
因為 Arduino 在後續的使用上將會脫離與 PC 端連接,因此若要收取經由藍牙回傳至電腦端的封包資料,我們必須在接收端的電腦上安裝一套可以收取 COM port 封包的軟體,在此我們推薦使用 Tera Term 。 Tera Term 是一套 Open source 的軟體,介面簡潔好用,是我相當推薦的原因。
若你的電腦是 Windows 作業系統,請在 Tera Term 的 Download page 中挑選 exe 檔進行安裝。
Step 4 : 搜尋藍牙裝置與建立通訊埠
Arduino 上的藍牙模組要能傳送資料給 PC 前,我們需將 Arduino 電源接上,使 Arduino 處於供電狀態,並在電腦上針對該藍牙模組開啟一個適當的通訊埠(COM port )。在此我僅示範 Windows 7 的藍牙通訊埠建立流程,詳見如下:
開啟藍牙管理中心後,點選新增裝置
搜尋到藍牙模組後,請點選該模組,並按下一步
選擇『輸入裝置的配對碼』,HC-05 藍牙模組的預設密碼為 1234
密碼驗證成功後,開始安裝驅動程式與建立 COM port
Step 5 : 開啟 Tera Term 接收資料
以上四個步驟都建立好後,開啟 Tera Term,畫面如下,請點選 Cancel
進入主畫面後,請於上方功能選單點選 Setup -> Serial port
開啟 Serial port 選單後,可在上方 Port 選單下拉,檢查是否有新增稍早建立的藍牙通訊埠,在下圖中我們可以看到新增的 COM 6 、COM 11,兩者擇一即可。
選擇 COM port 完成後,請檢查 Baud rate 是否正確。如果你在藍牙模組上所設定的 Baud rate 並非 9600,請依照藍牙上的 Baud rate 進行選擇。例如,你在藍牙上的 Baud rate 為 115200,那麼在 Tera Term 這個視窗中,你就需要選擇 115200 。確認後,按下 OK 即可開始通訊。
若藍牙與溫濕度 Sensor 有正常工作,電腦自藍牙接收到的溫濕度資料就像下圖一樣,分別呈現出不同的溫濕度。
以上就是透過 HC-05 藍牙模組將 Arduino 上的溫濕度 Sensor 資訊傳至電腦端的實驗步驟。透過這些步驟,你可以整合更多有意思的感測器,並透過藍牙或 Wifi 的方式傳回電腦上,讓你的 Arduino 設備不再因為線材而綁手榜腳。
感謝詳細的解說。
回覆刪除請文如果想把藍芽傳輸對象從電腦變成手機APP呢? 可以麻煩給些建議嗎? (初學者)
回覆刪除您可能需要先翻閱 APP 教學書籍,針對藍牙資料接收、發送章節先學習藍牙封包格式。有許多現成的 Android APP 可以下載測試,以下為 Google Play 上搜尋的範例:https://play.google.com/store/apps/details?id=com.app.control&hl=zh_TW
回覆刪除您好:
回覆刪除我看有些藍牙教學有時用Wire或是SoftwareSerial來協助資料的讀寫
想請問您的寫法爲何只用Serial.println就可以呢?
謝謝
您好
刪除採用 Software Serial 能讓 digital Pin 模擬為 RX TX 腳位, 可讓 Arduino 在下載程式或使用 USB 通訊過程中, 不需要先拆除 RX TX 上的 Serial 接線.
無論是直接採用 Serial 或 Software Serial 都是可行的, 最大差異在於 Serial 所通訊的腳位是 RX TX 腳位, 因此下載程式時, 需先拔除才不會與 USB 衝突, 導致無法下載程式
您好,不好意思打擾了。
回覆刪除版主所使用DHT11的library與官網(Arduino)所提供的版本不同,
不知道能否向版主索取該版本的library? 目前還是arduino新手,
希望能透過此教學進一步學習。 謝謝
不好意思
您好,這裡有 DHT11 的 library ,請下載後解壓縮放至 Arduino library 即可
刪除https://github.com/niesteszeck/idDHT11
您好,最後一張圖片呈現的是偵測一次溫濕度後,重複印出,請問能夠每偵測一次,就印出一次嗎?
回覆刪除可以的,這部分請使用「迴圈」程式進行控制就可以達到您要的效果,謝謝!
刪除請問HC-06模組也能像上述一樣回傳值至電腦嗎
回覆刪除