ผมทำเครื่องวัดสภาพอากาศแล้วเกิดปัญหาครับ คือ Sensor บางตัวไม่ส่งข้อมูลไปที่ Blynk
อุปกรณ์ที่ใช้
- ESP8266 + shield
- DHT22
- Dust sensor ของ Sharp
รายละเอียดอุปกรณ์ตามรูป
โดย ปัญหาคือ ตัว Dust sensor ไม่ส่งข้อมูลไปออก Blynk เเต่ในหน้า moniter ของ arduinno IDE
ยังอ่านค่าปกติ
***จุดสังเกตุ คือ เหมือนพอ ตัววัดฝุ่นทำงาน(แบบว่าค่าฝุ่นมากกว่า 0)
เหมือน 8266 จะหยุด ส่งข้อมูลไปหา Blynk เหมือนค้างและหลุดไปเลย
เเต่ในหน้า moniter ของ arduinno IDE ยังอ่านค่าปกติ (ยังรันไปเรื่อยๆ ไม่ค้าง)
แต่พอค่าฝุ่น เหลือ 0 ก็หายค้างครับ
โดยที่ อย่างอื่นปกติ วัดค่าอุณหภูมิ ก็ปกติ เเต่พอ ตัววัดฝุ่นทำงาน ก็ค้างหมด
ผมไม่รู้ว่าผิดตรงไหนพลาดที่ใด รบกวนด้วยครับ ขอขอบคุณครับ
โค้ดครับ
#include "DHT.h"
#define DHTPIN D3 // what digital pin we're connected to
#define DHTTYPE DHT22 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxx";
int measurePin = A0;
int ledPower = D5;
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
float t; // Declare the variables
float h;
void setup(){
Serial.begin(9600);
pinMode(ledPower,OUTPUT);
Serial.begin(9600);
Serial.println("DHTxx test!");
Serial.begin(9600);
Blynk.begin(auth, "xxxxxxxxx", "xxxxxxxxxxxx","blynk.honey.co.th",8080);
timer.setInterval(2000, sendUptime);
dht.begin();
}
void sendUptime()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
float d = dustDensity ;
Blynk.virtualWrite(V1, t);
Blynk.virtualWrite(V2, h);
Blynk.virtualWrite(V3, dustDensity);
}
void loop(){
digitalWrite(ledPower,LOW); // power on the LED
delayMicroseconds(samplingTime);
voMeasured = analogRead(measurePin); // read the dust value
delayMicroseconds(deltaTime);
digitalWrite(ledPower,HIGH); // turn the LED off
delayMicroseconds(sleepTime);
// 0 - 3.3V mapped to 0 - 1023 integer values
// recover voltage
calcVoltage = voMeasured * (3.3 / 1024);
dustDensity = 0.17 * calcVoltage - 0.1;
if (dustDensity <= 0.00) {
dustDensity = 0.00;
Blynk.run();
timer.run();
}
dustDensity = dustDensity * 1000;
Serial.print(" - Dust Density: ");
Serial.print(dustDensity);
Serial.println(" µg/m³");
delay(3000);
float d = dustDensity ;
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
// เช็คถ้าอ่านค่าไม่สำเร็จให้เริ่มอ่านใหม่
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t\n");
}
Remy_Martin
(Permpol Thanapunnamas)
2
อธิบายโค้ตชุดนี้ให้ฟังหน่อยครับว่า ให้มันทำงานอะไร อย่างไร
หาก ค่าฝุ่นน้อยกว่าหรือเท่ากับ 0
ให้ เท่ากับ 0
เนื่องจากค่าปกติ ติดลบครับ แกว่งไปมา เช่น -0.01…-0.03
เหมือนทำให้ค่า ต่ำสุดคือ 0 อ่ะครับ
นี่คือ moniter ของ IDE ครับ ส่งค่าได้ปกติ 200กว่า (- Dust Density) พอไม่มีฝุ่น เท่ากับ 0
เเต่ใน Blynk ค่าไม่ขึ้นตามครับ 0 ตลอด
Remy_Martin
(Permpol Thanapunnamas)
4
ขอดูการเซตอัพในนี้หน่อยครับ

แล้วค่านี้จะให้มันแสดงออกมาเป็นเลยอย่างนี้เลยหรอ?
นี่ครับ
ส่วน
ผมเอา Code มาจากร้านค้าครับ ผมไม่รู้ค่าแปลงจาก0-1023 เป็นค่าฝุ่นเทียบกันยังไง
ก็เลยยึดตามเค้า เพราะเห็นค่าที่ออกมาก็สมเหตุสมผลดีครับ 555
ผมอยากรู้ว่าทำไมมันไม่แสดง อุปกรณ์ก้อไม่น่าจะเสีย เพราะยังอ่านค่า ได้อยู่ เเต่ไปไม่ถึง Blynk
รบกวนด้วยครับ
Remy_Martin
(Permpol Thanapunnamas)
6
สงสัยอยู่ว่าทำไมต้องให้รอ dustDensity <= 0.00
ก่อนค่อยให้มันส่งค่าทุกๆ 2 วิ มาอัพเอพที่ Blynk ละครับ

โค้ตชุดนี้มันแค่อัพเดทค่าขึ้น app เฉยๆ ไม่จำเป็นต้องมี sendUptime() ก็ได้นะผมว่า
ชุดนี้เอาไปรวมกันใน void loop() ก็ได้
void sendUptime()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
float d = dustDensity ;
Blynk.virtualWrite(V1, t);
Blynk.virtualWrite(V2, h);
Blynk.virtualWrite(V3, dustDensity);
}
แบบนี้
#include "DHT.h"
#define DHTPIN D3 // what digital pin we're connected to
#define DHTTYPE DHT22 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxx";
int measurePin = A0;
int ledPower = D5;
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
float d = dustDensity;
float t; // Declare the variables
float h;
void setup()
{
Serial.begin(9600);
pinMode(ledPower, OUTPUT);
Serial.println("DHTxx test!");
Blynk.begin(auth, "xxxxxxxxx", "xxxxxxxxxxxx", "blynk.honey.co.th", 8080);
dht.begin();
}
void loop()
{
Blynk.run();
timer.run();
digitalWrite(ledPower, LOW); // power on the LED
delayMicroseconds(samplingTime);
voMeasured = analogRead(measurePin); // read the dust value
delayMicroseconds(deltaTime);
digitalWrite(ledPower, HIGH); // turn the LED off
delayMicroseconds(sleepTime);
// 0 - 3.3V mapped to 0 - 1023 integer values
// recover voltage
calcVoltage = voMeasured * (3.3 / 1024);
dustDensity = 0.17 * calcVoltage - 0.1;
dustDensity = dustDensity * 1000;
Serial.print(" - Dust Density: ");
Serial.print(dustDensity);
Serial.println(" µg/m³");
delay(1000);
Blynk.virtualWrite(V3, dustDensity);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
// เช็คถ้าอ่านค่าไม่สำเร็จให้เริ่มอ่านใหม่
if (isnan(h) || isnan(t) || isnan(f))
{
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *F\t\n");
Blynk.virtualWrite(V1, t);
Blynk.virtualWrite(V2, h);
}
Remy_Martin
(Permpol Thanapunnamas)
8
แก้ไขอะไรไปถึงได้ครับ สรุปหน่อย
ผมก็ได้ copy หน้าโค้ด ตามที่ให้ไปใช้ครับ ก็หายเลยครับ
เเต่หลังจากที่ เอาCode ส่วนนี้ออกไป

ค่าที่ได้ก็เลยมีลงไปถึงติดลบ เเต่ก็แก้โดนการ ไปตั้งค่า min ที่กราฟใน Blynk เอาครับ ให้ค่าต่ำสุดเป็น 0
อย่างอื่นก็ไม่มีปัญหานะครับ Code ผ่านหมด ไม่Error
1 Likes