Upload files to "KodeProgramArduino"
This commit is contained in:
parent
81473bd9fe
commit
712a49746f
|
@ -0,0 +1,153 @@
|
|||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266HTTPClient.h>
|
||||
#include <WiFiClientSecure.h>
|
||||
#include <Arduino_JSON.h>
|
||||
#include <NTPClient.h>
|
||||
#include <WiFiManager.h>
|
||||
#include <WiFiUdp.h>
|
||||
#include <EEPROM.h> // Tambahkan library EEPROM
|
||||
|
||||
const char* serverName = "https://touchlight.000webhostapp.com/esp-outputs-action.php?action=outputs_state&board=2";
|
||||
|
||||
const long interval = 5000; // Interval waktu pembaruan diatur menjadi 5 detik
|
||||
unsigned long previousMillis = 0;
|
||||
|
||||
String outputsState;
|
||||
|
||||
// Mendefinisikan NTP Client untuk mendapatkan waktu
|
||||
WiFiUDP ntpUDP;
|
||||
NTPClient timeClient(ntpUDP, "pool.ntp.org", 7 * 3600, 60000); /* Offset waktu 7 jam untuk WIB (GMT+7) */
|
||||
|
||||
// Menyimpan status output terakhir di EEPROM
|
||||
int lastOutputStates[4]; // Asumsikan keluaran 4 pin
|
||||
void loadEEPROM() {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
lastOutputStates[i] = EEPROM.read(i);
|
||||
}
|
||||
}
|
||||
|
||||
void saveEEPROM() {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
EEPROM.write(i, lastOutputStates[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
|
||||
WiFiManager wifiManager;
|
||||
wifiManager.autoConnect("AutoConnectAP"); // Nama default dari AP
|
||||
|
||||
Serial.println("Terhubung ke jaringan WiFi dengan Alamat IP:");
|
||||
Serial.println(WiFi.localIP());
|
||||
|
||||
// Menginisialisasi klien NTP
|
||||
timeClient.begin();
|
||||
|
||||
// Memuat status output terakhir dari EEPROM
|
||||
loadEEPROM();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
unsigned long currentMillis = millis();
|
||||
|
||||
if (currentMillis - previousMillis >= interval) {
|
||||
previousMillis = currentMillis; // Memastikan baris ini selalu diperbarui
|
||||
|
||||
// Mendefinisikan variabel untuk menyimpan status relay saat ini
|
||||
int currentRelayState[4];
|
||||
for (int i = 0; i < 4; i++) {
|
||||
currentRelayState[i] = lastOutputStates[i]; // Inisialisasi dengan nilai terakhir
|
||||
}
|
||||
|
||||
// Memeriksa status koneksi WiFi
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
timeClient.update(); // Memperbarui NTP client
|
||||
outputsState = httpGETRequest(serverName);
|
||||
Serial.println(outputsState);
|
||||
|
||||
JSONVar myObject = JSON.parse(outputsState);
|
||||
|
||||
// JSON.typeof(jsonVar) dapat digunakan untuk mendapatkan tipe variabel
|
||||
if (JSON.typeof(myObject) == "undefined") {
|
||||
Serial.println("Parsing input failed!");
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.print("JSON object = ");
|
||||
Serial.println(myObject);
|
||||
|
||||
// myObject.keys() dapat digunakan untuk mendapatkan array dari semua kunci dalam objek
|
||||
JSONVar keys = myObject.keys();
|
||||
|
||||
for (int i = 0; i < keys.length(); i++) {
|
||||
JSONVar value = myObject[keys[i]];
|
||||
int gpioPin = atoi(keys[i]);
|
||||
int gpioState = atoi(value);
|
||||
|
||||
pinMode(gpioPin, OUTPUT);
|
||||
digitalWrite(gpioPin, gpioState);
|
||||
currentRelayState[i] = gpioState; // Perbarui currentRelayState
|
||||
|
||||
// Menyimpan status output terbaru ke EEPROM
|
||||
lastOutputStates[i] = gpioState;
|
||||
saveEEPROM();
|
||||
|
||||
printGPIOStatus(gpioPin, gpioState);
|
||||
}
|
||||
} else {
|
||||
Serial.println("WiFi Disconnected");
|
||||
|
||||
delay(50);
|
||||
|
||||
// Pertahankan status relay menggunakan currentRelayState
|
||||
for (int i = 0; i < 4; i++) {
|
||||
pinMode(i, OUTPUT);
|
||||
digitalWrite(i, currentRelayState[i]);
|
||||
printGPIOStatus(i, currentRelayState[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String httpGETRequest(const char* serverName) {
|
||||
WiFiClientSecure *client = new WiFiClientSecure;
|
||||
|
||||
// Mengatur client yang aman tanpa sertifikat
|
||||
client->setInsecure();
|
||||
HTTPClient https;
|
||||
|
||||
// Alamat IP atau nama domain dengan path URL
|
||||
https.begin(*client, serverName);
|
||||
|
||||
// Mengirimkan permintaan HTTP GET
|
||||
int httpResponseCode = https.GET();
|
||||
|
||||
String payload = "{}";
|
||||
|
||||
if (httpResponseCode > 0) {
|
||||
Serial.print("HTTP Response code: ");
|
||||
Serial.println(httpResponseCode);
|
||||
payload = https.getString();
|
||||
} else {
|
||||
Serial.print("Error code: ");
|
||||
Serial.println(httpResponseCode);
|
||||
}
|
||||
// Membebaskan sumber daya
|
||||
https.end();
|
||||
delete client; // Membebaskan memori client
|
||||
|
||||
return payload;
|
||||
}
|
||||
|
||||
void printGPIOStatus(int gpio, int state) {
|
||||
// Mendapatkan waktu saat ini
|
||||
String formattedTime = timeClient.getFormattedTime();
|
||||
|
||||
Serial.print("Time: ");
|
||||
Serial.print(formattedTime);
|
||||
Serial.print(" - GPIO ");
|
||||
Serial.print(gpio);
|
||||
Serial.print(" set to : ");
|
||||
Serial.println(state);
|
||||
}
|
Loading…
Reference in New Issue