#include #include #include "BM25S2021-1.h" // 引入 BM25S2021-1 感測器專用函式庫 #include "DHTlib.h" #include //繼電器 #include "BME82M131.h" // 引入 VEML7700 模組專用函式庫(BestModule BME82M131 封裝) #include "Lux.h" //光感測 #include "BME34M101.h" #include "SoilMoisture.h" //土壤水分 int LED = 3; SoftwareSerial BT(10, 11); // RX=10, TX=11 BMP75M131 myRelay(&Wire1); //--------自定義函示區宣告--------- void initSensor(); void initAll(); void setup() { initAll(); //初始化整體系統 ShowDHTInformation(); //印出溫溼度感測器產品必要資訊 delay(2000); pinMode(LED, OUTPUT); //randomSeed(analogRead(A0)); // 初始化亂數種子 Serial.println("READY"); BT.write("READY\n"); } void loop() { char cmd; int strsize; //從感測區讀取溫度數值並顯示 Hvalue = readHumidity(); //讀取濕度 Serial.print("Humidity : "); // 顯示濕度資訊標籤 Serial.print(BMht.readHumidity()); // 讀取並顯示目前濕度值(單位:%) Serial.print(" % "); // 顯示濕度單位符號與間隔 //從感測區讀取溫度數值並顯示 Tvalue = readTemperature(); //讀取溫度 Serial.print("Temperature : "); // 顯示溫度資訊標籤 Serial.print(BMht.readTemperature()); // 讀取並顯示目前溫度值(單位:攝氏) Serial.println(" °C "); // 顯示攝氏溫度單位與換行 //從感測區讀取光強度數值並顯示 Lvalue = readLux(); //讀取光強度數 Serial.print("Lux : "); Serial.println(ALS.readLux(1)); // 顯示光強度值 //從感測區讀取土壤濕度度數值並顯示 /*SHvalue = getSoilHumidity(); //讀取濕度數 Serial.print("SoilHumidity : "); Serial.print(SHvalue); // 顯示濕度值 Serial.println(" % ");*/ delay(2000); if ((strsize = BT.available()) > 0) { for (int i = 0; i < strsize && i < 20; i++) { cmd = char(BT.read()); } Serial.println(cmd); } if (cmd == 'a') { myRelay.setRelaySwitch(1, 1); //Close the relay digitalWrite(3, HIGH); // 讓腳位 3 輸出高電位 → LED 亮 } if (cmd == 'b') { myRelay.setRelaySwitch(1, 0); //Close the relay digitalWrite(3, LOW); // 讓腳位 3 輸出高電位 → LED 亮 } if (cmd == 'z'){ char hum_buf[4], tem_buf[4], lux_buf[4];//, soil_buf[4]; if (!isnan(Hvalue) && !isnan(Tvalue) && !isnan(Lvalue)/*&& !isnan(SHvalue)*/) { int h_int = (Hvalue * 100); int t_int = (Tvalue * 100); int l_int = (Lvalue * 100); //int sh_int = (SHvalue * 100); hum_buf[0] = (h_int / 1000) % 10 + '0'; // 千位 hum_buf[1] = (h_int / 100) % 10 + '0'; // 百位 hum_buf[2] = '.'; hum_buf[3] = (h_int / 10) % 10 + '0'; // 十位 tem_buf[0] = (t_int / 1000) % 10 + '0'; // 千位 tem_buf[1] = (t_int / 100) % 10 + '0'; // 百位 tem_buf[2] = '.'; tem_buf[3] = (t_int / 10) % 10 + '0'; // 十位 lux_buf[0] = (l_int / 1000) % 10 + '0'; // 千位 lux_buf[1] = (l_int / 100) % 10 + '0'; // 百位 lux_buf[2] = '.'; lux_buf[3] = (l_int / 10) % 10 + '0'; // 十位 /* soil_buf[0]=(sh_int / 1000) % 10 + '0'; // 千位 soil_buf[1] = (sh_int / 100) % 10 + '0'; // 百位 soil_buf[2] = '.'; // 十位 soil_buf[3] = (sh_int / 10) % 10 + '0'; // 十位 */ // 傳送濕度(4字元) + 溫度(4字元) + 換行 for (int i = 0; i < 4; i++) { BT.write(hum_buf[i]); } BT.print(','); for (int i = 0; i < 4; i++) { BT.write(tem_buf[i]); } BT.print(','); for (int i = 0; i < 4; i++) { BT.write(lux_buf[i]); } BT.print(','); /*for (int i = 0; i < 4; i++) { BT.write(soil_buf[i]); } BT.print(',');*/ } delay(1000); cmd = ' '; // 清除命令 } delay(100); } //--------初始化所有感測模組------- void initSensor() //初始化所有感測模組 { initDHT(); // 初始化溫溼度感測器,啟動I2C myRelay.begin(); initALS(); // 初始化光強度感測器 //initSoilMoisture(); //初始化土壤溼度感測器,啟動 I2C 通訊 } //---------初始化整體系統----------- void initAll() //初始化整體系統 { Serial.begin(9600); // 設定序列埠傳輸速率為 9600 bps,供電腦端顯示資料 BT.begin(9600); initSensor(); //初始化所有感測模組 }