//--เริ่มประกาศ Library--// #include #include //-- WiFi by Aruino Version 1.2.7 #include #include //-- BH1750 by Christopher Laws Version 1.2.0 #include #include //-- RTClib by NeiroN Version 1.5.4 #include //-- SD by Aruino Version 1.2.4 int count = 0; int n = 0; float sumwatt = 0; float calwatt = 0; RTC_DS3231 RTC; const int chipSelect = D8; // SD card used for ESP8266 BH1750 lightMeter(0x23); String readString; //--Wifi--อุตุม.กพส. const char* ssid = "weather"; //-- ชื่อของ Wifi ที่ต้องการเชื่อมต่อ const char* password = "212224236"; //-- ชื่อของ Password Wifi ที่ต้องการเชื่อมต่อ //--Wifi--ส่วนตัว //const char* ssid = "iPad Aomsin PST"; //-- ชื่อของ Wifi ที่ต้องการเชื่อมต่อ //const char* password = "aomsinpst"; //-- ชื่อของ Password Wifi ที่ต้องการเชื่อมต่อ //-- const char* host = "script.google.com"; const int httpsPort = 443; WiFiClientSecure client; const char* fingerprint = "46 B2 C3 44 9C 59 09 8B 01 B6 F8 BD 4C FB 00 74 91 2F EF F6"; String GAS_ID = "AKfycbyFid95_UJbieZzRyaoh5dFNq0VYn1VOZvtsb7aHVZEre4QViyYE67WUHV7v9ldBT52Tg"; //--ID ของ Google App Script ที่ต้องการติดต่อ void setup() { Serial.begin(9600); Wire.begin(); RTC.begin(); //---เริ่มเช็คเซนเซอร์แสง--// if (lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE)) { Serial.println(F("BH1750 Advanced begin")); } else { Serial.println(F("Error initialising BH1750")); } //----เริ่มเช็ค SD Card--// if (!SD.begin(chipSelect)) { Serial.println("Initialization failed!"); while (1); } //----เริ่มตั้งค่าเวลา--// RTC.adjust(DateTime(__DATE__, __TIME__)); //จุดนี้เป็นการตั้งเวลา ตั้งครั้งแรกเสร็จแล้วให้ // ไว้ด้วย if (! RTC.isrunning()) { Serial.println("RTC is NOT running!"); RTC.adjust(DateTime(__DATE__, __TIME__)); } DateTime now = RTC.now(); //--เริ่มเช็คไวไฟ--// WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } sendData(0,0,0,0,0); // ทดสอบส่งค่าไปยัง Google Sheet } void loop() { //ค่าที่อ่านได้ต้องเป็น วันที่,เวลา,แสงที่มีหน่วยเป็นลักซ์,แสงที่มีหน่วยเป็นวัตต์ต่อตารางเมตร,อุณหภูมิภายในกล่อง,การนับเวลาหน่วยนาที,ผลรวมค่าวัตต์// float lux,watt,t,sumt,temp; if (lightMeter.measurementReady()) { n++; lux = lightMeter.readLightLevel(); watt = lux*0.0157916f; temp = RTC.getTemperature()*0.918646f; sumwatt = sumwatt + watt; calwatt = sumwatt/n; //เงื่อนไขการนับเวลา DateTime now = RTC.now(); if (now.hour()==0 && now.minute()==0){ count = 0; n = 0; sumwatt = 0; calwatt = 0; } if (watt > 120.0){ count++ ; } //---แสดงบนหน้าจอ--// Serial.println("Start Show data to Serial Monitor..."); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(','); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.print(','); Serial.print("Light(lux) = "); Serial.print(lux); Serial.print(" lux, Light(watt) = "); Serial.print(watt); Serial.print(" W/sqm, Temperature = "); Serial.print(temp); Serial.print(" C, Count= "); Serial.println(count); Serial.print(" minutes, Calwatt = "); Serial.print(calwatt); Serial.println(" W/sqm/day"); } //---เริ่มเก็บค่าลง SD Card--// String dataString = ""; DateTime now = RTC.now(); dataString += String(now.year(), DEC); dataString += String('/'); dataString += String(now.month(), DEC); dataString += String('/'); dataString += String(now.day(), DEC); dataString += String(','); dataString += String(now.hour(), DEC); dataString += String(':'); dataString += String(now.minute(), DEC); dataString += String(':'); dataString += String(now.second(), DEC); dataString += String(','); dataString += String(lux); dataString += String(','); dataString += String(watt); dataString += String(','); dataString += String(temp); dataString += String(','); dataString += String(count); dataString += String(','); dataString += String(calwatt); File dataFile = SD.open("datalog.txt", FILE_WRITE); //เปิดไฟล์ text if (dataFile) { Serial.println("Send Data to SD card ..."); dataFile.println(dataString); dataFile.close(); Serial.println(dataString); Serial.println("Send Data to SD card Complete!!!"); } else { Serial.println("error opening datalog.txt"); } Serial.println("Wait to send in 1 minutes..............."); sendData(lux,watt,temp,count,calwatt); //ส่งข้อมูลไป google sheet delay (60000); //ปรับแก้เวลาส่งในหน่วยมิลลิวินาที (1 นาที) } //เริ่มส่งค่าไป google sheet// void sendData(float x, float y, float z, int a, float b) { client.setInsecure(); Serial.print("connecting to "); Serial.println(host); if (!client.connect(host, httpsPort)) { Serial.println("connection failed"); return; } if (client.verify(fingerprint, host)) { Serial.println("certificate matches"); } else { Serial.println("certificate doesn't match"); } String string_x = String(x, DEC); String string_y = String(y, DEC); String string_z = String(z, DEC); String string_a = String(a, DEC); String string_b = String(b, DEC); String url = "/macros/s/" + GAS_ID + "/exec?lux=" + string_x + "&watt=" + string_y + "&temp=" + string_z + "&count=" + string_a + "&sumwatt=" + string_b; Serial.print("requesting URL: "); Serial.println(url); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: BuildFailureDetectorESP8266\r\n" + "Connection: close\r\n\r\n"); Serial.println("request sent"); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { Serial.println("headers received"); break; } } String line = client.readStringUntil('\n'); if (line.startsWith("{\"state\":\"success\"")) { Serial.println("esp8266/Arduino CI successfull!"); } else { Serial.println("esp8266/Arduino CI has failed"); } Serial.println("reply was:"); Serial.println("=========="); Serial.println(line); Serial.println("=========="); Serial.println("closing connection"); }