ESP 32 single channel wifi switch.

ESP 32 single channel wifi switch.

i used 5v 1s High level trigger relay for this project.

components: esp 32, 1 channel 5v relay, 5v 1A power supply

i connected relay IN on D23 pin of esp32

Source code:

Code
#include <WiFi.h>
#include <SinricPro.h>
#include <SinricProSwitch.h>
// WiFi credentials
const char* ssid = "xyz";
const char* password = "xyz";
// Sinric Pro credentials
#define APP_KEY "xyz"
#define APP_SECRET "xyz"
#define DEVICE_ID "xyz"
#define RELAY_PIN 23 // GPIO23 for relay control
#define LED_BUILTIN 2 // GPIO2 for built-in blue LED
// Callback to handle relay state changes
bool onPowerState(const String &deviceId, bool &state) {
digitalWrite(RELAY_PIN, state ? LOW : HIGH); // Active LOW logic
digitalWrite(LED_BUILTIN, state ? HIGH : LOW); // LED ON logic
Serial.printf("Fan turned %s\n", state ? "ON" : "OFF");
return true;
}
// Wi-Fi setup function
void setupWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" connected!");
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Relay OFF initially
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW); // LED OFF initially
setupWiFi();
SinricProSwitch &fanSwitch = SinricPro[DEVICE_ID];
fanSwitch.onPowerState(onPowerState);
SinricPro.onConnected([]() { Serial.println("Connected to Sinric Pro!"); });
SinricPro.onDisconnected([]() { Serial.println("Disconnected from Sinric Pro."); });
SinricPro.begin(APP_KEY, APP_SECRET);
}
void loop() {
static unsigned long lastWiFiCheck = 0;
if (WiFi.status() != WL_CONNECTED && millis() - lastWiFiCheck > 5000) {
Serial.println("WiFi disconnected! Reconnecting...");
setupWiFi();
lastWiFiCheck = millis();
}
SinricPro.handle();
if (!SinricPro.isConnected()) {
Serial.println("Reconnecting to Sinric Pro...");
SinricPro.begin(APP_KEY, APP_SECRET);
}
}

Comments

No comments yet. Why don’t you start the discussion?

    Leave a Reply

    Your email address will not be published. Required fields are marked *