Arnov Sharma
Published © MIT

Smart Room Heater Plug

A WIFI PLUG Powered by XIAO ESP32 C3 DEV board and a CUSTOM AC RELAY DRIVER BOARD.

BeginnerFull instructions provided1 hour522
Smart Room Heater Plug

Things used in this project

Hardware components

XIAO ESP32C3
Seeed Studio XIAO ESP32C3
×1

Software apps and online services

Fusion
Autodesk Fusion
Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Seeed Studio Fusion PCB/PCBA
Seeed Studio Fusion PCB/PCBA

Story

Read more

Custom parts and enclosures

STEP FILE

Schematics

SCH

Code

TEST BLINK SKETCH

C/C++
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(D1, OUTPUT);
  pinMode(D0, OUTPUT);
 
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(D1, LOW);
  digitalWrite(D0, LOW);
  delay(1000);                      // wait for a second
  digitalWrite(D1, HIGH);
  digitalWrite(D0, HIGH);
  delay(1000);                      // wait for a second
}

code

C/C++
#include <WiFi.h>
#include <ESPAsyncWebServer.h>

const char* ssid = "UR SSID";
const char* password = "UR PASS";

#define RELAY_PIN D1
#define LED_PIN D0

AsyncWebServer server(80);
bool relayState = false;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());  // Print IP address

  // Configure pins
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);  // Initially off
  digitalWrite(LED_PIN, LOW);    // Initially off

  // Configure routes
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/html", "<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width, initial-scale=1'><style>body {background: linear-gradient(135deg, #ff7e5f, #feb47b); color: white; font-family: Arial, sans-serif; text-align: center; padding: 50px;} .button {background-color: #f4511e; border: none; color: white; padding: 40px 80px; text-align: center; font-size: 24px; margin: 20px; opacity: 0.8; transition: 0.3s; cursor: pointer; border-radius: 12px;} .button:hover {opacity: 1;} h2 {font-size: 36px; margin-bottom: 20px;}</style></head><body><h2>Smart WiFi Plug Web Page</h2><button class='button' onclick='fetch(\"/toggle\").then(response => response.text()).then(text => console.log(text));'>Toggle Relay</button></body></html>");
  });

  server.on("/toggle", HTTP_GET, [](AsyncWebServerRequest *request){
    Serial.println("Toggle request received");      // Debug statement
    relayState = !relayState;                       // Toggle relay state
    digitalWrite(RELAY_PIN, relayState);            // Set relay pin
    Serial.print("Relay state: ");
    Serial.println(relayState);                     // Debug statement
    digitalWrite(LED_PIN, HIGH);                    // Turn on LED
    delay(1000);                                    // Delay for visibility
    digitalWrite(LED_PIN, LOW);                     // Turn off LED
    request->send(200, "text/plain", "Toggled!");
  });

  server.begin();
}

void loop() {
  // Empty loop
}

Credits

Arnov Sharma
339 projects • 344 followers
Just your average MAKER
Contact

Comments

Please log in or sign up to comment.