179 lines
5.1 KiB
C++
179 lines
5.1 KiB
C++
#include <Firebase_ESP_Client.h>
|
|
#include <Arduino.h>
|
|
#include <ESP8266WiFi.h>
|
|
//Provide the token generation process info.
|
|
#include "addons/TokenHelper.h"
|
|
//Provide the RTDB payload printing info and other helper functions.
|
|
#include "addons/RTDBHelper.h"
|
|
|
|
// Insert your network credentials
|
|
#define WIFI_SSID "Comingsoon"
|
|
#define WIFI_PASSWORD "hilmi123"
|
|
|
|
// Insert Firebase project API Key
|
|
#define API_KEY "AIzaSyCmquF32M-zZDpW_Hswg9ZvREgikmteJMY"
|
|
|
|
// Insert RTDB URLefine the RTDB URL */
|
|
#define DATABASE_URL "https://smart-home-e64ae-default-rtdb.firebaseio.com/"
|
|
|
|
// Pin untuk mengontrol lampu
|
|
#define TENGAH 5
|
|
#define DEPAN 16
|
|
#define SAMPING 4
|
|
|
|
//Define Firebase Data object
|
|
FirebaseData fbdo;
|
|
|
|
FirebaseAuth auth;
|
|
FirebaseConfig config;
|
|
|
|
//some importent variables
|
|
String sValue, sValue2, sValue3;
|
|
bool signupOK = false;
|
|
|
|
bool depanState = false;
|
|
bool sampingState = false;
|
|
bool tengahState = false;
|
|
|
|
unsigned long lastResponseTimeHigh = 0;
|
|
unsigned long lastResponseTimeLow = 0;
|
|
|
|
void setup() {
|
|
Serial.begin(115200);
|
|
|
|
pinMode(DEPAN,OUTPUT);
|
|
pinMode(TENGAH,OUTPUT);
|
|
pinMode(SAMPING,OUTPUT);
|
|
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
|
Serial.print("Connecting to Wi-Fi");
|
|
while (WiFi.status() != WL_CONNECTED) {
|
|
Serial.print(".");
|
|
delay(300);
|
|
}
|
|
Serial.println();
|
|
Serial.print("Connected with IP: ");
|
|
Serial.println(WiFi.localIP());
|
|
Serial.println();
|
|
|
|
/* Assign the api key (required) */
|
|
config.api_key = API_KEY;
|
|
|
|
/* Assign the RTDB URL (required) */
|
|
config.database_url = DATABASE_URL;
|
|
|
|
/* Sign up */
|
|
if (Firebase.signUp(&config, &auth, "", "")) {
|
|
Serial.println("ok");
|
|
signupOK = true;
|
|
}
|
|
else {
|
|
Serial.printf("%s\n", config.signer.signupError.message.c_str());
|
|
}
|
|
|
|
/* Assign the callback function for the long running token generation task */
|
|
config.token_status_callback = tokenStatusCallback; //see addons/TokenHelper.h
|
|
|
|
Firebase.begin(&config, &auth);
|
|
Firebase.reconnectWiFi(true);
|
|
}
|
|
|
|
void loop() {
|
|
if (Firebase.ready() && signupOK ) {
|
|
if (Firebase.RTDB.getString(&fbdo, "/DEPAN")) {
|
|
if (fbdo.dataType() == "string") {
|
|
sValue = fbdo.stringData();
|
|
int a = sValue.toInt();
|
|
Serial.println(a);
|
|
if (a == 1){
|
|
digitalWrite(DEPAN,HIGH);
|
|
if (!depanState) {
|
|
unsigned long now = millis();
|
|
Serial.print("DEPAN switched to HIGH, response time: ");
|
|
Serial.print(now - lastResponseTimeLow);
|
|
Serial.println(" ms");
|
|
lastResponseTimeHigh = now;
|
|
}
|
|
depanState = true;
|
|
}else{
|
|
digitalWrite(DEPAN,LOW);
|
|
if (depanState) {
|
|
unsigned long now = millis();
|
|
Serial.print("DEPAN switched to LOW, response time: ");
|
|
Serial.print(now - lastResponseTimeHigh);
|
|
Serial.println(" ms");
|
|
lastResponseTimeLow = now;
|
|
}
|
|
depanState = false;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
Serial.println(fbdo.errorReason());
|
|
}
|
|
|
|
if (Firebase.RTDB.getString(&fbdo, "/SAMPING")) {
|
|
if (fbdo.dataType() == "string") {
|
|
sValue2 = fbdo.stringData();
|
|
int b = sValue2.toInt();
|
|
Serial.println(b);
|
|
if (b == 1){
|
|
digitalWrite(SAMPING,HIGH);
|
|
if (!sampingState) {
|
|
unsigned long now = millis();
|
|
Serial.print("SAMPING switched to HIGH, response time: ");
|
|
Serial.print(now - lastResponseTimeLow);
|
|
Serial.println(" ms");
|
|
lastResponseTimeHigh = now;
|
|
}
|
|
sampingState = true;
|
|
}else{
|
|
digitalWrite(SAMPING,LOW);
|
|
if (sampingState) {
|
|
unsigned long now = millis();
|
|
Serial.print("SAMPING switched to LOW, response time: ");
|
|
Serial.print(now - lastResponseTimeHigh);
|
|
Serial.println(" ms");
|
|
lastResponseTimeLow = now;
|
|
}
|
|
sampingState = false;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
Serial.println(fbdo.errorReason());
|
|
}
|
|
|
|
if (Firebase.RTDB.getString(&fbdo, "/TENGAH")) {
|
|
if (fbdo.dataType() == "string") {
|
|
sValue3 = fbdo.stringData();
|
|
int c = sValue3.toInt();
|
|
Serial.println(c);
|
|
if (c == 1){
|
|
digitalWrite(TENGAH,HIGH);
|
|
if (!tengahState) {
|
|
unsigned long now = millis();
|
|
Serial.print("TENGAH switched to HIGH, response time: ");
|
|
Serial.print(now - lastResponseTimeLow);
|
|
Serial.println(" ms");
|
|
lastResponseTimeHigh = now;
|
|
}
|
|
tengahState = true;
|
|
}else{
|
|
digitalWrite(TENGAH,LOW);
|
|
if (tengahState) {
|
|
unsigned long now = millis();
|
|
Serial.print("TENGAH switched to LOW, response time: ");
|
|
Serial.print(now - lastResponseTimeHigh);
|
|
Serial.println(" ms");
|
|
lastResponseTimeLow = now;
|
|
}
|
|
tengahState = false;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
Serial.println(fbdo.errorReason());
|
|
}
|
|
}
|
|
}
|