ขอคำแนะนำเกี่ยวกับการควบคุม อุณหภูมิ และคุมความชื่้น หน่อยครับ Error

สาเหตุครับ

ภาพ

ภาพ

Nonggun (กัญจน์ 2) September 10, 2020, 3:50am #23

อ่อคับคือมันผิดตำแหน่ง มันเลยมีปัณหา

PUYIOT September 10, 2020, 3:52am #24

มันมี code อยู่แล้วครับ มันควรจะทำงานเลย ลอง ทดสอบค่า Humid ดูครับ

ภาพ

PUYIOT September 10, 2020, 3:54am #25

ผมให้เป็นตัวแปรกลาง เพื่อให้ ทุกฟังก์ชั่นที่ใช้ สามารถใช้ตัวแปรนี้ได้ครับ

Nonggun (กัญจน์ 2) September 10, 2020, 3:54am #26

ผมขอถามเกี่ยวกับโคดชุดนี้เพิ่มเติมคับ

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#include <SimpleTimer.h>
#define DHTPIN D1 // กำหนดขาให้กับอุปกรณ์ตรวจสอบความชื้น DHT11
#define DHTTYPE DHT22
//////////////////////////////////////////จุดที่เพิ่ม

int setTemp;
int setHumid;

BLYNK_WRITE(V4) //temperature slider in app on pin V22
{
setTemp = param.asInt();
}
BLYNK_WRITE(V3) //temperature slider in app on pin V23
{
setHumid = param.asInt();
}

//////////////////////////////////////////

DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;

//* **BLYNK TOKEN** //
char auth[] = "XXXXXXXXXXXXXXXX";
char ssid[] = "Ammara_2.4GHz";
char pass[] = "0866922890";

void setup()
{
Serial.begin(115200);




pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
pinMode(D3, OUTPUT); // ***ควบคุมอุณหภูมิ*** ///
digitalWrite(D3, HIGH);

dht.begin();
timer.setInterval(1000L, sendSensor);

}

BLYNK_CONNECTED() {
Blynk.syncAll();
}

void sendSensor()
{
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
   Blynk.virtualWrite(V1, t); //หรือผมต้องมากำหนด เงื่อนไข >=, <= , == ตรงนีครับ
 Blynk.virtualWrite(V2, h);

  Serial.println("Humidity: ");
  Serial.print(h + String("%"));
  Serial.println("Temperature: ");
  Serial.print(t + String("c"));

}


void loop()
{
//if(Blynk.connected()) {
Blynk.run();
timer.run();

}

Nonggun (กัญจน์ 2) September 10, 2020, 3:56am #27

โคดชุดนี้มันปรับ อุณหภูมิ และ ความชื้น ผ่าน Blynk slider ใช่ไหมครับ

PUYIOT September 10, 2020, 4:00am #28

ใช่ครับ เค้าใช้ Slide bar V4 ของ Temp และ V3 ของ Humid โดยรับค่าผ่านตัวแปรชื่อ setTemp และ setHumid โดยเป็นค่าจำนวนเต็ม ไม่มีจุดทศนิยมครับ

Nonggun (กัญจน์ 2) September 10, 2020, 4:02am #29

v4และv3 ตรงกับในแอปเลยใช่ไหมครับ
โคดด้านล่างนี้มันคืออะไรคับผมต้องแก้ไหมคับ

   Blynk.virtualWrite(V1, t); //หรือผมต้องมากำหนด เงื่อนไข >=, <= , == ตรงนีครับ
 Blynk.virtualWrite(V2, h);

PUYIOT September 10, 2020, 4:10am #30

v4และv3 ตรงกับในแอปเลยใช่ไหมครับ
ตอบ ใช่ครับ
ส่วน
Blynk.virtualWrite(V1, t);
Blynk.virtualWrite(V2, h);
เราอาจจะใช้ Widget เป็น Guage หรือ Label Value ก็ได้ครับ

1

Nonggun (กัญจน์ 2) September 10, 2020, 4:13am #31

ผมเพิ่มโคดที่ว่าจะให้มันไปควบคุมการทำงานอัตโนมัตถูกคับ
ผมจะเพิ่มปั้มสัก 3ตัว คับ

แล้วให้ ตัดการทำงาน ด้วยอุณหภูมิและความชื้นคับ

ช่วยเพิ่มโคดให้ผมหน่อยได้ไหมครับ

PUYIOT September 10, 2020, 4:14am #32

ส่วน ค่า Temp หรือ Humid ถ้ามันขึ้น nan บ่อยๆ ก็ loop มันสักนิดหนึ่ง จนกว่ามันจะมีค่าตัวเลขมาแสดง
ตัวอย่าง code ครับ

void checkT_H()
{ loop:
  t = dht.readTemperature();
  h = dht.readHumidity();


  //-----------------ถ้าอ่านค่าไม่ได้ ให้  t = 0 ,h = 0 เพื่อสะดวกในการวิเคราะห์ค่า---------
  if (isnan(h) || isnan(t)) {
    //Serial.println("Failed to read from DHT sensor!");
    //delay(500);
    //display.clear();
    //display.drawString(5, 0, "Failed DHT22");
    //t = 0;
    //h = 0;
    Serial.println("***อ่านค่าไม่ได้***");
    delay(1000);
    goto loop ;
  }
  //---------------------------------------------------------------------
  else {
    Serial.println("อ่านค่าได้แล้ว");
    return;//ถ้าไม่ใส่มันจะไม่ return ค่า =0,h=0
  }

}

"ทำตู้ฟักไข่ โดยใช้ Blynk แต่อุณหภูมิและความชื้น อ่านค่าได้บ้างไม่ได้บ้าง "

PUYIOT September 10, 2020, 4:19am #33

ในส่วนนี้ ผมอยากให้ลองดูก่อนนะครับ ผมว่าไม่เกินความสามารถของ @Nonggun ครับ ติดขัดยังไงก็โพสต์มาครับ เพราะต่อไป @Nonggun จะได้ประสบการณ์ที่มากขึ้นไปอีกนะครับ ผมให้กำลังใจครับ เชื่อเถอะคุณทำได้

Nonggun (กัญจน์ 2) September 10, 2020, 6:15am #34

พี่พอจะแนะแนวได้ไหมคับพอดีผมไม่รู้ว่าค่าที่ส่งมาจาก Slide มันมาเก็บอยู่ที่ไหน

PUYIOT September 10, 2020, 9:46am #35

อันนี้แนวทางครับ

#define BLYNK_PRINT Serial


#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleDHT.h>
#include <SimpleTimer.h>
//ปั้ม
 int pinPump1 = D3;
 int pinPump2 = D4;
 int pinPump3 = D6;
// DHT Config
int pinDHT22 = D5;
SimpleDHT22 dht22;

// SET Timer
SimpleTimer timer;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Ammara_2.4GHz";
char pass[] = "0866922890";

BLYNK_CONNECTED() {
    Blynk.syncAll();
}


  float temperature = 0;
  float humidity = 0;






int setTemp;
int setHumid;

BLYNK_WRITE(V4) //temperature slider in app on pin V22
{
setTemp = param.asFloat();
}
BLYNK_WRITE(V3) //temperature slider in app on pin V23
{
setHumid = param.asFloat();
}











  

void setup()
{
  // Debug console
  Serial.begin(9600);
  // You can also specify server:
  Blynk.begin(auth, ssid, pass, "oasiskit.com", 8080);
  timer.setInterval(4000L, sendTemp);
  pinMode(pinPump1, OUTPUT);
  pinMode(pinPump2, OUTPUT);
  pinMode(pinPump3, OUTPUT);
}




void sendTemp()
{
 // float temperature = 0;
 // float humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht22.read2(pinDHT22, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT22 failed, err="); Serial.println(err);delay(2000);
    return;
}  
  Blynk.virtualWrite(V1, temperature); // virtual pin 
  Blynk.virtualWrite(V2, humidity); // virtual pin 
}





void loop()
{
//  float h = Humidity();
//  float t = Temperature();
  if (temperature >= setTemp)
  {
    digitalWrite(pinPump1, HIGH);
    digitalWrite(pinPump2, HIGH);
    digitalWrite(pinPump3, HIGH);
  }
  else
  {
    digitalWrite(pinPump1, LOW);
    digitalWrite(pinPump2, LOW);
    digitalWrite(pinPump3, LOW);
  }
  if (humidity <= setHumid)
  {
    digitalWrite(pinPump1, HIGH);
    digitalWrite(pinPump2, HIGH);
    digitalWrite(pinPump3, HIGH);
  }
  else
  {
    digitalWrite(pinPump1, LOW);
    digitalWrite(pinPump2, LOW);
    digitalWrite(pinPump3, LOW);
  }
  Blynk.run();
  timer.run();
}

Nonggun (กัญจน์ 2) September 10, 2020, 7:51am #36

image

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

PUYIOT September 10, 2020, 8:15am #37

code ที่แนะนำ ผม เอามาผสมกันแล้วครับ

Nonggun (กัญจน์ 2) September 10, 2020, 9:41am #38

ผมก็ว่าอยู่ครับมานั่งอ่านโคดแล้วเหมือนจะนำไปใช้ได้เลยแต่ผมขอถามเพิ่มเติมครับจะได้รู้แบบไม่ผิด
โคดส่วนนี้คือโคดที่รับข้อมูลมาจาก slider แล้วมาเก็บในตัวแปล setTempกับ setHumid ใช่ไหมคับ

BLYNK_WRITE(V4) //temperature slider in app on pin V22
{
setTemp = param.asFloat();
}
BLYNK_WRITE(V3) //temperature slider in app on pin V23
{
setHumid = param.asFloat();
}

และโคดส่วนนี้คือ นำค่าที่มาจากโมดูลมาเปรียบเทียบกับค่าที่เก็บอยู่ในตัวแปลแล้วก็ทำงานไปตามเงื่อนไขใช่ไหมคับ

  if (temperature >= setTemp)
  {
    digitalWrite(pinPump1, HIGH);
    digitalWrite(pinPump2, HIGH);
    digitalWrite(pinPump3, HIGH);
  }
  else
  {
    digitalWrite(pinPump1, LOW);
    digitalWrite(pinPump2, LOW);
    digitalWrite(pinPump3, LOW);
  }
  if (humidity <= setHumid)
  {
    digitalWrite(pinPump1, HIGH);
    digitalWrite(pinPump2, HIGH);
    digitalWrite(pinPump3, HIGH);
  }
  else
  {
    digitalWrite(pinPump1, LOW);
    digitalWrite(pinPump2, LOW);
    digitalWrite(pinPump3, LOW);
  }

ผมต้องขอขอบคุณนี่ให้เวลามาตอบคำถามคับ
ซึ่งผมยังมือใหม่ไม่ได้เรียนด้านนี้แต่ผมสนใจเรื่องแบบนี้ ผมพึ่งเริ่มทำได้4วัน
ความรู้ยังไม่เยอะต้องอาศัยการถามจากผู้รู้ และหาโคดที่เขาทำใว้แล้วมาศึกษาคับ

PUYIOT September 10, 2020, 9:49am #39

ถูกแล้วครับ 4 วันเอง ถือว่าไปได้เร็วครับ เมื่อก่อนผมก็เป็นแบบ @Nonggun นี่แหละครับ บางเรื่อเราแค่ต้องการกุญแจมาไขปลดล็อค จากนั้นก็ลุยกันเลย

2 Likes

Remy_Martin (Permpol Thanapunnamas) September 10, 2020, 12:23pm #40

กระทู้นี้ดูครึ่งครืนนะครับ พี่ เสียดายมาตอบไม่ทัน พี่ @PUYIOT ตอบให้หมดแล้ว 555 ขอบคุณครับ

@Nonggun เยี่ยมมากครับ 4 วันก็เริ่ม ก้าวได้อย่างรวดเร็ว สงสัยตรงไหรอะไรถามได้เลยครับ ผมอ่านทุกกระทู้ทุกคอมเม้น ตรงไหนมีคนถามเยอะติดกันเยอะ ผมจะ ออกบทความ หรือคลิป มาอธิบายให้ระเอียดอีกที หรือถ้าเราเข้าใจแล้วก็สามารถ มาอธิบาย ไว้เป็นข้อมูล ก็ได้เช่น กันครับ

2 Likes

PUYIOT September 10, 2020, 2:44pm #41

ก็อยากจะผ่อนแรง​ ของ​ @Remy_Martin​ บ้างครับ​ อิ… อิ​ เท่าที่รู้