ผมทำ dht22 กับ pm 2.5 sensor

กดออกมาดูครับ

ภาพ

มันขึ้นแบบนี้ครับ

ถ้าแยกโค้ดใช้ได้ปกติ ผมย้าย digitalpin ไม่ให้ซ้ำกันแล้ว

เลือก baudrate ให้ตรงกับโค้ตตัวเองใช้ด้วยครับ

นี่ครับ

ปัญหาคือ มีการทำงานใน void loop นานเกินไปทำให้ บอร์ดดึง wifi ไม่ได้ เลยรีเซต น่าจะช้า เนื่องจาก มีคำสั่ง lcd อยู่ด้วย

วิธีแก้ปัญหา ให้ศึกษาการตั้งเวลาการทำงานออกเป็นส่วนๆ. มันจะไม่กวนกัน

ถ้าอยากรู้ว่ามันแก้ปัญหายังไง ดูจากคนที่เขาเคยแก้แล้วด้านล่างนี้

wifi ใช้ได้ครับ dht22 ใช้ได้ จะใช้ไม่ได้แต่ pm2.5 sensor วิธีเหมือนกันกับที่บอกข้างต้นใช้ไหมครับ

ต้องดูว่ามันขึ้นวนๆ แบบเดิมหรือไม่ ถ้าขึ้นก็ต้องแก้ไขตามที่บอก ถ้าไม่ขึ้น ก็ต้องเอาข้อมูลหลังจากภาพที่ รีเซตมาดู ว่ามันขึ้นอะไรบ้าง

เอาภาพนี้มา ผมตีเป็นรีเซตได้อย่างเดียว

มันได้ค่าอะไรเอามาดูด้วย

ผมเข้าใจละ เหมือนว่า sensor pm2.5 จะทำงาน แต่ทำงานช้า เพราะผมรวมฟังชั่นมันเข้ากับ dht22 แล้วผมสามารถ แยกสองตัวนี้ เป็นฟังชั่นต่างกันได้ยังไง แล้วตอนสุดท้าย ผมอยากให้ มันมาแสดงในจอ oled (ssd1306)


void send_blynk(float Density,float t1,float h1){
 
 
   if(Density > 0.0 && Density < 26.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศดีมาก"); 
    Blynk.setProperty(input_sensor,"color","#50c9f4");  }
   if(Density > 25 && Density < 51.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศดี"); 
    Blynk.setProperty(input_sensor,"color","#78c150"); } 
   if(Density > 50 && Density < 101.0){ ton=0;
   Blynk.setProperty(input_sensor,"label","AQI อากาศปานกลาง"); 
    Blynk.setProperty(input_sensor,"color","#fff46b");   }
   if(Density > 100 && Density < 201.0){ ton=1;
   Blynk.setProperty(input_sensor,"label","AQI อากาศเริ่มมีผลกระทบต่อสุขภาพ"); 
   Blynk.setProperty(input_sensor,"color","#f89836"); 
    }
   if(Density > 200){ ton=2;
   Blynk.setProperty(input_sensor,"label","AQI อากาศมีผลกระทบต่อสุขภาพ"); 
   Blynk.setProperty(input_sensor,"color","#ec363a"); 
   }
   
  //clear display
  display.clearDisplay();

Blynk.virtualWrite(input_sensor,Density);
     display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0,10);
    display.println(Density);
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(85,0);
    display.println("ug/m3");


  // display temperature
  display.setTextSize(1);
  display.setCursor(0,20);
  display.print("Temperature: ");
  display.setTextSize(1);
  display.setCursor(0,30);
  display.print(t1);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(248);
  display.setTextSize(1);
  display.print("C");
  
  // display humidity
  display.setTextSize(1);
  display.setCursor(0, 40);
  display.print("Humidity: ");
  display.setTextSize(1);
  display.setCursor(0, 50);
  display.print(h1);
  display.print(" %"); 
  
  display.display(); 
}



ให้รันแบบส่วนท้ายโค้ดแบบ ข้างบนตัวอย่างได้ปกติ

สรุป แยกการทำงานขอบฟังชั่น dht22 and pm sensor2.5 แล้วน้ำมาแสดงบนจอได้ปกติ ทั้ง 3 ค่า ส่วนแสดงบนแอพ คงไม่ยากอะไร

งั้นก็ตามนี้ครับ

ผมแก้ไขละ ด้านบนๆครับ 555

ถ้าได้แล้วสรุปหน่อยครับว่าแก้ไขได้อย่างไร

จากการแก้ไขเพิ่มเติม ผมได้เปลี่ยนจาก delay มาใช้เป็น millis

void loop() 
{
  static unsigned long Time1 = millis();
  if((millis()-Time1)>4700){
    Time1 = millis();
  climateRoutine();                           // Climate routine
  }
  Blynk.run();
  pm_loop();
}

ทำให้ใช้งานได้ ปกติ แต่เราจะมาติดตรงที่ จอ led ตอนที่เจอคือ เกิดการ input ค่าของ pm2.5 ทับกัน ก็แก้ได้ละ โดยสลับที่กันฟังชั่น โดยให้ฟังชั่นที่มีการใช้งานจำนวนที่กว่า(จำนวนรอบต่อครั้ง) มาไว้เป็นหลัก โดยฟังชั่น ของ pm2.5 มีช่วงเวลาแสดงบนจอ led ที่ 230millisec ถ้าจำไม่ผิด แต่จะติดปัญหาตครงที่ว่า จะมีการหน่วงของฟังชั่นในส่วนโค้ดตัวนนี้

Blynk.virtualWrite(input_sensor,Density);

แต่ไม่รู้จะแก้ยังไง

1 Like

เยี่ยมมากครับ การแก้ไขปัญหามีด้วยกันหลายวิธี วิธีที่กล่าวมาก็เป็นอีกวิธีหนึ่ง ขอบคุณที่แชร์แนวทาง เราได้แนวทางเพิ่มมาอีกหนึ่งวิธีแล้ว

แล้วสรุปว่ามันรันและใช้งานได้หรือไม่?

รันและใช้งานได้ครับ แต่มีแค่ปัญหาการแสดงผลเฉยๆ เดี๋ยวผมหาทางแก่ก่อน ไม่ได้ยังไงผมจะถามปรึกษาในนี้เอาครับ55

ขยายความหน่อย ว่ามันเป็นอย่างไร มีภาพไหม ถ้ามันตรงกับคำตอบที่ผมมีจะได้เอามาแป๊ะให้

คล้ายๆอาการแลคอะครับ

อักษรมันเพื้อนรึป่าว หรือแค่แสดงผลช้า

แค่แสดงช้าครับ แสดงไม่ตรงเวลาที่กำหนด คล้ายๆว่า 5 วิ ปกติแสดงผลต่อรอบ 15 ครั้ง เวลาเฉลี่ยเท่าๆกัน แต่นี่แสดง 15 ครั้ง 1-3 วิ แสดง 5 ครั้ง แล้ว 4-5 วิให้หลัง แสดง 10 ครั้ง ครบ 15 ครั้ง แบบนี้ครับ