View difference between Paste ID: s9BUdDuJ and Y3LSua81
SHOW: | | - or go back to the newest paste.
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
}