หลักการทำงานของโปรแกรมคือ
ถ้าอุณภูมิจากอากาศที่วัดได้ มีค่ามากกว่าค่าที่ตั้งไว้ จะสั่งให้ Relay ทำงาน แต่ถ้าอุณภูมิที่วัดได้ น้อยกว่าค่าที่ตั้งไว้ จะสั่งให้ Relay หยุดทำงาน
ปัญหาคือ
เวลาเปิดใช้งานอุปกรณ์ Relay มันจะทำงานเลย ทั้งที่ค่าที่วัดได้ มีค่าน้อยกว่าค่าที่ตั้งไว้ ดังรูปด้านล่าง คือ
ค่าที่วัดได้ = 28.0C
ค่าที่ตั้งไว้ = 30.0C
ตามรูปที่วงไว้
//#define BLYNK_PRINT Serial
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include "DHT.h"
DHT dht;
#define D0 16
#define D2 4
#define ledPin D0
#define ConfigWiFi_Pin D2
#define ESP_AP_NAME "ESP8266 V2 Config AP"
BlynkTimer timer;
char auth[] = "JH_Lx-jy-bFQ-aV-eT3TEH2BGdjCRANW";
char ssid[] = "";
char pass[] = "";
const int analogInPin = A0;
int sensorValue = 0;
int inputValue = 0;
long set_temperature;
long temps;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(ConfigWiFi_Pin, INPUT_PULLUP);
Serial.begin(115200);
digitalWrite(ledPin, LOW);
WiFiManager wifiManager;
if (digitalRead(ConfigWiFi_Pin) == LOW)
{
wifiManager.resetSettings();//goto ip 192.168.4.1 to config
}
wifiManager.autoConnect(ESP_AP_NAME);
while (WiFi.status() != WL_CONNECTED)
{
delay(250);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
digitalWrite(ledPin, HIGH);
pinMode(D1, OUTPUT);
Blynk.begin(auth, ssid, pass, "oasiskit.com", 8080);
Serial.println("Temperature (C)\t Humidity (%)");
dht.setup(2); // data pin 2
}
BLYNK_WRITE(V9)
{
set_temperature = param.asLong();
}
BLYNK_WRITE(V6)
{
temps = param.asLong();
}
BLYNK_WRITE(V1)
{
if ((param.asInt()) && (inputValue <= temps))
{
digitalWrite(D1, HIGH); Blynk.virtualWrite(V0, 255); Blynk.notify("led ACTIVADO");
}
else
{
digitalWrite(D1, LOW); Blynk.virtualWrite(V0, 0);
}
}
BLYNK_WRITE(V2)
{
if ((param.asInt()) && (inputValue <= temps))
{
digitalWrite(D1, HIGH); Blynk.virtualWrite(V0, 255); Blynk.notify("led ACTIVADO");
}
else
{
digitalWrite(D1, LOW); Blynk.virtualWrite(V0, 0);
}
}
BLYNK_WRITE(V3)
{
if ((param.asInt()) && (inputValue <= temps))
{
digitalWrite(D1, HIGH); Blynk.virtualWrite(V0, 255); Blynk.notify("led ACTIVADO");
}
else
{
digitalWrite(D1, LOW); Blynk.virtualWrite(V0, 0);
}
}
BLYNK_WRITE(V4)
{
if ((param.asInt()) && (inputValue <= temps))
{
digitalWrite(D1, HIGH); Blynk.virtualWrite(V0, 255); Blynk.notify("led ACTIVADO");
}
else
{
digitalWrite(D1, LOW); Blynk.virtualWrite(V0, 0);
}
}
void loop()
{
sensorValue = analogRead(analogInPin);
inputValue = map(sensorValue, 0, 1023, 100, 0);
delay(dht.getMinimumSamplingPeriod());
float humidity = dht.getHumidity();
float temperature = dht.getTemperature();
Blynk.virtualWrite(V5, inputValue);
if (temperature <= set_temperature)
{
digitalWrite(D1, LOW); Blynk.virtualWrite(V0, 0);
}
else
{
digitalWrite(D1, HIGH); Blynk.virtualWrite(V0, 255); Blynk.notify("led ACTIVADO");
}
Blynk.virtualWrite(V7, temperature);
Blynk.virtualWrite(V8, humidity);
Serial.print(temperature);
Serial.print("C \t\t");
Serial.print(humidity);
Serial.println("%");
delay(500);
Blynk.run();
timer.run();
}