KRITSADA

Line Notify

Nov 19th, 2019
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #define BLYNK_PRINT Serial    // กำหนด BYNK_PRINT = เท่ากับ Serail
  2. #include <ESP8266WiFi.h>     // เรียกใช้ library ESP8266WiFi8266.h เป็น library Wifi ESP8266
  3. #include <BlynkSimpleEsp8266.h>  // เรียกใช้ library BlynkSimpleEsp8266.h เป็น library app Blynk
  4. #define SERVER_PORT 80          //กำหนด SERVER_PORT = 80
  5. #include <LiquidCrystal.h>     //  // เรียกใช้ library LiquidCrystal.h เป็น library จอ LCD
  6. #define LINE_TOKEN "NEO6NR0SJ6huFOOJfE4zcyntIRli0nXgougXSsHJ6SS"  // รหัส LINE Notify token
  7. void Weather_display();    //กำหนด ฟังก์ชัน Weather_display
  8. void Line_Notify1(String message1) ; //กำหนด ฟังก์ชัน Line_Notify1
  9. void Line_Notify2(String message2) ; //กำหนด ฟังก์ชัน Line_Notify2
  10. void Line_Notify3(String message3) ; //กำหนด ฟังก์ชัน Line_Notify3
  11. void Line_Notify4(String message4) ; //กำหนด ฟังก์ชัน Line_Notify4
  12. void Line_Notify5(String message5) ; //กำหนด ฟังก์ชัน Line_Notify5
  13. void Line_Notify6(String message6) ; //กำหนด ฟังก์ชัน Line_Notify6
  14. void Line_Notify7(String message7) ; //กำหนด ฟังก์ชัน Line_Notify7
  15. String str_get1  = "GET /data/2.5/weather?q="; // กำหนดค่าคำสั่ง  GET
  16. String str_get2  = "&APPID=0da75c9e4dbd2d567f43307b7236f9fb&mode=xml&units=metric HTTP/1.1\r\n"; // กำหนดคำสั่ง HTTP
  17. String str_host = "Host: api.openweathermap.org\r\n\r\n"; // กำหนด Server
  18. String Value ;   // กำหนด Value เป็น String
  19. String city  ;   // กำหนด city เป็น String
  20. String message1 = "%E0%B9%80%E0%B8%A1%E0%B8%86%E0%B8%99%E0%B9%89%E0%B8%AD%E0%B8%A2%20%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%A1%E0%B8%B5%E0%B9%81%E0%B8%94%E0%B8%94%E0%B8%99%E0%B9%88%E0%B8%B2%E0%B8%88%E0%B8%B0%E0%B9%81%E0%B8%A3%E0%B8%87%E0%B8%99%E0%B8%B0%20%20%E0%B8%96%E0%B9%89%E0%B8%B2%E0%B8%81%E0%B8%A5%E0%B8%B1%E0%B8%A7%E0%B9%81%E0%B8%94%E0%B8%94%E0%B8%9E%E0%B8%81%E0%B8%A3%E0%B9%88%E0%B8%A1%E0%B9%84%E0%B8%9B%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%81%E0%B9%87%E0%B9%84%E0%B8%94%E0%B9%89%E0%B8%99%E0%B8%B0";
  21. String message2 = "%E0%B8%81%E0%B9%89%E0%B8%AD%E0%B8%99%E0%B9%80%E0%B8%A1%E0%B8%86%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%9B%E0%B8%A3%E0%B8%B2%E0%B8%A2%20%E0%B9%83%E0%B8%99%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B9%80%E0%B8%8A%E0%B9%89%E0%B8%B2%E0%B8%96%E0%B9%89%E0%B8%B2%E0%B8%81%E0%B8%A5%E0%B8%B1%E0%B8%A7%E0%B9%81%E0%B8%94%E0%B8%94%E0%B8%81%E0%B9%87%E0%B8%9E%E0%B8%81%E0%B8%A3%E0%B9%88%E0%B8%A1%E0%B9%84%E0%B8%9B%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2";
  22. String message3 = "%E0%B8%81%E0%B9%89%E0%B8%AD%E0%B8%99%E0%B9%80%E0%B8%A1%E0%B8%86%E0%B8%A1%E0%B8%B5%E0%B8%AA%E0%B8%B5%E0%B8%84%E0%B8%A5%E0%B9%89%E0%B8%B3%20%E0%B8%9D%E0%B8%99%E0%B8%AD%E0%B8%B2%E0%B8%88%E0%B8%88%E0%B8%B0%E0%B8%95%E0%B8%81%E0%B8%84%E0%B8%A7%E0%B8%A3%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%A3%E0%B9%88%E0%B8%A1%E0%B9%84%E0%B8%9B%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%81%E0%B9%87%E0%B8%94%E0%B8%B5%E0%B8%99%E0%B8%B0";
  23. String message4 = "%E0%B9%80%E0%B8%A1%E0%B8%86%E0%B8%A1%E0%B8%B7%E0%B8%94%E0%B8%84%E0%B8%A3%E0%B8%B6%E0%B9%89%E0%B8%A1%20%E0%B9%83%E0%B8%AB%E0%B9%89%E0%B8%84%E0%B8%B2%E0%B8%94%E0%B8%A7%E0%B9%88%E0%B8%B2%E0%B8%9D%E0%B8%99%E0%B8%95%E0%B8%81%E0%B9%81%E0%B8%99%E0%B9%88%E0%B8%99%E0%B8%AD%E0%B8%99%20%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%A3%E0%B9%88%E0%B8%A1%E0%B9%84%E0%B8%9B%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%99%E0%B8%B0";
  24. String message5 = "%E0%B8%9D%E0%B8%99%E0%B8%95%E0%B8%81%E0%B8%9B%E0%B8%A3%E0%B8%AD%E0%B8%A2%E0%B9%86%20%E0%B8%AD%E0%B8%A2%E0%B9%88%E0%B8%B2%E0%B8%A5%E0%B8%B7%E0%B8%A1%E0%B9%80%E0%B8%AD%E0%B8%B2%E0%B8%A3%E0%B9%88%E0%B8%A1%E0%B9%84%E0%B8%9B%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%99%E0%B8%B0";
  25. String message6 = "%E0%B8%9D%E0%B8%99%E0%B8%95%E0%B8%81%E0%B8%9B%E0%B8%B2%E0%B8%99%E0%B8%81%E0%B8%A5%E0%B8%B2%E0%B8%87%20%E0%B9%80%E0%B8%AD%E0%B8%B2%E0%B8%A3%E0%B9%88%E0%B8%A1%E0%B9%84%E0%B8%9B%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%99%E0%B8%B0";
  26. String message7 = "%E0%B8%9D%E0%B8%99%E0%B8%95%E0%B8%81%E0%B9%81%E0%B8%99%E0%B9%88%E0%B8%99%E0%B8%AD%E0%B8%99%20%E0%B8%95%E0%B9%89%E0%B8%AD%E0%B8%87%E0%B9%80%E0%B8%AD%E0%B8%B2%E0%B8%A3%E0%B9%88%E0%B8%A1%E0%B9%84%E0%B8%9B%E0%B8%99%E0%B8%B0%20%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B9%80%E0%B8%9B%E0%B9%87%E0%B8%99%E0%B8%AB%E0%B9%88%E0%B8%A7%E0%B8%87";
  27. LiquidCrystal lcd(D6, D5, D4, D3, D2, D1); //ฟังก์ชั่นแรกกำหนดPins ที่ใช้ในการเชื่อมต่อ
  28. WiFiServer server(SERVER_PORT);     //เปิดใช้งาน TCP Port 80
  29. WiFiClient client;              //ประกาศ  WiFiClient client
  30. char auth[] = "0aba9c3e70804ef7afb41a9ff816beeb";    // รหัส app Blynk
  31. const char* server_ip = "api.openweathermap.org";   //กำหนดชื่อ Server ที่ต้องการเชื่อมต่อ
  32. const long interval = 30000;            //กำหนดค่าตัวแปร ให้ทำงานทุกๆ 30 วินาที
  33. unsigned long previousMillis = 0;       //กำหนดตัวแปรเก็บค่า เวลาสุดท้ายที่ทำงาน
  34. unsigned long timer0 = 0 ;   // กำหนด timer0 = 0
  35. unsigned long timer1 = 0 ;  //  กำหนด timer0 = 1
  36.  
  37.  
  38. void setup()
  39. {
  40.   lcd.begin(16, 2);  // ให้ LCD เริ่มทำงาน
  41.   Serial.begin(115200); // กำหนดความเร็วให้รับส่ง-ข้อมูลความเร็ว 115200
  42.   Blynk.begin(auth, "PHONE2541", "0812393668"); // ใส่รหัส Blynk และรหัส WiFi
  43.   lcd.print("Welcome"); // แสดงผล Welcome ใน จอ LCD
  44.   lcd.setCursor(0, 1);   // ให้แสดงผลที่ บรรทัดที่ 1
  45.   lcd.print("My Project"); // แสดงผล My Project  
  46. }
  47.  BLYNK_WRITE(V0)  
  48. {  
  49.  Serial.println(param.asStr()); // ให้แสดงค่า ที่พิมพ์ใน Blynk ออก Serail Monitor
  50.  Value = param.asStr(); // กำหนดให้ Value = param.asStr
  51.  delay(200);     // Delay 200
  52. }
  53.  
  54.  
  55. void loop()
  56. {
  57.   Blynk.run();  // สั่งให้ Blynk ทำงาน
  58.   city = Value ;  // กำหนดให้ city = Value
  59.   Weather_display();  
  60.   unsigned long currentMillis = millis();           //อ่านค่าเวลาที่ ESP เริ่มทำงานจนถึงเวลาปัจจุบัน
  61.   if (currentMillis - previousMillis >= interval)         //ถ้าหากเวลาปัจจุบันลบกับเวลาก่อหน้านี้ มีค่า  มากกว่าค่า interval ให้คำสั่งภายใน if ทำงาน                    
  62. {
  63.     previousMillis = currentMillis;              //ให้เวลาปัจจุบัน เท่ากับ เวลาก่อนหน้าเพื่อใช้คำนวณเงื่อนไขในรอบถัดไป
  64.     Client_Request();  //เรียกใช้ฟังก์ชันClient_Request
  65. }
  66. }
  67.  
  68.  
  69.  void Weather_display()
  70. {
  71.   while (client.available())   //ตรวจเช็คว่ามีการส่งค่ากลับมาจาก Server หรือไม่
  72. {
  73.     String line = client.readStringUntil('\n');       //อ่านค่าที่ Server ตอบกลับมาทีละบรรทัด
  74.     String get_data = cut_string(line, "city", "name"); //ตัด string ข้อมูลส่วนชื่อจังหวัด
  75.     if (get_data != "NULL")   // ถ้า get_data ไม่เท่ากับ ค่าว่างเปล่า ให้คำสั่งภายใน if ทำงาน
  76. {
  77.     Serial.println("City"); // ให้แสดง City ใน Serial Monitor
  78.     Serial.println(get_data); // ให้แสดงค่า get_data ใน Serial Monitor
  79.     lcd.clear();  // clear LCD
  80.     lcd.print(get_data); // แสดงค่า get_data ในจอ LCD
  81.    
  82. }
  83.     get_data = cut_string(line, "weather", "value"); //ตัด string ข้อมูลส่วน ความดัน
  84.     if (get_data != "NULL")   // ถ้า get_data ไม่เท่ากับ ค่าว่างเปล่า ให้คำสั่งภายใน if ทำงาน
  85. {
  86.     Serial.println("Weather");  // ให้แสดง Weather ใน Serial Monitor
  87.     Serial.println(get_data);   // ให้แสดงค่า get_data ใน Serial Monitor
  88.     lcd.setCursor(0, 1);  // ให้แสดงในบรรทัดที่ 1 จอ LCD
  89.     lcd.print(get_data);  // แสดงค่า get_data ในจอ LCD
  90.     if (get_data == "few clouds") // ถ้า get_data ท่ากับ few clouds ให้คำสั่งภายใน if ทำงาน
  91. {
  92.     Serial.println("Weather"); // ให้แสดง Weather ใน Serial Monitor
  93.     Serial.println(get_data);  // ให้แสดงค่า get_data ใน Serial Monitor
  94.     lcd.setCursor(0, 1);  // ให้แสดงในบรรทัดที่ 1 จอ LCD
  95.     lcd.print(get_data);  // แสดงค่า get_data ในจอ LCD
  96.     Line_Notify1(message1);  // เรียกใช้ฟังก์ชัน Line_Notify1
  97. }
  98.     if (get_data == "scattered clouds")  // ถ้า get_data ท่ากับ scattered clouds ให้คำสั่งภายใน if ทำงาน
  99. {
  100.     Serial.println("Weather");  // ให้แสดง Weather ใน Serial Monitor
  101.     Serial.println(get_data);   // ให้แสดงค่า get_data ใน Serial Monitor
  102.     lcd.setCursor(0, 1);        // ให้แสดงในบรรทัดที่ 1 จอ LCD
  103.     lcd.print(get_data);        // แสดงค่า get_data ในจอ LCD
  104.     Line_Notify2(message2);     // เรียกใช้ฟังก์ชัน Line_Notify2
  105. }
  106.     if (get_data == "broken clouds")  // ถ้า get_data ท่ากับ broken clouds ให้คำสั่งภายใน if ทำงาน
  107. {
  108.     Serial.println("Weather");  // ให้แสดงค่า get_data ใน Serial Monitor
  109.     Serial.println(get_data);   // ให้แสดงค่า get_data ใน Serial Monitor
  110.     lcd.setCursor(0, 1);        // ให้แสดงในบรรทัดที่ 1 จอ LCD
  111.     lcd.print(get_data);        // แสดงค่า get_data ในจอ LCD
  112.     Line_Notify3(message3);     // เรียกใช้ฟังก์ชัน Line_Notify3
  113. }
  114.     if (get_data == "overcast clouds")  // ถ้า get_data ท่ากับ overcast clouds ให้คำสั่งภายใน if ทำงาน
  115. {
  116.     Serial.println("Weather");  // ให้แสดง Weather ใน Serial Monitor
  117.     Serial.println(get_data);   // ให้แสดงค่า get_data ใน Serial Monitor
  118.     lcd.setCursor(0, 1);        // ให้แสดงในบรรทัดที่ 1 จอ LCD
  119.     lcd.print(get_data);        // แสดงค่า get_data ในจอ LCD
  120.     Line_Notify4(message4);     // เรียกใช้ฟังก์ชัน Line_Notify4
  121. }
  122.      if (get_data == "light rain")  // ถ้า get_data ท่ากับ light rain ให้คำสั่งภายใน if ทำงาน
  123. {
  124.      Serial.println("Weather");  // ให้แสดง Weather ใน Serial Monitor
  125.      Serial.println(get_data);   // ให้แสดงค่า get_data ใน Serial Monitor
  126.      lcd.setCursor(0, 1);        // ให้แสดงในบรรทัดที่ 1 จอ LCD
  127.      lcd.print(get_data);        // แสดงค่า get_data ในจอ LCD
  128.      Line_Notify5(message5);     // เรียกใช้ฟังก์ชัน Line_Notify5
  129. }
  130.  
  131.      if (get_data == "moderate rain")  // ถ้า get_data ท่ากับ moderate rain ให้คำสั่งภายใน if ทำงาน
  132. {
  133.      Serial.println("Weather");  // ให้แสดง Weather ใน Serial Monitor
  134.      Serial.println(get_data);   // ให้แสดงค่า get_data ใน Serial Monitor
  135.      lcd.setCursor(0, 1);        // ให้แสดงในบรรทัดที่ 1 จอ LCD
  136.      lcd.print(get_data);        // แสดงค่า get_data ในจอ LCD
  137.      Line_Notify6(message6);     // เรียกใช้ฟังก์ชัน Line_Notify6
  138. }
  139.      if (get_data == "heavy intensity rain")  // ถ้า get_data ท่ากับ heavy intensity rain ให้คำสั่งภายใน if ทำงาน
  140. {
  141.      Serial.println("Weather");  // ให้แสดง Weather ใน Serial Monitor
  142.      Serial.println(get_data);   // ให้แสดงค่า get_data ใน Serial Monitor
  143.      lcd.setCursor(0, 1);        // ให้แสดงในบรรทัดที่ 1 จอ LCD
  144.      lcd.print("heavy rain");    // แสดงค่า get_data ในจอ LCD
  145.      Line_Notify7(message7);     // เรียกใช้ฟังก์ชัน Line_Notify7
  146. }
  147.      if (get_data == "light intensity shower rain")  // ถ้า get_data ท่ากับ light intensity shower rain ให้คำสั่งภายใน if ทำงาน
  148. {
  149.      Serial.println("Weather");  // ให้แสดง Weather ใน Serial Monitor
  150.      Serial.println(get_data);   // ให้แสดงค่า get_data ใน Serial Monitor
  151.      lcd.setCursor(0, 1);        // ให้แสดงในบรรทัดที่ 1 จอ LCD
  152.      lcd.print("shower rain");   // แสดงค่า get_data ในจอ LCD
  153.      Line_Notify7(message7);     // เรียกใช้ฟังก์ชัน Line_Notify7
  154. }
  155. }
  156. }
  157. }
  158.  
  159.  
  160. void Client_Request()
  161. {
  162.   Serial.println("Connect TCP Server");  // ให้แสดง Connect TCP Server ใน Serial Monitor
  163.   int cnt = 0;                           // ประกาศตัวแปร cnt = 0
  164.   while (!client.connect(server_ip, SERVER_PORT))  // เชื่อมต่อกับ Server และรอจนกว่าเชื่อมต่อสำเร็จ
  165. {
  166.   Serial.print(".");  // แสดง . ใน Serial Monitor
  167.   delay(100);    // delay เวลา 100
  168.   cnt++;         // cnt = cnt + 1
  169.   if (cnt > 50)  // ถ้าหากใช้เวลาเชื่อมต่อเกิน 5 วินาที ให้ออกจาก ฟังก์ชั่น
  170.   return;        // return กลับไป
  171. }
  172.   Serial.println("Success");  // แสดง Success ใน Serial Monitor
  173.   delay(500);  // delay เวลา 500
  174.   client.print(str_get1 + city + str_get2 + str_host);  // ส่งคำสั่ง HTTP GET ไปยัง Server
  175.   Serial.print(str_get1 + city + str_get2 + str_host);  // แสดงค่าคำสั่ง HTTP GET ไปยัง Server ใน Serial Monitor
  176.   delay(100);  // delay เวลา 100
  177. }
  178.   String cut_string(String input, String header, String get_string)  // ประกาศตัวแปร cut_string มี Array ที่ประกอบด้วย input header get_string
  179. {
  180.   if (input.indexOf(header) != -1)    //ตรวจสอบว่าใน input มีข้อความเหมือนใน header หรือไม่
  181. {
  182.   int num_get = input.indexOf(get_string, input.indexOf(header));   //หาตำแหน่งของข้อความ get_string ใน input
  183.   if (num_get != -1)                  //ตรวจสอบว่าตำแหน่งที่ได้ไม่ใช่ -1 (ไม่มีข้อความ get_string ใน input)
  184. {
  185.   int start_val = input.indexOf("\"", num_get) + 1; // หาตำแหน่งแรกของ “
  186.   int stop_val = input.indexOf("\"", start_val);    // หาตำแหน่งสุดท้ายของ “
  187.   return (input.substring(start_val, stop_val));    //ตัดเอาข้อความระหว่า “แรก และ ”สุดท้าย
  188. }
  189.   else  // ถ้าเงื่อนไขไม่ตรงให้ทำในคำสั่ง else
  190. {
  191.   return ("NULL");  //Return ข้อความ NULL เมื่อไม่ตรงเงื่อนไข
  192. }
  193. }
  194.   return ("NULL"); //Return ข้อความ NULL เมื่อไม่ตรงเงื่อนไข
  195. }
  196.  
  197.  
  198. void Line_Notify1(String message1)
  199. {
  200.   digitalWrite(D7,HIGH);
  201.   WiFiClientSecure client;  // ประกาศ WiFiClientSecure client
  202.   if (!client.connect("notify-api.line.me", 443))  // ถ้าเชื่อมต่อไม่ได้ให้ไปทำงานในฟังก์ชัน
  203. {
  204.   Serial.println("connection failed");  // แสดงค่า connection failedconnection ใน Serial Monitor
  205.   return;  //Return กลับไป
  206. }
  207.   String req = "";  // ประกาศตัวแปร req
  208.   req += "POST /api/notify HTTP/1.1\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  209.   req += "Host: notify-api.line.me\r\n";   // req ก่อนหน้านี้มาบวกประโยคกัน
  210.   req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  211.   req += "Cache-Control: no-cache\r\n";    // req ก่อนหน้านี้มาบวกประโยคกัน
  212.   req += "User-Agent: ESP8266\r\n";        // req ก่อนหน้านี้มาบวกประโยคกัน
  213.   req += "Connection: close\r\n";          // req ก่อนหน้านี้มาบวกประโยคกัน
  214.   req += "Content-Type: application/x-www-form-urlencoded\r\n";   // req ก่อนหน้านี้มาบวกประโยคกัน
  215.   req += "Content-Length: " + String(String("message=" + message1).length()) + "\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  216.   req += "\r\n";                 // req ก่อนหน้านี้มาบวกประโยคกัน
  217.   req += "message=" + message1;  // req ก่อนหน้านี้มาบวกประโยคกัน
  218.   client.print(req);             // ส่งข้อความ req ผ่าน Serial Monitor
  219.   delay(20);                     // Delay เวลา 20
  220.   while (client.connected())     // ถ้า client.connected ให้ทำงานใน while ถ้าไม่ ออกนอก while
  221. {
  222.   String line = client.readStringUntil('\n');  // ประกาศตัวแปร line = client.readStringUntil
  223.   if (line == "\r")  // ถ้า line = เริ่มบรรทัดหม่ ให้ทำงานใน if
  224.   digitalWrite(D7,HIGH);
  225. {  
  226.   break;  // หยุด
  227. }
  228. }
  229. }
  230.  
  231.  
  232. void Line_Notify2(String message2)
  233. {
  234.   digitalWrite(D7,HIGH);
  235.   WiFiClientSecure client;  // ประกาศ WiFiClientSecure client
  236.  
  237.   if (!client.connect("notify-api.line.me", 443))   // ถ้าเชื่อมต่อไม่ได้ให้ไปทำงานในฟังก์ชัน
  238. {
  239.   Serial.println("connection failed");    // แสดงค่า connection failedconnection ใน Serial Monitor
  240.   return;  //Return กลับไป
  241. }
  242.   String req = "";  // ประกาศตัวแปร req
  243.   req += "POST /api/notify HTTP/1.1\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  244.   req += "Host: notify-api.line.me\r\n";   // req ก่อนหน้านี้มาบวกประโยคกัน
  245.   req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  246.   req += "Cache-Control: no-cache\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  247.   req += "User-Agent: ESP8266\r\n";      // req ก่อนหน้านี้มาบวกประโยคกัน
  248.   req += "Connection: close\r\n";        // req ก่อนหน้านี้มาบวกประโยคกัน
  249.   req += "Content-Type: application/x-www-form-urlencoded\r\n";   // req ก่อนหน้านี้มาบวกประโยคกัน
  250.   req += "Content-Length: " + String(String("message=" + message2).length()) + "\r\n";   // req ก่อนหน้านี้มาบวกประโยคกัน
  251.   req += "\r\n";     // req ก่อนหน้านี้มาบวกประโยคกัน
  252.   req += "message=" + message2;   // req ก่อนหน้านี้มาบวกประโยคกัน
  253.   client.print(req);              // ส่งข้อความ req ผ่าน Serial Monitor
  254.   delay(20);                      // Delay เวลา 20
  255.   while (client.connected())      // ถ้า client.connected ให้ทำงานใน while ถ้าไม่ ออกนอก while
  256. {
  257.   String line = client.readStringUntil('\n');  // ประกาศตัวแปร line = client.readStringUntil
  258.   if (line == "\r")  // ถ้า line = เริ่มบรรทัดหม่ ให้ทำงานใน if
  259.   digitalWrite(D7,HIGH);
  260. {
  261.   break;  // หยุดแล้วออกคำสั่ง
  262. }
  263. }
  264. }
  265.  
  266.  
  267. void Line_Notify3(String message3)
  268. {
  269.   digitalWrite(D7,HIGH);
  270.   WiFiClientSecure client;  // ประกาศ WiFiClientSecure client
  271.  
  272.   if (!client.connect("notify-api.line.me", 443))  // ถ้าเชื่อมต่อไม่ได้ให้ไปทำงานในฟังก์ชัน
  273. {
  274.   Serial.println("connection failed");  // แสดงค่า connection failedconnection ใน Serial Monitor
  275.   return;  //Return กลับไป
  276. }
  277.   String req = "";  // ประกาศตัวแปร req
  278.   req += "POST /api/notify HTTP/1.1\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  279.   req += "Host: notify-api.line.me\r\n";   // req ก่อนหน้านี้มาบวกประโยคกัน
  280.   req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  281.   req += "Cache-Control: no-cache\r\n";    // req ก่อนหน้านี้มาบวกประโยคกัน
  282.   req += "User-Agent: ESP8266\r\n";        // req ก่อนหน้านี้มาบวกประโยคกัน
  283.   req += "Connection: close\r\n";          // req ก่อนหน้านี้มาบวกประโยคกัน
  284.   req += "Content-Type: application/x-www-form-urlencoded\r\n";   // req ก่อนหน้านี้มาบวกประโยคกัน
  285.   req += "Content-Length: " + String(String("message=" + message3).length()) + "\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  286.   req += "\r\n";  // req ก่อนหน้านี้มาบวกประโยคกัน
  287.   req += "message=" + message3;  // req ก่อนหน้านี้มาบวกประโยคกัน
  288.   client.print(req);             // ส่งข้อความ req ผ่าน Serial Monitor
  289.   delay(20);                     // Delay เวลา 20
  290.   while (client.connected())     // ถ้า client.connected ให้ทำงานใน while ถ้าไม่ ออกนอก while
  291.  
  292. {
  293.   String line = client.readStringUntil('\n');  // ประกาศตัวแปร line = client.readStringUntil
  294.   if (line == "\r")  // ถ้า line = เริ่มบรรทัดหม่ ให้ทำงานใน if
  295. {
  296.   break;  // หยุดแล้วออกคำสั่ง
  297. }
  298. }
  299. }
  300.  
  301.  
  302. void Line_Notify4(String message4)
  303. {
  304.   digitalWrite(D7,HIGH);
  305.   WiFiClientSecure client;  // ประกาศ WiFiClientSecure client
  306.   if (!client.connect("notify-api.line.me", 443))  // ถ้าเชื่อมต่อไม่ได้ให้ไปทำงานในฟังก์ชัน
  307. {
  308.   Serial.println("connection failed");  // แสดงค่า connection failedconnection ใน Serial Monitor
  309.   return;  //Return กลับไป
  310. }
  311.   String req = "";  // ประกาศตัวแปร req
  312.   req += "POST /api/notify HTTP/1.1\r\n";  // ประกาศตัวแปร req
  313.   req += "Host: notify-api.line.me\r\n";   // ประกาศตัวแปร req
  314.   req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";  // ประกาศตัวแปร req
  315.   req += "Cache-Control: no-cache\r\n";    // ประกาศตัวแปร req
  316.   req += "User-Agent: ESP8266\r\n";        // ประกาศตัวแปร req
  317.   req += "Connection: close\r\n";          // ประกาศตัวแปร req
  318.   req += "Content-Type: application/x-www-form-urlencoded\r\n";  // ประกาศตัวแปร req
  319.   req += "Content-Length: " + String(String("message=" + message4).length()) + "\r\n";  // ประกาศตัวแปร req
  320.   req += "\r\n";                 // ประกาศตัวแปร req
  321.   req += "message=" + message4;  // ประกาศตัวแปร req
  322.   client.print(req);             // ส่งข้อความ req ผ่าน Serial Monitor
  323.   delay(20);                     // Delay เวลา 20
  324.   while (client.connected())     // ถ้า client.connected ให้ทำงานใน while ถ้าไม่ ออกนอก while
  325. {
  326.   String line = client.readStringUntil('\n');  // ประกาศตัวแปร line = client.readStringUntil
  327.   if (line == "\r")  // ถ้า line = เริ่มบรรทัดหม่ ให้ทำงานใน if
  328. {
  329.   break;  // หยุดแล้วออกคำสั่ง
  330. }
  331. }
  332. }
  333.  
  334.  
  335. void Line_Notify5(String message5)
  336. {
  337.   digitalWrite(D7,HIGH);
  338.   WiFiClientSecure client;  // ประกาศ WiFiClientSecure client
  339.  
  340.   if (!client.connect("notify-api.line.me", 443))  // ถ้าเชื่อมต่อไม่ได้ให้ไปทำงานในฟังก์ชัน
  341. {
  342.   Serial.println("connection failed");  // แสดงค่า connection failedconnection ใน Serial Monitor
  343.   return;  //Return กลับไป
  344. }
  345.   String req = "";  // ประกาศตัวแปร req
  346.   req += "POST /api/notify HTTP/1.1\r\n";  // ประกาศตัวแปร req
  347.   req += "Host: notify-api.line.me\r\n";   // ประกาศตัวแปร req
  348.   req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";  // ประกาศตัวแปร req
  349.   req += "Cache-Control: no-cache\r\n";    // ประกาศตัวแปร req
  350.   req += "User-Agent: ESP8266\r\n";        // ประกาศตัวแปร req
  351.   req += "Connection: close\r\n";          // ประกาศตัวแปร req
  352.   req += "Content-Type: application/x-www-form-urlencoded\r\n";   // ประกาศตัวแปร req
  353.   req += "Content-Length: " + String(String("message=" + message5).length()) + "\r\n";  // ประกาศตัวแปร req
  354.   req += "\r\n";                 // ประกาศตัวแปร req
  355.   req += "message=" + message5;  // ประกาศตัวแปร req
  356.   client.print(req);             // ส่งข้อความ req ผ่าน Serial Monitor
  357.   delay(20);                     // Delay เวลา
  358.   while (client.connected())     // ถ้า client.connected ให้ทำงานใน while ถ้าไม่ ออกนอก while
  359. {
  360.   String line = client.readStringUntil('\n');  // ประกาศตัวแปร line = client.readStringUntil
  361.   if (line == "\r")  // ถ้า line = เริ่มบรรทัดหม่ ให้ทำงานใน if
  362. {
  363.   break;  // หยุดแล้วออกคำสั่ง
  364. }
  365. }
  366. }
  367.  
  368.  
  369. void Line_Notify6(String message6)
  370. {
  371.   digitalWrite(D7,HIGH);
  372.   WiFiClientSecure client;  // ประกาศ WiFiClientSecure client
  373.  
  374.   if (!client.connect("notify-api.line.me", 443))  // ถ้าเชื่อมต่อไม่ได้ให้ไปทำงานในฟังก์ชัน
  375. {
  376.   Serial.println("connection failed");  // แสดงค่า connection failedconnection ใน Serial Monitor
  377.   return;  //Return กลับไป
  378. }
  379.   String req = "";  // ประกาศตัวแปร req
  380.   req += "POST /api/notify HTTP/1.1\r\n";  // ประกาศตัวแปร req
  381.   req += "Host: notify-api.line.me\r\n";   // ประกาศตัวแปร req
  382.   req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";  // ประกาศตัวแปร req
  383.   req += "Cache-Control: no-cache\r\n";    // ประกาศตัวแปร req
  384.   req += "User-Agent: ESP8266\r\n";        // ประกาศตัวแปร req
  385.   req += "Connection: close\r\n";          // ประกาศตัวแปร req
  386.   req += "Content-Type: application/x-www-form-urlencoded\r\n";   // ประกาศตัวแปร req
  387.   req += "Content-Length: " + String(String("message=" + message6).length()) + "\r\n";  // ประกาศตัวแปร req
  388.   req += "\r\n";                 // ประกาศตัวแปร req
  389.   req += "message=" + message6;  // ประกาศตัวแปร req
  390.   client.print(req);             // ส่งข้อความ req ผ่าน Serial Monitor
  391.   delay(20);                     // Delay เวลา
  392.   while (client.connected())     // ถ้า client.connected ให้ทำงานใน while ถ้าไม่ ออกนอก while
  393. {
  394.   String line = client.readStringUntil('\n');  // ประกาศตัวแปร line = client.readStringUntil
  395.   if (line == "\r")  // ถ้า line = เริ่มบรรทัดหม่ ให้ทำงานใน if
  396. {
  397.   break;  // หยุดแล้วออกคำสั่ง
  398. }
  399. }
  400. }
  401.  
  402.  
  403. void Line_Notify7(String message7)
  404. {
  405.   digitalWrite(D7,HIGH);
  406.   WiFiClientSecure client;  // ประกาศ WiFiClientSecure client
  407.  
  408.   if (!client.connect("notify-api.line.me", 443))  // ถ้าเชื่อมต่อไม่ได้ให้ไปทำงานในฟังก์ชัน
  409. {
  410.   Serial.println("connection failed");  // แสดงค่า connection failedconnection ใน Serial Monitor
  411.   return;  //Return กลับไป
  412. }
  413.   String req = "";  // ประกาศตัวแปร req
  414.   req += "POST /api/notify HTTP/1.1\r\n";  // ประกาศตัวแปร req
  415.   req += "Host: notify-api.line.me\r\n";   // ประกาศตัวแปร req
  416.   req += "Authorization: Bearer " + String(LINE_TOKEN) + "\r\n";  // ประกาศตัวแปร req
  417.   req += "Cache-Control: no-cache\r\n";    // ประกาศตัวแปร req
  418.   req += "User-Agent: ESP8266\r\n";        // ประกาศตัวแปร req
  419.   req += "Connection: close\r\n";          // ประกาศตัวแปร req
  420.   req += "Content-Type: application/x-www-form-urlencoded\r\n";   // ประกาศตัวแปร req
  421.   req += "Content-Length: " + String(String("message=" + message7).length()) + "\r\n";  // ประกาศตัวแปร req
  422.   req += "\r\n";                 // ประกาศตัวแปร req
  423.   req += "message=" + message7;  // ประกาศตัวแปร req
  424.   client.print(req);             // ส่งข้อความ req ผ่าน Serial Monitor
  425.   delay(20);                     // Delay เวลา
  426.   while (client.connected())     // ถ้า client.connected ให้ทำงานใน while ถ้าไม่ ออกนอก while
  427. {
  428.   String line = client.readStringUntil('\n');  // ประกาศตัวแปร line = client.readStringUntil
  429.   if (line == "\r")  // ถ้า line = เริ่มบรรทัดหม่ ให้ทำงานใน if
  430. {
  431.   break;  // หยุดแล้วออกคำสั่ง
  432. }
  433. }
  434. }
Add Comment
Please, Sign In to add comment