ผมต้องการทำตู้ควบคุมความชื้น อุณภูมิ ด้วยESP2866

อย่างที่บอกผมต้องการทำตู้ควบคุมความชื้น อุณภูมิ ด้วยESP2866 แต่ผมติดปันหาตรงไม่สามารถหาโค้ดที่สามาถเปรียบเทียบค่าของDHT11 กับสวิตที่สามาถปรับค่าของแอพ blynkได้ จึงมาขอความรู้พี่ๆหน่อยครับ นี่คือโค้ดที่เขียนเอาใว้

**********************************************************************************************
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>

// 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[] = "*****";
char pass[] = "******";

#define DHTPIN D4          // What digital pin we're connected to

// Uncomment whatever type you're using!
#define DHTTYPE DHT11     // DHT 11


DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;

// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
}

void setup()
{
  Serial.begin(115200); // See the connection status in Serial Monitor
  Blynk.begin(auth, ssid, pass);

  dht.begin();

  // Setup a function to be called every second
  timer.setInterval(1000L, sendSensor);
}

void loop()
{
  Blynk.run(); // Initiates Blynk
  timer.run(); // Initiates SimpleTimer
}

ในนี้มีโค้ตที่ไว้เปรียบเทียบค่า t กับ h อยู่นะครับ ผมจำไม่ได้ละลองไล่ดูหน่อย ค้นเจอแล้วเอามาแปะไว้หน่อย

ของพี่คนนี้ผมไม่เข้าใจหลายๆจุดน่ะครับผมเลยต้องมาถามเพิ่มเป็นกระทู้นี้

int setTemp;
int setHumid;


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

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

DHT_Unified dht(DHTPIN, DHTTYPE);

//***BLYNK TOKEN**//
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";


//***LINE TOKEN***//
#define LINE_TOKEN  "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

SimpleTimer timer;


BLYNK_CONNECTED() {
  Blynk.syncAll();
}

void setup()
{
  Serial.begin(115200);
  Serial.println("xxxxxxx");
  Serial.println("xxxxxxxx");
  Serial.println(LINE.getVersion());
  LINE.setToken(LINE_TOKEN);
  LINE.notify("myarduino.net");

  Blynk.begin(auth, "xxxx", "xxxxxxxx"); //ใส่ชื่อ WIFI and PASSWORD


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

  timer.setInterval(1000L, sendUptime);

}

void sendUptime()
{
  //*****ชุดคำสั่งการทำงานของอุณหภูมิ******//
  Blynk.virtualWrite(V5, millis() / 1000);
  sensors_event_t event;
  dht.temperature().getEvent(&event);
  if (!isnan(event.temperature)) {
    Blynk.virtualWrite(V1, event.temperature);
    if (event.temperature >= `setTemp`) {
      digitalWrite(D1, LOW);
      String LineText;
      String string1 = "อุณหภูมิ ต่ำกว่ากำหนด ";
      String string2 = " °C";
      LineText = string1 + event.temperature + string2;
      Serial.print("Line ");
      Serial.println(LineText);
      LINE.notify(LineText);
    } 
    else {
      digitalWrite(D1, HIGH);
    }
    }
  dht.humidity().getEvent(&event);
  if (!isnan(event.relative_humidity)) {
    Blynk.virtualWrite(V2, event.relative_humidity);
    if (event.temperature >= `setHumid`) {
      digitalWrite(D7, LOW);
      String LineText;
      String string1 = "ความชื้น ต่ำกว่ากำหนด ";
      String string2 = " %";
      LineText = string1 + event.temperature + string2;
      Serial.print("Line ");
      Serial.println(LineText);
      LINE.notify(LineText);
    }
    else {
      digitalWrite(D7, HIGH);
  }
  }
}

//*********************************************************//

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

}

ตอนนี้เข้าใจว่าอะไรบ้างครับ อธิบายให้ฟังหน่อย จะได้ปรับมายเซตกันถูก

    • บันทัดนี้ผมเข้าใจว่าให้ดึงค่าจากปุ่มในแอพ blynk เพิ่อมากำหนดในส่วนต่อไป
int setTemp;

int setHumid;

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

* **ส่วนตัวนี้ก็เป็นการเซ็ดค่าเพื่อเชื่อต่อBlynk กับ wifi ต่างๆ**

}

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

DHT_Unified dht(DHTPIN, DHTTYPE);

//* **BLYNK TOKEN** //
char auth[] = “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;

// ***LINE TOKEN*** //
#define LINE_TOKEN “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”

SimpleTimer timer;

BLYNK_CONNECTED() {
Blynk.syncAll();
}
  • ส่วนบันทัดนี้ก็เป็นการออกคำสั่งให้ปริ้นค่าต่างๆออกทางมอนิเตอร์ตอนเชื่อต่อสันยานต่างๆ
Serial.begin(115200);
Serial.println(“xxxxxxx”);
Serial.println(“xxxxxxxx”);
Serial.println(LINE.getVersion());
LINE.setToken(LINE_TOKEN);
LINE.notify(“[myarduino.net](http://myarduino.net/)”);

Blynk.begin(auth, “xxxx”, “xxxxxxxx”); //ใส่ชื่อ WIFI and PASSWORD
  • บันทัดนี้กำหนดค่าขาต่างๆว่ามีหน้าที่ทำอ่ะไรบ้าง
<div data-theme-tiles="1">

pinMode(LED_BUILTIN, OUTPUT);

</div>
<div data-theme-tiles="1">

digitalWrite(LED_BUILTIN, HIGH);

</div>
<div data-theme-tiles="1">

pinMode(D1, OUTPUT); // ***ควบคุมอุณหภูมิ*** ///

</div>
<div data-theme-tiles="1">

digitalWrite(D1, HIGH);

</div>

<div data-theme-tiles="1">

dht.begin();

</div>

<div data-theme-tiles="1">

timer.setInterval(1000L, sendUptime);

</div>

<div data-theme-tiles="1">

}

</div>
  • ที่ไม่เข้าใจเลยคือทั้งหมดของบันทัดนี้ครับผมไม่เคยเข้าถึงโค้ดนี้เลย
void sendUptime()
 {
 // *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
 Blynk.virtualWrite(V5, millis() / 1000);
 sensors_event_t event;
 dht.temperature().getEvent(&event);
 if (!isnan(event.temperature)) {
 Blynk.virtualWrite(V1, event.temperature);
 if (event.temperature =  `setTemp` ) {
 digitalWrite(D1, LOW);
 String LineText;
 String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
 String string2 = " °C”;
 LineText = string1 + event.temperature + string2;
 Serial.print("Line ");
 Serial.println(LineText);
 LINE.notify(LineText);
 }
 else {
 digitalWrite(D1, HIGH);
 }
 }
 dht.humidity().getEvent(&event);
 if (!isnan(event.relative_humidity)) {
 Blynk.virtualWrite(V2, event.relative_humidity);
 if (event.temperature =  `setHumid` ) {
 digitalWrite(D7, LOW);
 String LineText;
 String string1 = "ความชื้น ต่ำกว่ากำหนด “;
 String string2 = " %”;
 LineText = string1 + event.temperature + string2;
 Serial.print("Line ");
 Serial.println(LineText);
 LINE.notify(LineText);
 }
 else {
 digitalWrite(D7, HIGH);
 }
 }
 }
 
 //*********************************************************//
 
 void loop()
 {
 //if(Blynk.connected()) {
 Blynk.run();
 timer.run();
 
 }

แก้ไขให้แล้วครับ

void sendUptime()
{
//  *****ชุดคำสั่งการทำงานของอุณหภูมิ*****  *//
Blynk.virtualWrite(V5, millis() / 1000);
sensors_event_t event;  //ไม่เข้าใจว่าคำสั่งนี้มีใว้ทำอ่ะไร เพราะตอผมคอมพลายมันบอกว่า ไม่ได้ถูกประกาศในขอบเขตนี้
dht.temperature().getEvent(&event);
if (!isnan(event.temperature)) {
Blynk.virtualWrite(V1, event.temperature); // ส่วนพวกนี้ผมเข้าใจว่าให้ดึงค่ามาเปรียบเทียบกับอุณะภูมิ
if (event.temperature >=  `setTemp`  )//ท่ามากกว่าหรือเท่ากับให้Low {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
String string2 = " °C”;
}
else//ท่าไม่ใช่ให้ HIGH {
digitalWrite(D1, HIGH);
}
}
dht.humidity().getEvent(&event);
if (!isnan(event.relative_humidity)) {
Blynk.virtualWrite(V2, event.relative_humidity); // ตัวนี้น่าจะเป็นการดึงค่าจากblynkมาเปรียบเทียบกับความชื้น
if (event.temperature >=  `setHumid`  )//ท่ามากกว่าหรือเท่ากับให้LOW {
digitalWrite(D7, LOW);
String LineText;
String string1 = "ความชื้น ต่ำกว่ากำหนด “;
String string2 = " %”;

}
else {
digitalWrite(D7, HIGH);
}
}
}

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

}
void sendUptime()
 {
 // *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
 Blynk.virtualWrite(V5, millis() / 1000);
 sensors_event_t event;
 dht.temperature().getEvent(&event);
 if (!isnan(event.temperature)) {
 Blynk.virtualWrite(V1, event.temperature);
 if (event.temperature =  `setTemp` ) {
 digitalWrite(D1, LOW);
 String LineText;
 String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
 String string2 = " °C”;
 LineText = string1 + event.temperature + string2;
 Serial.print("Line ");
 Serial.println(LineText);
 LINE.notify(LineText);
 }
 else {
 digitalWrite(D1, HIGH);
 }
 }
 dht.humidity().getEvent(&event);
 if (!isnan(event.relative_humidity)) {
 Blynk.virtualWrite(V2, event.relative_humidity);
 if (event.temperature =  `setHumid` ) {
 digitalWrite(D7, LOW);
 String LineText;
 String string1 = "ความชื้น ต่ำกว่ากำหนด “;
 String string2 = " %”;
 LineText = string1 + event.temperature + string2;
 Serial.print("Line ");
 Serial.println(LineText);
 LINE.notify(LineText);
 }
 else {
 digitalWrite(D7, HIGH);
 }
 }
 }

ฟังก์ชันนี้จะเป็นการทำงานของ เซ็นเซฮร์ครับ ทำหน้าที่ทั้งอ่านค่าจากตัวเซนเซอร์ด้วยคำสั่งนี้

 sensors_event_t event;
dht.temperature().getEvent(&event);

ส่วนนี้จะเป็นเงื่อนไขที่เรากำหนดว่า ถ้าค่าเซ็นเซฮร์ที่อ่านได้ ตรงกับเงื่อนไขให้มัน On พร้อมกับส่งข้อความไปหา line ด้วย แต่ถ้าไม่ใช่ก็ให้ off ไป

if (event.temperature >=  `setTemp` ) {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
String string2 = " °C”;
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D1, HIGH);
}

การทำงานทั้งหมดจะทำงานวนๆ อยู่อย่างนี้ตามคำสั่งที่กำหนดไว้ใน setup ว่าให้ทำงานทุกๆ กี่วินาที

timer.setInterval(1000L, sendUptime);

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

if (event.temperature >=  `setTemp` ) {
digitalWrite(D1, LOW);
String LineText;
String string1 = "อุณหภูมิ ต่ำกว่ากำหนด “;
String string2 = " °C”;
LineText = string1 + event.temperature + string2;
Serial.print("Line ");
Serial.println(LineText);
LINE.notify(LineText);
}
else {
digitalWrite(D1, HIGH);
}

เท่าที่ผมเข้าใจคือท่าเราไม่ได้จะส่งไปไลน์บรรทัดนี้คือลบออกได้เลยถูกไหมครับ

void sendUptime()
 {
 // *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
 Blynk.virtualWrite(V5, millis() / 1000);
 sensors_event_t event;
 dht.temperature().getEvent(&event);
 if (!isnan(event.temperature)) {
 Blynk.virtualWrite(V1, event.temperature);
 
 
 }
 dht.humidity().getEvent(&event);
 if (!isnan(event.relative_humidity)) {
 Blynk.virtualWrite(V2, event.relative_humidity);
 
 }
 }

แล้วโค้ดที่เหลือจากการที่ตัดการส่งข้อมูลเข้า ไลน์ จะเหลือประมาณนี้ผมเข้าใจถูกไหมครับ

void sendUptime()
 {
 // *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
 Blynk.virtualWrite(V5, millis() / 1000);
 sensors_event_t event;
 dht.temperature().getEvent(&event);
 if (!isnan(event.temperature)) //ตรงนี้เป็นการกำหนดเงื่อนไข >=, <= , ==  ใช่ไหมครับ
   {
 Blynk.virtualWrite(V1, event.temperature); //หรือผมต้องมากำหนด เงื่อนไข >=, <= , == ตรงนีครับ
  }
 dht.humidity().getEvent(&event);
 if (!isnan(event.relative_humidity)) {
 Blynk.virtualWrite(V2, event.relative_humidity);
 
 }
 }

สุดท้ายเลยคือ
%E0%B9%81%E0%B8%81%E0%B9%89%E0%B9%84%E0%B8%82
เป็นแบบนี้คือผมต้องลงไลเบอรี่เพิ่มหรือผมต้องไปกำหนดตัวไหนเพิ่มหลอครับ

copy error ทั้งหมดมาเลยครับมันเห็นแต่ส่วนเดียว

Arduino: 1.8.10 (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

C:\Users\User\Desktop\______\______.ino: In function 'void sendUptime()':

______:65:2: error: 'sensors_event_t' was not declared in this scope

  sensors_event_t event;

  ^

______:65:18: error: expected ';' before 'event'

  sensors_event_t event;

                  ^

______:66:6: error: 'class DHT' has no member named 'temperature'

  dht.temperature().getEvent(&event);

      ^

______:66:30: error: 'event' was not declared in this scope

  dht.temperature().getEvent(&event);

                              ^

______:71:6: error: 'class DHT' has no member named 'humidity'

  dht.humidity().getEvent(&event);

      ^

C:\Users\User\Desktop\______\______.ino: In function 'void setup()':

______:87:28: error: 'sendSensor' was not declared in this scope

   timer.setInterval(1000L, sendSensor);

                            ^

Multiple libraries were found for "Wire.h"
 Used: C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\Wire
 Not used: C:\Users\User\Documents\Arduino\libraries\Wire
Multiple libraries were found for "ESP8266WiFi.h"
 Used: C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266WiFi
Multiple libraries were found for "BlynkSimpleEsp8266.h"
 Used: C:\Users\User\Documents\Arduino\libraries\Blynk
Multiple libraries were found for "DHT.h"
 Used: D:\Arduino\libraries\DHT-sensor-library-master
Multiple libraries were found for "Adafruit_Sensor.h"
 Used: D:\Arduino\libraries\Adafruit_Sensor-master
exit status 1
'sensors_event_t' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

วางโค้ตล่าสุดแบบเต็มๆ ด้วยครับ

แก้ คำผิดให้ด้วยนะครับ

image

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

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[] = "AndroidAP";
char pass[] = "123654789a";


BLYNK_CONNECTED() {
Blynk.syncAll();
}

void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // You can send any value at any time.
  // Please don't send more that 10 values per second.
  Blynk.virtualWrite(V5, h);
  Blynk.virtualWrite(V6, t);
}

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




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

dht.begin();

timer.setInterval(1000L, sendUptime);

}

void sendUptime()
 {
 // *****ชุดคำสั่งการทำงานของอุณหภูมิ***** *//
 Blynk.virtualWrite(V5, millis() / 1000);
 sensors_event_t event;
 dht.temperature().getEvent(&event);
 if (!isnan(event.temperature)) //ตรงนี้เป็นการกำหนดเงื่อนไข >=, <= , ==  ใช่ไหมครับ
   {
 Blynk.virtualWrite(V1, event.temperature); //หรือผมต้องมากำหนด เงื่อนไข >=, <= , == ตรงนีครับ
  }
 dht.humidity().getEvent(&event);
 if (!isnan(event.relative_humidity)) {
 Blynk.virtualWrite(V2, event.relative_humidity);
 
 }
 }
void loop()
{
//if(Blynk.connected()) {
Blynk.run();
timer.run();

}

ตอนนี้ มี library ซ้ำซ้อนกันอยู่ครับ ลบบบรทัดที่มาร์คไว้ออกไปเลย ลบไฟล์นะครับ

พอลบตามที่บอกแล้วก็ขึ้นเออเร่อนี้ต่อครับ
/////////////////////////////////////////////////////////////////////////////////////////////
Arduino: 1.8.10 (Windows 10), Board: “NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200”

Multiple libraries were found for “ESP8266WiFi.h”
______:4:17: error: DHT.h: No such file or directory

Used: C:\Users\User\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2\libraries\ESP8266WiFi
#include <DHT.h>

Multiple libraries were found for “BlynkSimpleEsp8266.h”
^

Used: C:\Users\User\Documents\Arduino\libraries\Blynk
compilation terminated.

exit status 1
DHT.h: No such file or directory

This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.

อันนี้เป็นเออเร่อนะครับ