ESP8266 อยากส่งข้อความ สถานะการทำงาน ของระบบไปยังไลน์ครับ

คือ อยากส่งข้อความ สถานะการทำงาน ของระบบรดน้ำอัตโนมัติ โดยที่ระบบ จะมีการทำงาน 3 อย่างครับ คือระบบออโต้ ระบบตั้งเวลา ระบบกดปุ่มด้วยมือ แล้วอยากจะแสดง สถานะการทำงาน พวกนี้ผ่าน การเช็คค่า การทำงานของ รีเลย์พอจะทำได้ไหมครับ

ได้ครับ ก็ถ้าเลือกการทำงานใยโหมดไหน ก่อนเข้าไปทำงานขั้นแรกก็ใส่คำสั่งส่งไลน์ ได้เลย

พอจะมีตัวอย่างโค้ดคร่าวๆไหมครับ ลองอ่านจากหลายๆ ที่แล้วไม่เข้าใจเลย

ตอนนี้ทำอะไรไปแล้วบ้างครับ

#define BLYNK_PRINT Serial
#define USING_AXTLS
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <WiFiClientSecureAxTLS.h>
#include <TridentTD_LineNotify.h>
using namespace axTLS;

//เชื่อมไลน์
#define LINE_TOKEN  "VAEpcKW3xorRYxoNfGN89BWOiUUunIizNIJaT3nLNj*"
//เชื่อมBlynk
char auth[] = "piTKkook40-nSDQQpsh9cj-rOPwEfFh*";
//เชื่อมwifi
#define WIFI_SSID "Wifi-SE11_2.4GH*"
#define WIFI_PASSWORD "08147029*" 
 //ตัวแปร
  float value;
  float SUM;
  int SUM1 = 100;
  int SUM2 = 0;
  
     BLYNK_WRITE(V1)
{
  Serial.print("Got a value: ");
  Serial.println(param.asInt());
  if(param.asInt() == 1)
{
  digitalWrite(14, HIGH); //Relay1 on
  Blynk.virtualWrite(V4,SUM1);
}
if(param.asInt() == 0)
{
digitalWrite(14, LOW);
Blynk.virtualWrite(V4,SUM2);
}
}
      BLYNK_WRITE(V2)
   {
    Serial.print("Got a value: ");
    Serial.println(param.asInt());
    if(param.asInt() == 1)
    {
      digitalWrite(14, HIGH);//ปั้มน้ำถูกเปิด
      Blynk.virtualWrite(V4,SUM1);
     
    }
    if(param.asInt() == 0)
    {
      digitalWrite(14, LOW);//ปั้มน้ำถูกปิด
      Blynk.virtualWrite(V4,SUM2);
    }
   }

void setup()
{
   Serial.begin(115200);
   pinMode(14,OUTPUT);
    pinMode(15,OUTPUT);
    //เรียกใช้ตัวเชื่อมwifi
    Blynk.begin(auth,WIFI_SSID,WIFI_PASSWORD);
    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
    Serial.print("connecting");
  }
    //ส่งข้อความไลน์

  


 

  void loop()
 {
  
    value = analogRead(A0);
    Serial.println(value);
    delay(1000);
    Serial.print(SUM = (value / 1024) * 100);//แปลงค่าความชื้น
    Serial.println();
    Blynk.virtualWrite(V0,SUM);
    if (SUM > 60) //เงื่อนไขการเปิดปั้มน้ำผ่านเซนเซอร์
    {
      digitalWrite(15, HIGH);
      Blynk.virtualWrite(V3,SUM1);
       String txt = "Relay  on (" + String (millis()) + ")";
    Line_Notify(LINE_TOKEN, txt);
    }
    if (SUM  < 59)//เงื่อนไขการปิดปั้มน้ำผ่านเซนเซอร์
    {

      digitalWrite(15, LOW);
      Blynk.virtualWrite(V3,SUM2);
       String txt = "Relay  off (" + String (millis()) + ")";
    Line_Notify(LINE_TOKEN, txt);
    }
      
 
 
  Blynk.run();
  }
  
 void Line_Notify(String LINE_Token, String message) {

  String msg = String ("message=") + message;

  WiFiClientSecure client;
  if (!client.connect("notify-api.line.me", 443)) {
    Serial.println("connection failed");
    return;
  }

  String req = "";
  req += "POST /api/notify HTTP/1.1\r\n";
  req += "Host: notify-api.line.me\r\n";
  req += "Content-Type: application/x-www-form-urlencoded\r\n";
  req += "Authorization: Bearer " + String(LINE_Token) + "\r\n";
  req += "Content-Length: " + String(msg.length()) + "\r\n";
  req += "\r\n";
  req +=  msg;

  client.print(req);

 unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 500) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }


  Serial.println();
  Serial.println("closing connection");
}

อธิบายโค้ตด้วยครับ ทำอะไรได้แล้วบ้าง เหลืออะไรบ้าง

#define BLYNK_PRINT Serial
#define USING_AXTLS
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <WiFiClientSecureAxTLS.h>
#include <TridentTD_LineNotify.h>
using namespace axTLS;

//เชื่อมไลน์
#define LINE_TOKEN  "VAEpcKW3xorRYxoNfGN89BWOiUUunIizNIJaT3nLNj*"
//เชื่อมBlynk
char auth[] = "piTKkook40-nSDQQpsh9cj-rOPwEfFh*";
//เชื่อมwifi
#define WIFI_SSID "Wifi-SE11_2.4GH*"
#define WIFI_PASSWORD "08147029*" 
 //ตัวแปร
  float value;
  float SUM;
  int SUM1 = 100;
  int SUM2 = 0;
  
     BLYNK_WRITE(V1) //เชื่อมblynkในส่วนตั้งเวลา1
{
  Serial.print("Got a value: ");
  Serial.println(param.asInt());
  if(param.asInt() == 1)
{
  digitalWrite(14, HIGH); //ปั้มน้ำถูกเปิด
  Blynk.virtualWrite(V4,SUM1);//แสดงค่าในกราฟ
}
if(param.asInt() == 0)
{
digitalWrite(14, LOW);
Blynk.virtualWrite(V4,SUM2);//แสดงค่าในกราฟ
}
}
      BLYNK_WRITE(V2) //เชื่อมblynkในส่วนตั้งเวลา2
   {
    Serial.print("Got a value: ");
    Serial.println(param.asInt());
    if(param.asInt() == 1)
    {
      digitalWrite(14, HIGH);//ปั้มน้ำถูกเปิด
      Blynk.virtualWrite(V4,SUM1);//แสดงค่าในกราฟ
     
    }
    if(param.asInt() == 0)
    {
      digitalWrite(14, LOW);//ปั้มน้ำถูกปิด
      Blynk.virtualWrite(V4,SUM2);//แสดงค่าในกราฟ
    }
   }

void setup()
{
   Serial.begin(115200);
   pinMode(14,OUTPUT);//กำหนดขาเป็นส่งข้อมูลออก
    pinMode(15,OUTPUT);//กำหนดขาเป็นส่งข้อมูลออก
    //เรียกใช้ตัวเชื่อมwifi
    Blynk.begin(auth,WIFI_SSID,WIFI_PASSWORD);
    WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
    Serial.print("connecting");//แสดงสถานะwifi
  }
  
  void loop()
 {
   //ส่วนการทำงานออโต้ 
    value = analogRead(A0); //รับค่าความชื้นในดิน
    Serial.println(value);
    delay(1000);
    Serial.print(SUM = (value / 1024) * 100);//แปลงค่าความชื้นเป็น100%
    Serial.println();
    Blynk.virtualWrite(V0,SUM);//แสดงค่าในกราฟ
    if (SUM > 60) //ความชื้นมากกว่า 60 เปิดปั้มน้ำ
    {
      digitalWrite(15, HIGH);//ส่งคำสั่งไปขา15
      Blynk.virtualWrite(V3,SUM1);//แสดงค่าในกราฟ
       String txt = "Relay  on (" + String (millis()) + ")";//ส่งข้อความไปไลน์ แต่ข้อความขึ้นเรื่อยๆ
    Line_Notify(LINE_TOKEN, txt);
    }
    if (SUM  < 59) //ความชื้นมากกว่า 60 เปิดปั้มน้ำ
    {

      digitalWrite(15, LOW);//ส่งคำสั่งไปขา15
      Blynk.virtualWrite(V3,SUM2);//แสดงค่าในกราฟ
       String txt = "Relay  off (" + String (millis()) + ")";//ส่งข้อความไปไลน์ แต่ข้อความขึ้นเรื่อยๆ
    Line_Notify(LINE_TOKEN, txt);
    }
      
 
 
  Blynk.run();
  }
  
 void Line_Notify(String LINE_Token, String message) {

  String msg = String ("message=") + message;

  WiFiClientSecure client;
  if (!client.connect("notify-api.line.me", 443)) {
    Serial.println("connection failed");
    return;
  }

  String req = "";
  req += "POST /api/notify HTTP/1.1\r\n";
  req += "Host: notify-api.line.me\r\n";
  req += "Content-Type: application/x-www-form-urlencoded\r\n";
  req += "Authorization: Bearer " + String(LINE_Token) + "\r\n";
  req += "Content-Length: " + String(msg.length()) + "\r\n";
  req += "\r\n";
  req +=  msg;

  client.print(req);

 unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 500) { //หน่วงการส่งข้อความ
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }


  Serial.println();
  Serial.println("closing connection");
}

ระบบทำงานทุกอย่างแล้วครับ ทั้งระบบออโต้ ระบบตั้งเวลา ระบบกดด้วยมือ แล้วก็กราฟแสดงผล เหลือแค่แจ้งผ่านไลน์ ที่ยังไม่เช้าใจ ลองเอาหลายๆวิธีที่เจอมาทำก็ยังไม่เป็นผล ในช่วงสุดท้ายตรงส่งข้อความไลน์ที่ไม่ได้อธิบายโค้ดเพราะยังไม่เข้าใจนะครับ ยังไงรบกวนอธิบายด้วยจะเป็นพระคุณอย่างยิ่งครับ ขอบคุณครับ

ลองดูใน Live ครับผมอธิบายไว้แล้วใช้หลักการเดียวกัน

ขอบคุณมากครับ

เบื้งต้นลองเอาวิธีพี่ไปปรับใช้แล้วครับ ได้แล้วตรงฟังก์ชันปุ่มกด แต่พอเอาไปใช้ในฟังก์ชันตั้งเวลา ขึ้น NotifyLine’ was not declared in this scope ครับ

Arduino: 1.8.14 Hourly Build 2020/07/23 04:33 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"
C:\Users\jatur\OneDrive\เดสก์ท็อป\line\line2\line2.ino: In function 'void BlynkWidgetWrite1(BlynkReq&, const BlynkParam&)':
line2:39:44: error: 'NotifyLine' was not declared in this scope
line2:48:45: error: 'NotifyLine' was not declared in this scope
line2:55:4: error: a function-definition is not allowed here before '{' token

line2:175:1: error: expected '}' at end of input

exit status 1
'NotifyLine' was not declared in this scope
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

แกได้แล้วครับ ลืมใส่ }

ยอดเยี่ยมมากครับ