สวัสดีครับตอนนี้ผมทำเครื่องวัดคุณภาพอากาศและอุณหภูมิความชื้น
แสดงผลผ่าน 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);
}
}
Remy_Martin
(Permpol Thanapunnamas)
2
1 วิ หรือ 1 ชม. ครับ มันเร็วไปนะนั้น
Remy_Martin
(Permpol Thanapunnamas)
3
แนะนำเอาวิธีการตั้งเวลาไปปรับใช้ครับ
Remy_Martin
(Permpol Thanapunnamas)
6
เซนเซอร์ 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);
}
}
Remy_Martin
(Permpol Thanapunnamas)
8
ขึ้นเร็วก็แปลกแล้วครับ ตั้งเวลาไว้นานเกิ๊น เอาแค่ 3000 ก็พอ คือทุกๆ 3 วิ
ครับ ส่วนของ Sensor ตัวนั้นผมเอาไว้ใช้กับ Line Notify ให้แจ้งเตือนค่าทุก 30 นาทีครับ
1 Likes
Remy_Martin
(Permpol Thanapunnamas)
10
pms.read(data) ใน Void loop ก็ช้าหรอมันอ่านได้เท่าไหร่ จริงๆ ให้มันอ่านใน loop ใน sensor ไม่ต้องสั่งให้อ่านก็ได้นะ ส่งเลย เพราะใน loop อ่านให้อยู่แล้ว
ขอบคุณครับจะลองนำวิธีนี้ไปใช้ดูครับ
ลองดูแล้วครับเหมือนจะไม่ได้
#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
Remy_Martin
(Permpol Thanapunnamas)
13
ปัญหาคือฟังก์ชัน Sensor เรียกใช้ตัวแปร pm1 pm2 และ pm10 แล้วหาไม่เจอ ก็เนื่องจากว่า ตัวแปรเหล่านี้ถูกกำหนดให้ใช้ภายใน ฟังก์ชัน loop เท่านั้น
วิะีแก้ปัญหาคือ ทำให้ตัวแปรเป็นสาธารณะซะ ก็สินเรื่อง คนอื่นจะได้ใช้ได้ด้วย นั้นคือย้ายตัวแปรออกมาประกาศขายนี้แบบนี้
#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);
}
ค่าไม่ขึ้นเลยครับ
Remy_Martin
(Permpol Thanapunnamas)
15
โค้ตผิดครับ โค้ต อ่านค่าไม่มีเลย ดูจากโค้ตที่ผมวางไว้ให้ดูครับ
#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);
}
ค่ายังไม่ขึ้นเหมือนเดิมเลยครับรบกวนพอชี้จุดให้ดูหน่อยได้ไหมครับว่าผิดตรงไหนขอบคุณมากครับ
Remy_Martin
(Permpol Thanapunnamas)
17
เราเอาชุดที่อ่านค่าไปไว้ข้างนอก ซึ่งมันจะไม่ทำงาน
ที่ผมบอกไปนั้นแค่ให้ประกาศตัวแปรทั่วไป ครับ อันนี้เราประกาศชื่อแล้วเอาโค้ตชุดที่อ่านไปอ่านข้างนอก
ตอนนี้แสดงผลหมดแล้วครับแต่ติดปัญหาอย่างเดียวเหมือนค่าที่ส่งไปที่แอพ 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");
}
Remy_Martin
(Permpol Thanapunnamas)
19
ก็ควรตั้งเวลาอัพเดท ค่า ทุก 3 วิ อะไรก็ว่าไป blynk ก็ไม่ต้องมีโค้ตจอมาคั่น มันจะเรียลมาขึ้นครับ