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

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

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

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

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

ใส่ 35 ให้ auto V3 on

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

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

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

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

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

onAoffB_3

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

  }

}


เพิ่มหน้าปก