อยากให้ เซนเซอร์วัดความชื้นดิน ทำงานอัตโนมัติครับ โดยใช้ Blynk ร่วมกับ NodeMCU V3

ขอปิดประเด็นนี้สักหน่อย ไม่รู้ว่าได้ยังนะครับ

อันนี้คือปัญหาสินะ

ตอนนี้สามารถ Clone app ออกมาได้แล้วเดียวจะทดสอบดูว่า On V3(AUTOMATIC) แลัวจะทำงานได้ไหม

เนื่องจากผม ขี้เกียจต่อเซ็นเซอร์ให้ยุ่งยาก ผมจะใช้วิธี ป้อนอินพุตให้กับตัวแปรที่ผมสนใจนะครับ เพื่อความงานในการวิเคราะห์ปัญหา

ใส่ 35 ให้ auto V3 on

จะเห็นว่ามันเข้าไปทำงานแล้ว

พอปรับไปที่ 20 น่าแปลกที่ มันควรจะทำงานกลับไม่ทำงาน

แต่พอ on/off ใหม่ มันกลับมาทำงานถูกต้อง แบบนี้

ดังนั้นแสดงว่า โปรแกรมมันวิ่งเข้ามาทำงานที่ V3 แค่ครั้งเดียวจังหวะที่กดเท่านั้นครับ ดังนั้นวิธีแก้คือ ย้ายโพรเซสการทำงานไปไว้ที่ void loop

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

#define BLYNK_PRINT Serial

#define DHTPIN D2

#define DHTTYPE DHT11

#include <SPI.h>

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

#include <SimpleTimer.h>

#include <DHT.h>

int sensorPin = A0;

int sensorValue = 0;

int Relay = D3;

bool auto_on = false;

SimpleTimer timer;

DHT dht(DHTPIN, DHTTYPE);

WidgetLCD lcd(V6);

char auth[] = "auth";

char ssid[] = "ssid";

char pass[] = "passwords";

BLYNK_CONNECTED() {

  Blynk.syncAll();

  }

BLYNK_WRITE(V4) {

  if (param.asInt() == 1) {

    digitalWrite(Relay,HIGH);

    lcd.clear();

    lcd.print(0,0,"PUMP: ON");

    lcd.print(0,1,"STATS: Manual On");

    delay(500);

    Blynk.virtualWrite(V3,LOW);

  }

  if (param.asInt() == 0) {

    digitalWrite(Relay,LOW);

    lcd.clear();

    lcd.print(0,0,"PUMP: OFF");

    lcd.print(0,1,"STATS: ManualOff");

    delay(500);

  }

}

void sendTemp() {

  float h = dht.readHumidity();

  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);

}

void sendSoilValue() {

  sensorValue = analogRead(sensorPin);

  sensorValue = map(sensorValue, 0, 1023, 0, 100);

  Blynk.virtualWrite(V5, sensorValue);

}

void setup() {

  pinMode(Relay,OUTPUT);

  pinMode(sensorPin,INPUT);

  pinMode(DHTPIN,INPUT);

  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);

  dht.begin();

  lcd.clear();

  lcd.print(4,0,"SMART");

  lcd.print(0,1,"Watering System");

  delay(2000);

  lcd.clear();

  lcd.print(0,0,"Please Wait");

  delay(1000);

  lcd.print(0,0,"Please Wait.");

  delay(1000);

  lcd.print(0,0,"Please Wait..");

  delay(1000);

  lcd.print(0,0,"Please Wait...");

  delay(1000);

  lcd.print(0,0,"Please Wait....");

  delay(1000);

  lcd.clear();

  timer.setInterval(1000L, sendTemp);

  timer.setInterval(1000L, sendSoilValue);

}

void loop() {

  Blynk.run();

  timer.run();

  if(auto_on == true){

  if (sensorValue >30 && sensorValue <85) {

      digitalWrite(Relay,HIGH);

      lcd.clear();

      lcd.print(0,0,"PUMP: ON");

      lcd.print(0,1,"STATS: Dry Soil");

      delay(500);

    }

    else if (sensorValue <30) {

      digitalWrite(Relay,LOW);

      lcd.clear();

      lcd.print(0,0,"PUMP: OFF");

      lcd.print(0,1,"STATS: Water");

      delay(500);

    }

    else if (sensorValue >85) {

      digitalWrite(Relay,LOW);

      lcd.clear();

      lcd.print(0,0,"PUMP: OFF");

      lcd.print(0,1,"STATS: Air");

      delay(500);

    }

}

}

BLYNK_WRITE(V3) {

  //sensorValue = analogRead(sensorPin);

  //sensorValue = map(sensorValue, 0, 1023, 0, 100);

  if (param.asInt() == 1) {

    auto_on = true;

    Blynk.virtualWrite(V4,LOW);

  }else{

    auto_on = false;

    digitalWrite(Relay,LOW);

    lcd.clear();

    lcd.print(0,0,"PUMP: OFF");

    lcd.print(0,1,"STATS: AutoOff");

    delay(500);

  }

}


เพิ่มหน้าปก

ผมลองรัน CODE อันนี้ดู แต่ไม่รู้ว่า รบกวน ด้วยครับ ว่า ผิดพลาดอะไรบ้าง

Arduino: 1.8.12 (Windows Store 1.8.33.0) (Windows 10), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, Only Sketch, 115200"

Multiple libraries were found for "SimpleTimer.h"
 Used: C:\Users\Windows 10\Documents\Arduino\libraries\SimpleTimer
 Not used: C:\Users\Windows 10\Documents\Arduino\libraries\SimpleTimer-master
Multiple libraries were found for "DHT.h"
 Used: C:\Users\Windows 10\Documents\Arduino\libraries\DHT-sensor-library-master
 Not used: C:\Users\Windows 10\Documents\Arduino\libraries\Grove_Temperature_And_Humidity_Sensor
 Not used: C:\Users\Windows 10\Documents\Arduino\libraries\DHT_sensor_library
In file included from C:\Users\Windows 10\Documents\Arduino\libraries\DHT-sensor-library-master\DHT_U.cpp:22:0:

C:\Users\Windows 10\Documents\Arduino\libraries\DHT-sensor-library-master\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory

 #include <Adafruit_Sensor.h>

                             ^

compilation terminated.

exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).

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

ขอดูหน้าโปรแกรมหน่อยครับ

1 Like
#define BLYNK_PRINT Serial

#define DHTPIN D2

#define DHTTYPE DHT11

#include <SPI.h>

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

#include <SimpleTimer.h>

#include <DHT.h>

int sensorPin = A0;

int sensorValue = 0;

int Relay = D3;

bool auto_on = false;

SimpleTimer timer;

DHT dht(DHTPIN, DHTTYPE);

WidgetLCD lcd(V6);

char auth[] = "auth";

char ssid[] = "ssid";

char pass[] = "passwords";

BLYNK_CONNECTED() {

  Blynk.syncAll();

  }

BLYNK_WRITE(V4) {

  if (param.asInt() == 1) {

    digitalWrite(Relay,HIGH);

    lcd.clear();

    lcd.print(0,0,"PUMP: ON");

    lcd.print(0,1,"STATS: Manual On");

    delay(500);

    Blynk.virtualWrite(V3,LOW);

  }

  if (param.asInt() == 0) {

    digitalWrite(Relay,LOW);

    lcd.clear();

    lcd.print(0,0,"PUMP: OFF");

    lcd.print(0,1,"STATS: ManualOff");

    delay(500);

  }

}

void sendTemp() {

  float h = dht.readHumidity();

  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);

}

void sendSoilValue() {

  sensorValue = analogRead(sensorPin);

  sensorValue = map(sensorValue, 0, 1023, 0, 100);

  Blynk.virtualWrite(V5, sensorValue);

}

void setup() {

  pinMode(Relay,OUTPUT);

  pinMode(sensorPin,INPUT);

  pinMode(DHTPIN,INPUT);

  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);

  dht.begin();

  lcd.clear();

  lcd.print(4,0,"SMART");

  lcd.print(0,1,"Watering System");

  delay(2000);

  lcd.clear();

  lcd.print(0,0,"Please Wait");

  delay(1000);

  lcd.print(0,0,"Please Wait.");

  delay(1000);

  lcd.print(0,0,"Please Wait..");

  delay(1000);

  lcd.print(0,0,"Please Wait...");

  delay(1000);

  lcd.print(0,0,"Please Wait....");

  delay(1000);

  lcd.clear();

  timer.setInterval(1000L, sendTemp);

  timer.setInterval(1000L, sendSoilValue);

}

void loop() {

  Blynk.run();

  timer.run();

  if(auto_on == true){

  if (sensorValue >30 && sensorValue <85) {

      digitalWrite(Relay,HIGH);

      lcd.clear();

      lcd.print(0,0,"PUMP: ON");

      lcd.print(0,1,"STATS: Dry Soil");

      delay(500);

    }

    else if (sensorValue <30) {

      digitalWrite(Relay,LOW);

      lcd.clear();

      lcd.print(0,0,"PUMP: OFF");

      lcd.print(0,1,"STATS: Water");

      delay(500);

    }

    else if (sensorValue >85) {

      digitalWrite(Relay,LOW);

      lcd.clear();

      lcd.print(0,0,"PUMP: OFF");

      lcd.print(0,1,"STATS: Air");

      delay(500);

    }

}

}

BLYNK_WRITE(V3) {

  //sensorValue = analogRead(sensorPin);

  //sensorValue = map(sensorValue, 0, 1023, 0, 100);

  if (param.asInt() == 1) {

    auto_on = true;

    Blynk.virtualWrite(V4,LOW);

  }else{

    auto_on = false;

    digitalWrite(Relay,LOW);

    lcd.clear();

    lcd.print(0,0,"PUMP: OFF");

    lcd.print(0,1,"STATS: AutoOff");

    delay(500);

  }

}

ตรงไหนเป็นโค้ต ทำไฮไลท์ไว้ด้วยครับ ดูไม่รู้เรื่องครับ

ตามไปลบโฟล์เดอร์ ที่ขีดไว้ ออกครับ ลง library ผิดที่มันซ้ำกัน

ขอบคุณครับ แก้ไขเรียบร้อยแล้ว

@THAMMARAT_PUSITRATTA แก้ไขอะไรไปถึงได้ สรุปหน่อยครับ

ไปลบ libarries ที่ซัมกัน ตามคำแนะนำ

1 Like