Okay, so i've try a simple code how to send a data on specific time.
here's the code
#include <RTClib.h> // for the RTC
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Instance of the class for RTC
RTC_DS1307 rtc;
// Define check in time
const int ONHour1 = 11;
const int ONMinute1 = 10;
const int OFFHour1 = 11;
const int OFFMinute1 = 12;
int CurrentHour;
int CurrentMinute;
const char* ssid = "*****";
const char* password = "*****";
const char* mqtt_server = "broker.mqtt-dashboard.com";
int mqtt_port = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
rtc.begin();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void setup_wifi(){
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() !=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Wifi Connected");
Serial.println("IP Address: ");
Serial.println(WiFi.localIP());
}
void reconnect(){
Serial.println("In Reconnect...");
while (!client.connected()){
Serial.println("Attempting MQTT Connection...");
if (client.connect("ESP8266Client")){
Serial.println("connect");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" trying again in 5 seconds");
delay(5000);
}
}
}
void loop() {
DateTime now = rtc.now();
// Save check in time;
CurrentHour = now.hour();
CurrentMinute = now.minute();
Serial.println(CurrentHour);
Serial.println(CurrentMinute);
if((CurrentHour==ONHour1) && (CurrentMinute == ONMinute1)){
client.publish("text/data", "pertama berhasil");
}
if((CurrentHour==OFFHour1) && (CurrentMinute == OFFMinute1)){
client.publish("text/data", "kedua berhasil");
}
// if((CurrentHour==ONHour2) && (CurrentMinute == ONMinute2)){
// digitalWrite(relay2,HIGH);
// Serial.println("LIGHT ON");
// }
//if((CurrentHour==OFFHour2) && (CurrentMinute == OFFMinute2)){
// digitalWrite(relay2,LOW);
// Serial.println("LIGHT OFF");
// }
if (!client.connected()){
reconnect();
}
client.loop();
delay(100);
}
its working but the delay is very late, like about 1-3 minutes.