IOT Smart Controller Adalah alat control jarak jauh berbasis internet yang dapat di kontrol dari jarak jauh, alat ini di lengkapi fitur autoreconect dan di kendalikan via blynk
yang minat bisa chat wa admin : 085874064828
Kode Program :
#define BLYNK_TEMPLATE_ID "TMPL6IhKutG4k"
#define BLYNK_TEMPLATE_NAME "IOT 8 CH"
#define BLYNK_AUTH_TOKEN "BQbd2q1hIDL2X_DCwwvPzW5PpmznxJVP"
// Library
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// WiFi Credential
char ssid[] = "Tes123"; // Ganti dengan SSID Wi-Fi Anda
char pass[] = "1234Dcba12"; // Ganti dengan Password Wi-Fi Anda
// OLED Setup
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// I2C pins untuk OLED
#define OLED_SDA 26
#define OLED_SCL 25
// Daftar GPIO untuk Relay (8 channel)
const int relayPins[8] = {4, 5, 13, 14, 15, 16, 17, 18};
bool relayStates[8] = {0}; // Status tiap relay
// Variabel untuk auto-reconnect
unsigned long previousMillis = 0;
const long interval = 10000; // Interval cek koneksi (ms)
// Virtual Pins untuk Blynk
BLYNK_WRITE(V0) { relayControl(0, param.asInt()); }
BLYNK_WRITE(V1) { relayControl(1, param.asInt()); }
BLYNK_WRITE(V2) { relayControl(2, param.asInt()); }
BLYNK_WRITE(V3) { relayControl(3, param.asInt()); }
BLYNK_WRITE(V4) { relayControl(4, param.asInt()); }
BLYNK_WRITE(V5) { relayControl(5, param.asInt()); }
BLYNK_WRITE(V6) { relayControl(6, param.asInt()); }
BLYNK_WRITE(V7) { relayControl(7, param.asInt()); }
// Fungsi untuk mengontrol relay
void relayControl(int index, int value) {
relayStates[index] = value;
digitalWrite(relayPins[index], value);
updateOLED();
}
// Fungsi reconnect WiFi dan Blynk
void checkConnection() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi terputus. Mencoba reconnect...");
WiFi.begin(ssid, pass);
unsigned long startAttemptTime = millis();
while (WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 10000) {
delay(500);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi terhubung kembali.");
Blynk.connect(); // Coba koneksi ulang ke Blynk
} else {
Serial.println("\nGagal reconnect WiFi.");
}
}
if (!Blynk.connected()) {
Serial.println("Blynk tidak terhubung. Mencoba reconnect...");
Blynk.connect();
}
}
// Setup
void setup() {
Serial.begin(115200);
// Atur pin relay sebagai output
for (int i = 0; i < 8; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], LOW); // Awal OFF
}
// Inisialisasi OLED
Wire.begin(OLED_SDA, OLED_SCL);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Gagal inisialisasi OLED");
while (1); // Looping terus jika gagal
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
updateOLED(); // Menampilkan status pertama kali
// Hubungkan ke WiFi dan Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
// Loop utama
void loop() {
if (Blynk.connected()) {
Blynk.run(); // Jalankan Blynk hanya jika terhubung
}
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
checkConnection(); // Cek koneksi tiap 10 detik
}
}
// Fungsi untuk memperbarui tampilan OLED
void updateOLED() {
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);
display.println("PILIHAN ONLINE"); // Judul di atas layar
// Menampilkan status relay
for (int i = 0; i < 8; i++) {
display.print("Relay ");
display.print(i + 1);
display.print(": ");
display.println(relayStates[i] ? "ON " : "OFF");
}
display.display(); // Refresh tampilan OLED
}
0 comments:
Post a Comment