Class DHT' ไม่มีสมาชิกชื่อ 'temperature'แก้ไขยังไงคับ

ช้วยดูข้อผิดพลาดให้ผมหน่อยผมทำวัดอุณหภูมิในการโดยใช้DHT11ให้สั่งการเปิดปิดโมดูลรีเลย์ 5V 2 ช่องแต่มันขึ้นสถานะการออก 1
‘class DHT’ ไม่มีสมาชิกชื่อ 'temperature’แก้ไขยังไงคับ

วางโค้ตที่ใช้ด้วยสิ


#define BLYNK_PRINT Serial    
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h> 
#include <SimpleTimer.h> 
#include <DHT.h> 
#include <DHT_U.h>
#define DHTPIN 12 
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

char auth[] = "xxxxxxxxxxxxxxxxxxxx";
 
SimpleTimer timer;
 
void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, "aisfibre_2.4G annne", "0872668855");
 
  dht.begin();
  
  // Setup a function to be called every second
  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 > 30){
      digitalWrite(LED_BUILTIN, LOW);
    } else {
      digitalWrite(LED_BUILTIN, HIGH);
    }
  }
  dht.humidity().getEvent(&event);
  if (!isnan(event.relative_humidity)) {
    Blynk.virtualWrite(V2, event.relative_humidity);
  }
}
void loop()
{
  Blynk.run();
  timer.run();
}

อันนี้คือช้อผิดพลาดคับ

D:\oo\temperature\0001\0001.ino: In function 'void sendUptime()':
0001:32:7: error: 'class DHT' has no member named 'temperature'
   dht.temperature().getEvent(&event);
       ^
0001:41:7: error: 'class DHT' has no member named 'humidity'
   dht.humidity().getEvent(&event);
       ^
Multiple libraries were found for "DHT.h"
 Used: C:\Users\ACER\Documents\Arduino\libraries\DHT
 Not used: C:\Users\ACER\Documents\Arduino\libraries\DHT-sensor-library-master
exit status 1
'class DHT' has no member named 'temperature'

ลบโฟล์เดอร์นี้ออก

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

D:\oo\temperature\0001\0001.ino: In function 'void sendUptime()':
0001:32:7: error: 'class DHT' has no member named 'temperature'
   dht.temperature().getEvent(&event);
       ^
0001:41:7: error: 'class DHT' has no member named 'humidity'
   dht.humidity().getEvent(&event);
       ^
exit status 1
'class DHT' has no member named 'temperature'

เช็คให้ดีครับ code ที่ใช้กับ โค้ตตัวอย่างใน library มันอาจจะไม่ตรงกัน แนะนำให้ เปิด โค้ตตัวอย่าง ในโปรแกรม dht มาคอมไพร์ดู ถ้าผ่านก็เอาจากตัวที่ผ่าน มาแทนที่ชุดกัน วิธีการดึกค่าจะเขียนกันคนละแบบ

คือยังไงเหรอคับ

อ่านที่ผมคอมมเมนเข้าใจว่าอย่างไรครับ

เปิดแบบนี้

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

// DHT Temperature & Humidity Sensor
// Unified Sensor Library Example
// Written by Tony DiCola for Adafruit Industries
// Released under an MIT license.

// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN 2     // Digital pin connected to the DHT sensor 
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.

// Uncomment the type of sensor in use:
//#define DHTTYPE    DHT11     // DHT 11
#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)

// See guide for details on sensor wiring and usage:
//   https://learn.adafruit.com/dht/overview

DHT_Unified dht(DHTPIN, DHTTYPE);

uint32_t delayMS;

void setup() {
  Serial.begin(9600);
  // Initialize device.
  dht.begin();
  Serial.println(F("DHTxx Unified Sensor Example"));
  // Print temperature sensor details.
  sensor_t sensor;
  dht.temperature().getSensor(&sensor);
  Serial.println(F("------------------------------------"));
  Serial.println(F("Temperature Sensor"));
  Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);
  Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);
  Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);
  Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("°C"));
  Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("°C"));
  Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("°C"));
  Serial.println(F("------------------------------------"));
  // Print humidity sensor details.
  dht.humidity().getSensor(&sensor);
  Serial.println(F("Humidity Sensor"));
  Serial.print  (F("Sensor Type: ")); Serial.println(sensor.name);
  Serial.print  (F("Driver Ver:  ")); Serial.println(sensor.version);
  Serial.print  (F("Unique ID:   ")); Serial.println(sensor.sensor_id);
  Serial.print  (F("Max Value:   ")); Serial.print(sensor.max_value); Serial.println(F("%"));
  Serial.print  (F("Min Value:   ")); Serial.print(sensor.min_value); Serial.println(F("%"));
  Serial.print  (F("Resolution:  ")); Serial.print(sensor.resolution); Serial.println(F("%"));
  Serial.println(F("------------------------------------"));
  // Set delay between sensor readings based on sensor details.
  delayMS = sensor.min_delay / 1000;
}

void loop() {
  // Delay between measurements.
  delay(delayMS);
  // Get temperature event and print its value.
  sensors_event_t event;
  dht.temperature().getEvent(&event);
  if (isnan(event.temperature)) {
    Serial.println(F("Error reading temperature!"));
  }
  else {
    Serial.print(F("Temperature: "));
    Serial.print(event.temperature);
    Serial.println(F("°C"));
  }
  // Get humidity event and print its value.
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
    Serial.println(F("Error reading humidity!"));
  }
  else {
    Serial.print(F("Humidity: "));
    Serial.print(event.relative_humidity);
    Serial.println(F("%"));
  }
}

ส่วนใหญ่โค้ตตรงนี้จะไม่ตรงกัน มันคือ ใช้ library ที่ใช้ในการ อ่านเซ็นเซอร์ DHT คนละตัวกัน ซึ่งเท่าที่เจอ มันมี 2 แบบ 2 แบบนี้เขียน class ในการอ่านเซ็นเซอร์ คนละแบบ

เราประกาศใช้ :books: library แบบที่ 1

แต่เราไปใช้โค้ต :books: library แบบที่ 2

:warning: คำถามคือในภาพนี้ โค้ต เจ้าของกระทู้ผิดตรงไหน

นี้คือก่อนและหลังการแก้ไข

image

คับของมีมันต้องรันเข้าไปในโปรแกรมBlynk ในมือถือคับเพื่อควบคุมได้ คับ

ประเด็นคือเจอจุดที่เราผิดหรือยัง ?

dht.temperature().getEvent(&event);ผมไม่ได้ประกาศค่าคับ

ลองเอาออกดูว่า Verify ผ่านหรือไม่

เอาอันนี้ออกรันได้คับ
dht.humidity().getEvent(&event);

1 Like

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

ส่วนตัวผมแก้แบบนี้ บรรทัดเดียว

คับแล้วอันนี้มันคืออะไรเหรอพี่ พี่พอจะรู้มั้ยคับ
dht.humidity().getEvent(&event);

มันก็เป็นคำสั่งที่เข้าไปอ่าน class ของ library ความชื้นมานี้แหละครับ ที่เราเอาออกแล้ว verify ผ่านก็เพราะมันไม่เข้าไปเรียกคำสั่งที่มันไม่มี

ส่วนที่ผมแก้คือ ประกาศใช้ชุดคำสั่ง ของมันที่ขาดหายไปให้ตรงกับที่มันเรียกนั้นเอง

แล้วมันยังจำเป็นมั้ยคับต้องโค้ดอันนี้ผมจะทำแบบนี้อะคับ
http://www.kpciot.com/article/10/ทดสอบการวัดค่าอุณหภูมิและความชื้นด้วยตัวตรวจวัด-dht11-แล้วส่งค่าไปแสดงที่สมาร์ทโฟน-พร้อมทั้งสั่งให้ทำงานตามเงื่อนไขที่กำหนด