อยากตั้งเวลา เปิด-ปิด รีเลย์ 1 และ กำหนดค่าอุณหภูมิให้ทำงานAuto โดยปรับผ่านหน้าจอ app netpie
รบกวนทุกท่านช่วยชี้แนะ ว่าต้อง แก้ตรงไหน ครับ
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
int ddht = 14; //D5
#define DHTTYPE DHT11
DHT dht(ddht, DHTTYPE);
int relay1 = 2 ; // D4
int relay2 = 16 ; // D0
int relay3 = 12 ; // D6
int relay4 = 13 ; // D7
String autoHum = "on";
String autoTem = "on";
String SW01 = "on";
String SW02 = "on";
const char* ssid = "XXXXXXXXXXXXXXXXXX";
const char* password = "XXXXXXXXXXXXXXXXXX";
const char* mqtt_server = "broker.netpie.io";
const int mqtt_port = 1883;
const char* mqtt_Client = "XXXXXXXXXXXXXXXXXX";
const char* mqtt_username = "XXXXXXXXXXXXXXXXXX";
const char* mqtt_password = "AXXXXXXXXXXXXXXXXXX";
WiFiClient espClient;
PubSubClient client(espClient);
char msg[100];
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection…");
if (client.connect(mqtt_Client, mqtt_username, mqtt_password)) {
Serial.println("connected");
client.subscribe("@msg/#");
client.subscribe("@msg/relay2"); //////////////////////////////////////////////
client.subscribe("@msg/relay3");
client.subscribe("@msg/relay4");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println("try again in 5 seconds");
delay(5000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
String message;
String tpc;
for (int i = 0; i < length; i++) {
message = message + (char)payload[i];
}
Serial.println(message);
if (String(topic) == "@msg/relay1") {
if(message == "on"){
digitalWrite(relay1,LOW);
client.publish("shadow/data/updata","(\"data\":(\"relay1\":\"on\"))");
Serial.println("relay1 ON");}
else if(message == "off"){
digitalWrite(relay1,HIGH);
client.publish("shadow/data/updata","(\"data\":(\"relay1\":\"off\"))");
Serial.println("relay1 OFF");}
}
if (String(topic) == "@msg/relay2") {
if(message == "on"){
digitalWrite(relay2,LOW);
client.publish("shadow/data/updata","(\"data\":(\"relay2\":\"on\"))");
Serial.println("relay2 ON");}
else if(message == "off"){
digitalWrite(relay2,HIGH);
client.publish("shadow/data/updata","(\"data\":(\"relay2\":\"off\"))");
Serial.println("relay2 OFF");}
}
if (String(topic) == "@msg/relay3") {
if(message == "on"){
digitalWrite(relay3,LOW);
client.publish("shadow/data/updata","(\"data\":(\"relay3\":\"on\"))");
Serial.println("relay3 ON");}
else if(message == "off"){
digitalWrite(relay3,HIGH);
client.publish("shadow/data/updata","(\"data\":(\"relay3\":\"off\"))");
Serial.println("relay3 OFF");}
}
if (String(topic) == "@msg/relay4") {
if(message == "on"){
digitalWrite(relay4,LOW);
client.publish("shadow/data/updata","(\"data\":(\"relay4\":\"on\"))");
Serial.println("relay4 ON");}
else if(message == "off"){
digitalWrite(relay4,HIGH);
client.publish("shadow/data/updata","(\"data\":(\"relay4\":\"off\"))");
Serial.println("relay4 OFF");}
}
}
void setup() {
dht.begin(14);
pinMode(relay1, OUTPUT);
digitalWrite(relay1, HIGH);
pinMode(relay2, OUTPUT);
digitalWrite(relay2, HIGH);
pinMode(relay3, OUTPUT);
digitalWrite(relay3, HIGH);
pinMode(relay4, OUTPUT);
digitalWrite(relay4, HIGH);
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t))
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
if (autoTem == "on") {
if (t > 60) { //ตั้งการแบบปรั้งค่าที่ netpie ได้ ครับ
digitalWrite(relay1, LOW);
} else {
digitalWrite(relay1, HIGH);
}
}
//================================================
int r1 = digitalRead(relay1);
int r2 = digitalRead(relay2);
int r3 = digitalRead(relay3);
int r4 = digitalRead(relay4);
//==================เป็นการส่ง data goto netpie======================================
String data = "{\"data\":{\"Humidity\":"+String(h) +
",\"Temperature\":"+String(t)+
",\"relay1\":"+String(r1)+
",\"relay2\":"+String(r2)+
",\"relay3\":"+String(r3)+
",\"relay4\":"+String(r4)+
"}}";
//=================================================================================
Serial.println(data);
data.toCharArray(msg , (data.length() + 1));
client.publish("@shadow/data/update", msg);
client.loop();
delay(1000);
//================================================
} //==== end void loop ===============
//================================================
String getMsg(String topic_, String message_)
{
//================================================
if (topic_ == "@msg/relay1") {
if (message_ == "on") { //netpie["???"].publish("@msg/relay1","on")
digitalWrite(relay1, LOW);
autoHum = "off";
} else if (message_ == "off") { //netpie["???"].publish("@msg/relay1","off")
digitalWrite(relay1, HIGH);
autoTem = "on";
}
}
return autoHum;
}