อยากให้ ESP32 ส่งค่าเข้า Line Notify ทุกๆ 1 ชั่วโมง

สวัสดีครับตอนนี้ผมทำเครื่องวัดคุณภาพอากาศและอุณหภูมิความชื้น
แสดงผลผ่าน Blynk และ จอ LCD ,Line Notify ครับ
อยากทราบวิธีการเขียนโค๊ด Line Notify ที่คอยส่งค่าที่ได้จาก Sensor ทุกๆ 1 ชั่วโมง
โค๊ดที่เขียนอันเก่ามันส่งค่าเข้าไลน์ทุกๆ 1 วิ
รูปโค๊ดคราวๆครับลองทำเองบางเล็กน้อยครับตอนนี้ยังไม่ใส่โค๊ดของจอ LCD

 #include "PMS.h"
 #include <BlynkSimpleEsp32.h>
 #include <TridentTD_LineNotify.h>
 #include <DHT.h>
 #include <NTPClient.h>

////////
const long utcOffsetInSeconds = 25200;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
 /////////
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds);
///////
 #define DHTPIN 5
 #define DHTTYPE DHT22   
 DHT dht(DHTPIN, DHTTYPE);
 
 PMS pms(Serial);
 PMS::DATA data;

 #define LINE_TOKEN "-----------------------------------------"
 char auth[] = "-----------------------------------";              
 char ssid[] = "------------------------";
 char pass[] = "------------------------"; 



 void setup()
 {
  Serial.begin(9600);  
  dht.begin();
  Blynk.begin(auth, ssid, pass);
  LINE.setToken(LINE_TOKEN);
 }

 void loop()
  {
   Blynk.run();
   
    if (pms.read(data)){
    int pm1 = data.PM_AE_UG_1_0; 
    int pm2 = data.PM_AE_UG_2_5; 
    int pm10 = data.PM_AE_UG_10_0; 
    
    Blynk.virtualWrite(V1,pm1);
    Blynk.virtualWrite(V2,pm2);
    Blynk.virtualWrite(V3,pm10);
    
   if (pm1>=40){
  LINE.notify("PM 1.0: "+String(pm1)+" ug/m3"); 
  }
  if (pm2>=60){
  LINE.notify("PM 2.5: "+String(pm2)+" ug/m3"); 
  }
  if (pm10>=120){
  LINE.notify("PM 10.0: "+String(pm10)+" ug/m3"); 
  }
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    
    Blynk.virtualWrite(V5, h);
    Blynk.virtualWrite(V4, t);
    
////////////////////////////////////////////////
    int hour = 0;
  for (int i = 0; i <= 23;i++) {
    if ( timeClient.getHours()  == 0 && timeClient.getMinutes()  == hour && timeClient.getSeconds()  < 5) {
      LINE.notify("สภาพอากาศ ณ ปัจจุบัน\nความชื้นในอากาศ = "+ String (h) +" %\nอุณหภูมิภายนอก = " + String (t) +" °C " "\nคุณภาพอากาศ , PM 2.5 ภายนอก = " + String (pm2) +" µg/m³");
    }
    hour = hour+1;
  }
  delay(5000);
  
  }
}

1 วิ หรือ 1 ชม. ครับ มันเร็วไปนะนั้น

แนะนำเอาวิธีการตั้งเวลาไปปรับใช้ครับ

ขอบคุณครับ

เซนเซอร์ PMS7003 อ่านได้รึยังครับ

อ่านได้แล้วครับแก้โดยการสลับบรรทัดของตัวเซนเซอร์วัดอุณหภูมิ
ตอนนี้เจอปัญหาใหม่คือ ค่าที่ส่งมันช้ามากครับลองเป่าแป้งไปที่ PMS7003 แล้วค่าขึ้นช้าและส่งแจ้งเตือนไลน์ช้าเลยลองใช้ตัวฟังชั่น SimpleTimer ครับจอ LCD ไม่ขึ้นค่า PM ไม่ขึ้น ความชื้นกับอุณหภูมิ พอมีคำแนะนำไหมครับ

  #include <LiquidCrystal_I2C.h>
 #include "PMS.h"
 #include <BlynkSimpleEsp32.h>
 #include <TridentTD_LineNotify.h>
 #include <DHT.h>
 #include <Wire.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
 
#include <SimpleTimer.h>
SimpleTimer timer;

///////
 #define DHTPIN 5
 #define DHTTYPE DHT22   
 DHT dht(DHTPIN, DHTTYPE);
 
 PMS pms(Serial);
 PMS::DATA data;

 #define LINE_TOKEN ""
 char auth[] = "";              
 char ssid[] = "";
 char pass[] = ""; 

 void setup()
 {
  Serial.begin(9600);  
  lcd.backlight();
  lcd.begin();
  dht.begin();
  timer.setInterval(1800000, Sensor);
  timer.setInterval(10, LCD);
  Blynk.begin(auth, ssid, pass);
  LINE.setToken(LINE_TOKEN);
 }

 void loop() // ---------- ส่วนแสดงผล Blynk และแจ้งเตือนฝุ่นเกิน Line
  {
   timer.run();
    if (pms.read(data)){
    int pm1 = data.PM_AE_UG_1_0;
    int pm2 = data.PM_AE_UG_2_5;
    int pm10 = data.PM_AE_UG_10_0;
    
    Blynk.virtualWrite(V1,pm1);
    Blynk.virtualWrite(V2,pm2);
    Blynk.virtualWrite(V3,pm10);

    float h = dht.readHumidity();
    float t = dht.readTemperature();
    Blynk.virtualWrite(V5, h);
    Blynk.virtualWrite(V4, t);
    
   if (pm1>=30){
  LINE.notify("PM 1.0: "+String(pm1)+" ug/m3");   // ------------ ส่วนแจ้งเตือนเมื่อฝุ่นเกิน
  }
  if (pm2>=40){
  LINE.notify("PM 2.5: "+String(pm2)+" ug/m3"); 
  }
  if (pm10>=60){
  LINE.notify("PM 10.0: "+String(pm10)+" ug/m3"); // ----------------
  }
  }
}

void Sensor() // -----------------ส่วนส่งค่าไปยัง Line ทุก 30 นาที
{
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 
 int pm1 = data.PM_AE_UG_1_0; 
  int pm2 = data.PM_AE_UG_2_5; 
 int pm10 = data.PM_AE_UG_10_0; 
    
  
  LINE.notify("ค่าความชื้นปัจจุบัน: "+String(h)+" %"); 
  LINE.notify("อุณหภูมิ ณ ตอนนี้: "+String(t)+" C"); 
  
  LINE.notify("ฝุ่น PM 1.0: "+String(pm1)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 2.5: "+String(pm2)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 10.0: "+String(pm10)+" ug/m3"); 
}

void LCD()
{
  if (pms.read(data))
  {
    lcd.setCursor(3,0);
    lcd.print("PMS Monitoring");
    lcd.setCursor(0,1);
    lcd.print("PM 1.0 : ");
    lcd.print(data.PM_AE_UG_1_0);
    lcd.print("   ug/m3");
    lcd.setCursor(0,2);
    lcd.print("PM 2.5 : ");
    lcd.print(data.PM_AE_UG_2_5);
    lcd.print("   ug/m3");
    lcd.setCursor(0,3);
    lcd.print("PM 10  : ");
    lcd.print(data.PM_AE_UG_10_0);
    lcd.print("   ug/m3");
    delay(8000);
    lcd.clear();
   float h = dht.readHumidity();
   float t = dht.readTemperature();  //สลับจอไปหน้าอุณหภูมิ
   lcd.setCursor(0, 1);
   lcd.print("Humidity:     ");
   lcd.setCursor(9, 1);
   lcd.print(h);
   lcd.setCursor(14, 1);
   lcd.print("%");
   lcd.setCursor(0, 2);
   lcd.print("Temperature:     ");
   lcd.setCursor(12, 2);
   lcd.print(t);
   lcd.setCursor(18, 2);
   lcd.print("C");
   delay(8000);
 }
  
} 

ขึ้นเร็วก็แปลกแล้วครับ ตั้งเวลาไว้นานเกิ๊น เอาแค่ 3000 ก็พอ คือทุกๆ 3 วิ

ครับ ส่วนของ Sensor ตัวนั้นผมเอาไว้ใช้กับ Line Notify ให้แจ้งเตือนค่าทุก 30 นาทีครับ

1 Likes

pms.read(data) ใน Void loop ก็ช้าหรอมันอ่านได้เท่าไหร่ จริงๆ ให้มันอ่านใน loop ใน sensor ไม่ต้องสั่งให้อ่านก็ได้นะ ส่งเลย เพราะใน loop อ่านให้อยู่แล้ว

ขอบคุณครับจะลองนำวิธีนี้ไปใช้ดูครับ :pray:

ลองดูแล้วครับเหมือนจะไม่ได้

 #include <LiquidCrystal_I2C.h>
 #include "PMS.h"
 #include <BlynkSimpleEsp32.h>
 #include <TridentTD_LineNotify.h>
 #include <DHT.h>
 #include <Wire.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
 
#include <SimpleTimer.h>
SimpleTimer timer;

///////
 #define DHTPIN 5
 #define DHTTYPE DHT22   
 DHT dht(DHTPIN, DHTTYPE);
 
 PMS pms(Serial);
 PMS::DATA data;

 #define LINE_TOKEN "uEqx2VjJwLiEraN4bLPxUl5ZGthbRXzmtH21xVfcxQd"
 char auth[] = "mGS9MwAHd3B3Sm-YGyJw0fitr_ypi0NW";              
 char ssid[] = "Kasem-wifi";
 char pass[] = "11119999"; 

 void setup()
 {
  Serial.begin(9600);  
  lcd.backlight();
  lcd.begin();
  dht.begin();
  timer.setInterval(1800000, Sensor);
  timer.setInterval(100, LCD);
  Blynk.begin(auth, ssid, pass);
  LINE.setToken(LINE_TOKEN);
 }

 void loop() // ---------- ส่วนแสดงผล Blynk และแจ้งเตือนฝุ่นเกิน Line
  {
   Blynk.run();
   timer.run();
    if (pms.read(data)){
    int pm1 = data.PM_AE_UG_1_0;
    int pm2 = data.PM_AE_UG_2_5;
    int pm10 = data.PM_AE_UG_10_0;
 
    Blynk.virtualWrite(V1,pm1);
    Blynk.virtualWrite(V2,pm2);
    Blynk.virtualWrite(V3,pm10);
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    Blynk.virtualWrite(V5, h);
    Blynk.virtualWrite(V4, t);
    
   if (pm1>=30){
  LINE.notify("PM 1.0: "+String(pm1)+" ug/m3");   // ------------ ส่วนแจ้งเตือนเมื่อฝุ่นเกิน
  }
  if (pm2>=40){
  LINE.notify("PM 2.5: "+String(pm2)+" ug/m3"); 
  }
  if (pm10>=60){
  LINE.notify("PM 10.0: "+String(pm10)+" ug/m3"); // ----------------
  }
  }
}

void Sensor() // -----------------ส่วนส่งค่าไปยัง Line ทุก 30 นาที
{
   float h = dht.readHumidity();
    float t = dht.readTemperature();
  LINE.notify("ค่าความชื้นปัจจุบัน: "+String(h)+" %"); 
  LINE.notify("อุณหภูมิ ณ ตอนนี้: "+String(t)+" C"); 
  
  LINE.notify("ฝุ่น PM 1.0: "+String(pm1)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 2.5: "+String(pm2)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 10.0: "+String(pm10)+" ug/m3"); 
}

void LCD()
{
    lcd.setCursor(3,0);
    lcd.print("PMS Monitoring");
    lcd.setCursor(0,1);
    lcd.print("PM 1.0 : ");
    lcd.print(data.PM_AE_UG_1_0);
    lcd.print("   ug/m3");
    lcd.setCursor(0,2);
    lcd.print("PM 2.5 : ");
    lcd.print(data.PM_AE_UG_2_5);
    lcd.print("   ug/m3");
    lcd.setCursor(0,3);
    lcd.print("PM 10  : ");
    lcd.print(data.PM_AE_UG_10_0);
    lcd.print("   ug/m3");
    delay(8000);
    lcd.clear(); //สลับจอไปหน้าอุณหภูมิ
   float h = dht.readHumidity();
   float t = dht.readTemperature();  
   lcd.setCursor(0, 1);
   lcd.print("Humidity:     ");
   lcd.setCursor(9, 1);
   lcd.print(h);
   lcd.setCursor(14, 1);
   lcd.print("%");
   lcd.setCursor(0, 2);
   lcd.print("Temperature:     ");
   lcd.setCursor(12, 2);
   lcd.print(t);
   lcd.setCursor(17, 2);
   lcd.print("C");
   delay(8000);
  }
}

1 Likes

ปัญหาคือฟังก์ชัน Sensor เรียกใช้ตัวแปร pm1 pm2 และ pm10 แล้วหาไม่เจอ ก็เนื่องจากว่า ตัวแปรเหล่านี้ถูกกำหนดให้ใช้ภายใน ฟังก์ชัน loop เท่านั้น

วิะีแก้ปัญหาคือ ทำให้ตัวแปรเป็นสาธารณะซะ ก็สินเรื่อง คนอื่นจะได้ใช้ได้ด้วย นั้นคือย้ายตัวแปรออกมาประกาศขายนี้แบบนี้

image

#include <LiquidCrystal_I2C.h>
 #include "PMS.h"
 #include <BlynkSimpleEsp32.h>
 #include <TridentTD_LineNotify.h>
 #include <DHT.h>
 #include <Wire.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
 
#include <SimpleTimer.h>
SimpleTimer timer;

///////
 #define DHTPIN 5
 #define DHTTYPE DHT22   
 DHT dht(DHTPIN, DHTTYPE);
 
 PMS pms(Serial);
 PMS::DATA data;

 #define LINE_TOKEN "uEqx2VjJwLiEraN4bLPxUl5ZGthbRXzmtH21xVfcxQd"
 char auth[] = "mGS9MwAHd3B3Sm-YGyJw0fitr_ypi0NW";              
 char ssid[] = "Kasem-wifi";
 char pass[] = "11119999"; 


int pm1 = 0;
int pm2 = 0;
int pm10 = 0;

 void setup()
 {
  Serial.begin(9600);  
  lcd.backlight();
  lcd.begin();
  dht.begin();
  timer.setInterval(1800000, Sensor);
  timer.setInterval(100, LCD);
  Blynk.begin(auth, ssid, pass);
  LINE.setToken(LINE_TOKEN);
 }

 void loop() // ---------- ส่วนแสดงผล Blynk และแจ้งเตือนฝุ่นเกิน Line
  {
   Blynk.run();
   timer.run();
    if (pms.read(data)){
    pm1 = data.PM_AE_UG_1_0;
    pm2 = data.PM_AE_UG_2_5;
    pm10 = data.PM_AE_UG_10_0;
 
    Blynk.virtualWrite(V1,pm1);
    Blynk.virtualWrite(V2,pm2);
    Blynk.virtualWrite(V3,pm10);
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    Blynk.virtualWrite(V5, h);
    Blynk.virtualWrite(V4, t);
    
   if (pm1>=30){
  LINE.notify("PM 1.0: "+String(pm1)+" ug/m3");   // ------------ ส่วนแจ้งเตือนเมื่อฝุ่นเกิน
  }
  if (pm2>=40){
  LINE.notify("PM 2.5: "+String(pm2)+" ug/m3"); 
  }
  if (pm10>=60){
  LINE.notify("PM 10.0: "+String(pm10)+" ug/m3"); // ----------------
  }
  }
}

void Sensor() // -----------------ส่วนส่งค่าไปยัง Line ทุก 30 นาที
{
   float h = dht.readHumidity();
    float t = dht.readTemperature();
  LINE.notify("ค่าความชื้นปัจจุบัน: "+String(h)+" %"); 
  LINE.notify("อุณหภูมิ ณ ตอนนี้: "+String(t)+" C"); 
  
  LINE.notify("ฝุ่น PM 1.0: "+String(pm1)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 2.5: "+String(pm2)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 10.0: "+String(pm10)+" ug/m3"); 
}

void LCD()
{
    lcd.setCursor(3,0);
    lcd.print("PMS Monitoring");
    lcd.setCursor(0,1);
    lcd.print("PM 1.0 : ");
    lcd.print(data.PM_AE_UG_1_0);
    lcd.print("   ug/m3");
    lcd.setCursor(0,2);
    lcd.print("PM 2.5 : ");
    lcd.print(data.PM_AE_UG_2_5);
    lcd.print("   ug/m3");
    lcd.setCursor(0,3);
    lcd.print("PM 10  : ");
    lcd.print(data.PM_AE_UG_10_0);
    lcd.print("   ug/m3");
    delay(8000);
    lcd.clear(); //สลับจอไปหน้าอุณหภูมิ
   float h = dht.readHumidity();
   float t = dht.readTemperature();  
   lcd.setCursor(0, 1);
   lcd.print("Humidity:     ");
   lcd.setCursor(9, 1);
   lcd.print(h);
   lcd.setCursor(14, 1);
   lcd.print("%");
   lcd.setCursor(0, 2);
   lcd.print("Temperature:     ");
   lcd.setCursor(12, 2);
   lcd.print(t);
   lcd.setCursor(17, 2);
   lcd.print("C");
   delay(8000);
  }
}

 #include <LiquidCrystal_I2C.h>
 #include "PMS.h"
 #include <BlynkSimpleEsp32.h>
 #include <TridentTD_LineNotify.h>
 #include <DHT.h>
 #include <Wire.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
 
#include <SimpleTimer.h>
SimpleTimer timer;

///////
 #define DHTPIN 5
 #define DHTTYPE DHT22   
 DHT dht(DHTPIN, DHTTYPE);
 
 PMS pms(Serial);
 PMS::DATA data;

 #define LINE_TOKEN "uEqx2VjJwLiEraN4bLPxUl5ZGthbRXzmtH21xVfcxQd"
 char auth[] = "mGS9MwAHd3B3Sm-YGyJw0fitr_ypi0NW";              
 char ssid[] = "Kasem-wifi";
 char pass[] = "11119999"; 
 
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  int pm1 = data.PM_AE_UG_1_0;
  int pm2 = data.PM_AE_UG_2_5;
  int pm10 = data.PM_AE_UG_10_0;
  
 void setup()
 {
  Serial.begin(9600);  
  lcd.backlight();
  lcd.begin();
  dht.begin();
  timer.setInterval(1800000, Sensor);
  timer.setInterval(100, LCD);
  Blynk.begin(auth, ssid, pass);
  LINE.setToken(LINE_TOKEN);
 }
 void loop() // ---------- ส่วนแสดงผล Blynk และแจ้งเตือนฝุ่นเกิน Line
  {
   Blynk.run();
   timer.run();
    {
    Blynk.virtualWrite(V1,pm1);
    Blynk.virtualWrite(V2,pm2);
    Blynk.virtualWrite(V3,pm10);
    Blynk.virtualWrite(V5, h);
    Blynk.virtualWrite(V4, t);
    
   if (pm1>=30){
  LINE.notify("PM 1.0: "+String(pm1)+" ug/m3");   // ------------ ส่วนแจ้งเตือนเมื่อฝุ่นเกิน
  }
  if (pm2>=40){
  LINE.notify("PM 2.5: "+String(pm2)+" ug/m3"); 
  }
  if (pm10>=60){
  LINE.notify("PM 10.0: "+String(pm10)+" ug/m3"); // ----------------
  }
  }
}

void Sensor() // -----------------ส่วนส่งค่าไปยัง Line ทุก 30 นาที
{
  LINE.notify("ค่าความชื้นปัจจุบัน: "+String(h)+" %"); 
  LINE.notify("อุณหภูมิ ณ ตอนนี้: "+String(t)+" C"); 
  
  LINE.notify("ฝุ่น PM 1.0: "+String(pm1)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 2.5: "+String(pm2)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 10.0: "+String(pm10)+" ug/m3"); 
}

void LCD()
{
    lcd.setCursor(3,0);
    lcd.print("PMS Monitoring");
    lcd.setCursor(0,1);
    lcd.print("PM 1.0 : ");
    lcd.print(data.PM_AE_UG_1_0);
    lcd.print("   ug/m3");
    lcd.setCursor(0,2);
    lcd.print("PM 2.5 : ");
    lcd.print(data.PM_AE_UG_2_5);
    lcd.print("   ug/m3");
    lcd.setCursor(0,3);
    lcd.print("PM 10  : ");
    lcd.print(data.PM_AE_UG_10_0);
    lcd.print("   ug/m3");
    delay(8000);
    lcd.clear(); //สลับจอไปหน้าอุณหภูมิ
   lcd.setCursor(0, 1);
   lcd.print("Humidity:     ");
   lcd.setCursor(9, 1);
   lcd.print(h);
   lcd.setCursor(14, 1);
   lcd.print("%");
   lcd.setCursor(0, 2);
   lcd.print("Temperature:     ");
   lcd.setCursor(12, 2);
   lcd.print(t);
   lcd.setCursor(17, 2);
   lcd.print("C");
   delay(8000);
}

ค่าไม่ขึ้นเลยครับ

โค้ตผิดครับ โค้ต อ่านค่าไม่มีเลย ดูจากโค้ตที่ผมวางไว้ให้ดูครับ

#include <LiquidCrystal_I2C.h>
 #include "PMS.h"
 #include <BlynkSimpleEsp32.h>
 #include <TridentTD_LineNotify.h>
 #include <DHT.h>
 #include <Wire.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
 
#include <SimpleTimer.h>
SimpleTimer timer;

///////
 #define DHTPIN 5
 #define DHTTYPE DHT22   
 DHT dht(DHTPIN, DHTTYPE);
 
 PMS pms(Serial);
 PMS::DATA data;

 #define LINE_TOKEN "uEqx2VjJwLiEraN4bLPxUl5ZGthbRXzmtH21xVfcxQd"
 char auth[] = "mGS9MwAHd3B3Sm-YGyJw0fitr_ypi0NW";              
 char ssid[] = "Kasem-wifi";
 char pass[] = "11119999"; 

int pm1 = data.PM_AE_UG_1_0;
int pm2 = data.PM_AE_UG_2_5;
int pm10 = data.PM_AE_UG_10_0;
float h = dht.readHumidity();
float t = dht.readTemperature();

 void setup()
 {
  Serial.begin(9600);  
  lcd.backlight();
  lcd.begin();
  dht.begin();
  timer.setInterval(1800000, Sensor);
  timer.setInterval(100, LCD);
  Blynk.begin(auth, ssid, pass);
  LINE.setToken(LINE_TOKEN);
 }

 void loop() // ---------- ส่วนแสดงผล Blynk และแจ้งเตือนฝุ่นเกิน Line
  {
   Blynk.run();
   timer.run();
    if (pms.read(data)){
    Blynk.virtualWrite(V1,pm1);
    Blynk.virtualWrite(V2,pm2);
    Blynk.virtualWrite(V3,pm10);
    Blynk.virtualWrite(V5, h);
    Blynk.virtualWrite(V4, t);
    
   if (pm1>=30){
  LINE.notify("PM 1.0: "+String(pm1)+" ug/m3");   // ------------ ส่วนแจ้งเตือนเมื่อฝุ่นเกิน
  }
  if (pm2>=40){
  LINE.notify("PM 2.5: "+String(pm2)+" ug/m3"); 
  }
  if (pm10>=60){
  LINE.notify("PM 10.0: "+String(pm10)+" ug/m3"); // ----------------
  }
  }
}

void Sensor() // -----------------ส่วนส่งค่าไปยัง Line ทุก 30 นาที
{
  LINE.notify("ค่าความชื้นปัจจุบัน: "+String(h)+" %"); 
  LINE.notify("อุณหภูมิ ณ ตอนนี้: "+String(t)+" C"); 
  
  LINE.notify("ฝุ่น PM 1.0: "+String(pm1)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 2.5: "+String(pm2)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 10.0: "+String(pm10)+" ug/m3"); 
}

void LCD()
{
    lcd.setCursor(3,0);
    lcd.print("PMS Monitoring");
    lcd.setCursor(0,1);
    lcd.print("PM 1.0 : ");
    lcd.print(data.PM_AE_UG_1_0);
    lcd.print("   ug/m3");
    lcd.setCursor(0,2);
    lcd.print("PM 2.5 : ");
    lcd.print(data.PM_AE_UG_2_5);
    lcd.print("   ug/m3");
    lcd.setCursor(0,3);
    lcd.print("PM 10  : ");
    lcd.print(data.PM_AE_UG_10_0);
    lcd.print("   ug/m3");
    delay(8000);
    lcd.clear(); //สลับจอไปหน้าอุณหภูมิ  
   lcd.setCursor(0, 1);
   lcd.print("Humidity:     ");
   lcd.setCursor(9, 1);
   lcd.print(h);
   lcd.setCursor(14, 1);
   lcd.print("%");
   lcd.setCursor(0, 2);
   lcd.print("Temperature:     ");
   lcd.setCursor(12, 2);
   lcd.print(t);
   lcd.setCursor(17, 2);
   lcd.print("C");
   delay(8000);
  }

ค่ายังไม่ขึ้นเหมือนเดิมเลยครับรบกวนพอชี้จุดให้ดูหน่อยได้ไหมครับว่าผิดตรงไหนขอบคุณมากครับ

เราเอาชุดที่อ่านค่าไปไว้ข้างนอก ซึ่งมันจะไม่ทำงาน

image

ที่ผมบอกไปนั้นแค่ให้ประกาศตัวแปรทั่วไป ครับ อันนี้เราประกาศชื่อแล้วเอาโค้ตชุดที่อ่านไปอ่านข้างนอก

ตอนนี้แสดงผลหมดแล้วครับแต่ติดปัญหาอย่างเดียวเหมือนค่าที่ส่งไปที่แอพ Blynk ต้องรอให้จอแสดงผล LCD แสดงผลเสร็จก่อนค่าในแอพถึงเปลี่ยนแปลงครับและการแจ้งเตือนฝุ่น Line Notify เกินก็ส่งค่าช้าครับ Delay ไปหลายนาทีเลยครับพอมีวิธีแก้ไหมครับ ขอบคุณมากๆครับ

 #include <LiquidCrystal_I2C.h>
 #include "PMS.h"
 #include <BlynkSimpleEsp32.h>
 #include <TridentTD_LineNotify.h>
 #include <DHT.h>
 #include <Wire.h>
 LiquidCrystal_I2C lcd(0x27, 20, 4);
 
#include <SimpleTimer.h>
SimpleTimer timer;

///////
 #define DHTPIN 5
 #define DHTTYPE DHT22   
 DHT dht(DHTPIN, DHTTYPE);
 
 PMS pms(Serial);
 PMS::DATA data;

 #define LINE_TOKEN "uEqx2VjJwLiEraN4bLPxUl5ZGthbRXzmtH21xVfcxQd"
 char auth[] = "mGS9MwAHd3B3Sm-YGyJw0fitr_ypi0NW";              
 char ssid[] = "Kasem-wifi";
 char pass[] = "11119999"; 




 void setup()
 {
  Serial.begin(9600);  
  lcd.backlight();
  lcd.begin();
  dht.begin();
  timer.setInterval(1800000, Sensor);
  Blynk.begin(auth, ssid, pass);
  LINE.setToken(LINE_TOKEN);
 }

 void loop() // ---------- ส่วนแสดงผล Blynk และแจ้งเตือนฝุ่นเกิน Line
  {
   Blynk.run();
   timer.run();
    if (pms.read(data)){
    int pm1 = data.PM_AE_UG_1_0;
    int pm2 = data.PM_AE_UG_2_5;
    int pm10 = data.PM_AE_UG_10_0;
    
    Blynk.virtualWrite(V1,pm1);
    Blynk.virtualWrite(V2,pm2);
    Blynk.virtualWrite(V3,pm10);

    float h = dht.readHumidity();
    float t = dht.readTemperature();
    Blynk.virtualWrite(V5, h);
    Blynk.virtualWrite(V4, t);
    
   if (pm1>=30){
  LINE.notify("PM 1.0: "+String(pm1)+" ug/m3");   // ------------ ส่วนแจ้งเตือนเมื่อฝุ่นเกิน
  }
  if (pm2>=40){
  LINE.notify("PM 2.5: "+String(pm2)+" ug/m3"); 
  }
  if (pm10>=60){
  LINE.notify("PM 10.0: "+String(pm10)+" ug/m3"); // ----------------
  }
  
   { 
    lcd.setCursor(3,0);    // จอแสดงผล LCD
    lcd.print("PMS Monitoring");
    lcd.setCursor(0,1);
    lcd.print("PM 1.0 : ");
    lcd.print(data.PM_AE_UG_1_0);
    lcd.print("   ug/m3");
    lcd.setCursor(0,2);
    lcd.print("PM 2.5 : ");
    lcd.print(data.PM_AE_UG_2_5);
    lcd.print("   ug/m3");
    lcd.setCursor(0,3);
    lcd.print("PM 10  : ");
    lcd.print(data.PM_AE_UG_10_0);
    lcd.print("   ug/m3");
    delay(8000);
    lcd.clear();
   ///////////////////////
   lcd.setCursor(0, 1);
   lcd.print("Humidity:     ");
   lcd.setCursor(9, 1);
   lcd.print(h);
   lcd.setCursor(14, 1);
   lcd.print("%");
   lcd.setCursor(0, 2);
   lcd.print("Temperature:     ");
   lcd.setCursor(12, 2);
   lcd.print(t);
   lcd.setCursor(18, 2);
   lcd.print("C");
   delay(8000);
   }
  
  }
}

void Sensor() // -----------------ส่วนส่งค่าไปยัง Line ทุก 30 นาที
{
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 
 int pm1 = data.PM_AE_UG_1_0; 
  int pm2 = data.PM_AE_UG_2_5; 
 int pm10 = data.PM_AE_UG_10_0; 
    
  
  LINE.notify("ค่าความชื้นปัจจุบัน: "+String(h)+" %"); 
  LINE.notify("อุณหภูมิ ณ ตอนนี้: "+String(t)+" C"); 
  
  LINE.notify("ฝุ่น PM 1.0: "+String(pm1)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 2.5: "+String(pm2)+" ug/m3"); 
  LINE.notify("ฝุ่น PM 10.0: "+String(pm10)+" ug/m3"); 
}

ก็ควรตั้งเวลาอัพเดท ค่า ทุก 3 วิ อะไรก็ว่าไป blynk ก็ไม่ต้องมีโค้ตจอมาคั่น มันจะเรียลมาขึ้นครับ