ต้องการ แจ้งเตือนอุณหภูมิผ่านไลน์ด้วย ESP32

พอลองรันแล้วตามภาพค่ะ และ line ก็ไม่มีแจ้งเตือน ใดๆ

โค้ด

#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <SimpleDHT.h>
#include <SimpleTimer.h>
#include <time.h>
#include <TridentTD_LineNotify.h>

char auth[] = "Ul3cq98pci8XCXbMoVrwQzVdHYPWN9bA";
char ssid[] = "iPhone";
char pass[] = "12345678";
char server[] = "blynk-cloud.com";
int port = 80;

#define LINE_TOKEN  "peqzGflNSyWdjgZh0lQwKsTEHLXOQWQVPfLsQPyTDzz"


int DHTSENSOR = 15;             //GPIO15 (ADC2_CH3)
byte temperature = 0;   
byte humidity = 0;

//ระบุรุ่นเซ็นเซอร์รุ่น 
SimpleDHT22 dht22(15);
BlynkTimer timer;

//กำหนดให้ขาควบคุม Relay ใช้ขา GPIO 
#define Relay6Pin 19 // โซลินอยด์น้ำ
#define Relay7Pin 18 // ปั๊มน้ำ
#define Relay8Pin 23 // พัดลมระบายอากาศ
#define Relay9Pin 22 // พัดลมฮีตเตอร์
#define Relay10Pin 5 //ฮีตเตอร์

void sendSensor() {
  //กำหนดตัวแปรเก็บค่าอุณหภูมิ 
  byte temperature = 0;   
  //กำหนดตัวแปรเก็บค่าความชื้นสัมสัทธ์        
  byte humidity = 0;
  //อ่านค่าจากเซ็นเซอร์
  dht22.read(DHTSENSOR, &temperature, &humidity, NULL);
  while (temperature == 0) {
    //อ่านค่าจากเซ็นเซอร์
    dht22.read(DHTSENSOR, &temperature, &humidity, NULL);  
    Serial.println("DHT22 get failed");
    delay(1500);
  }
  //ส่งค่า humidity V13 ไปยัง blynk server
  Blynk.virtualWrite(V13, humidity);   
  //ส่งค่า temperature V12 ไปยัง blynk server
  Blynk.virtualWrite(V12, temperature);  
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.print("% | ");
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println("C");
   
}

void setup() {
   //เรียกใช้งาน Serial Monitor
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8080);
  //ตั้งเวลาส่งข้อมูลให้ Blynk Server ทุกๆ 1 วินาที
  timer.setInterval(5000L, sendSensor);     

  pinMode(Relay6Pin, OUTPUT);
  pinMode(Relay7Pin, OUTPUT);
  pinMode(Relay8Pin, OUTPUT);       
  pinMode(Relay9Pin, OUTPUT);   
  pinMode(Relay10Pin, OUTPUT);             
  digitalWrite(Relay6Pin,HIGH);// ให้รีเลย์ไม่ทำงานก่อนเสมอ
  digitalWrite(Relay7Pin,HIGH);// ให้รีเลย์ไม่ทำงานก่อนเสมอ
  digitalWrite(Relay8Pin,HIGH);// ให้รีเลย์ไม่ทำงานก่อนเสมอ   
  digitalWrite(Relay9Pin,HIGH);// ให้รีเลย์ไม่ทำงานก่อนเสมอ
  digitalWrite(Relay10Pin,HIGH);// ให้รีเลย์ไม่ทำงานก่อนเสมอ     
                                                           
}

void loop() {
  Blynk.run();//แอพblynkเริ่มการทำงาน
  timer.run();
    String LineText;
    String string1 = "อุณหภูมิ";
    String string2 = " °C";
    LineText = string1 + temperature + string2;
    Serial.print("Line ");
    Serial.println(LineText);
    LINE.notify(LineText);

}

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 > 5000) {
      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");
}

ตอนนี้ค่าอุณหภูมิออกปกติแล้วใช่ไหมครับ

เป็นแบบภาพที่ส่งให้ค่ะ มันไม่แจ้งเตือนอะไรด้วยค่ะ

ขอดูภาพที่ต่อเซนเซอร์ด้วยครับ

ปกติถ้าใช้ Library ของ TridentTD_LineNotify แล้ว ก็ ไม่จำเป็นต้องใช้

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 > 5000) {
      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");
}

เพราะคนเขียน เค้าน่าจะเขียน code ชุดนี้ลงใน Library แล้ว เพื่อนำไปงานได้ง่ายๆ

ลองดูใน TridentTD_LineNotify.cpp บรรทัดที่ 172-179 ดูครับ

String header = "POST /api/notify HTTP/1.1\r\n";
        header += "Host: notify-api.line.me\r\n";
        header += "Authorization: Bearer " + _token + "\r\n";
        header += "User-Agent: " + String(USER_AGENT) + "\r\n";
        header += "Connection: close\r\n";
        header += "Cache-Control: no-cache\r\n";
        header += "Content-Length: " + String(body_length) + "\r\n";
        header += "Content-Type: multipart/form-data; boundary=" + boundary + "\r\n\r\n";