Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ESP8266WiFi.h>
- #include <SoftwareSerial.h>
- // WiFi credentials
- const char* ssid = "WIFI_NAMW;
- const char* password = "WIFI_PASSWORD";
- // Trusted phone number
- String trustedNumber = "+91XXXXXXXXXX"; // Replace with your SIM number
- // GPIO definitions for NodeMCU
- #define RELAY1 5 // D1
- #define RELAY2 4 // D2
- #define RELAY3 14 // D5
- #define RELAY4 12 // D6
- #define GSM_RX 13 // D7 (NodeMCU receives from GSM TX)
- #define GSM_TX 15 // D8 (NodeMCU sends to GSM RX, use level shifter!)
- // Relay pins array
- const int relayPins[4] = {RELAY1, RELAY2, RELAY3, RELAY4};
- // GSM Serial
- SoftwareSerial gsm(GSM_RX, GSM_TX);
- // Web server
- WiFiServer server(80);
- void setup() {
- Serial.begin(9600);
- gsm.begin(9600);
- // Initialize GSM for SMS text mode
- delay(1000);
- gsm.println("AT");
- delay(500);
- gsm.println("AT+CMGF=1"); // Set SMS text mode
- delay(500);
- gsm.println("AT+CNMI=2,2,0,0,0"); // Show new SMS on serial
- delay(500);
- // Relay pin setup
- for (int i = 0; i < 4; i++) {
- pinMode(relayPins[i], OUTPUT);
- digitalWrite(relayPins[i], HIGH); // Active LOW = OFF
- }
- // Connect to WiFi
- WiFi.begin(ssid, password);
- Serial.print("Connecting to WiFi");
- while (WiFi.status() != WL_CONNECTED) {
- delay(500);
- Serial.print(".");
- }
- server.begin();
- Serial.println("\nā WiFi connected");
- Serial.print("š” IP Address: ");
- Serial.println(WiFi.localIP());
- }
- void loop() {
- handleSMS(); // Handle SMS commands
- handleWebRequest(); // Handle web browser control
- }
- // Handle incoming SMS from trusted number
- void handleSMS() {
- static String buffer = "";
- while (gsm.available()) {
- char c = gsm.read();
- Serial.write(c); // Debug output
- buffer += c;
- // Check if there's a new SMS notification
- if (buffer.indexOf("+CMT:") != -1) {
- int senderStart = buffer.indexOf("\"") + 1;
- int senderEnd = buffer.indexOf("\"", senderStart);
- String senderNumber = buffer.substring(senderStart, senderEnd);
- senderNumber.trim();
- Serial.println("š Sender: " + senderNumber);
- int msgStart = buffer.indexOf("\n", senderEnd) + 1;
- String messageBody = buffer.substring(msgStart);
- messageBody.trim();
- messageBody.toUpperCase();
- Serial.println("š© Message: " + messageBody);
- if (senderNumber == trustedNumber) {
- // Relay control via SMS commands
- if (messageBody.indexOf("ON1") >= 0) {
- digitalWrite(relayPins[0], LOW);
- Serial.println("Relay 1 ON");
- }
- if (messageBody.indexOf("OFF1") >= 0) {
- digitalWrite(relayPins[0], HIGH);
- Serial.println("Relay 1 OFF");
- }
- if (messageBody.indexOf("ON2") >= 0) {
- digitalWrite(relayPins[1], LOW);
- Serial.println("Relay 2 ON");
- }
- if (messageBody.indexOf("OFF2") >= 0) {
- digitalWrite(relayPins[1], HIGH);
- Serial.println("Relay 2 OFF");
- }
- if (messageBody.indexOf("ON3") >= 0) {
- digitalWrite(relayPins[2], LOW);
- Serial.println("Relay 3 ON");
- }
- if (messageBody.indexOf("OFF3") >= 0) {
- digitalWrite(relayPins[2], HIGH);
- Serial.println("Relay 3 OFF");
- }
- if (messageBody.indexOf("ON4") >= 0) {
- digitalWrite(relayPins[3], LOW);
- Serial.println("Relay 4 ON");
- }
- if (messageBody.indexOf("OFF4") >= 0) {
- digitalWrite(relayPins[3], HIGH);
- Serial.println("Relay 4 OFF");
- }
- if (messageBody.indexOf("ONALL") >= 0) {
- for (int i = 0; i < 4; i++) {
- digitalWrite(relayPins[i], LOW);
- }
- Serial.println("All Relays ON");
- }
- if (messageBody.indexOf("OFFALL") >= 0) {
- for (int i = 0; i < 4; i++) {
- digitalWrite(relayPins[i], HIGH);
- }
- Serial.println("All Relays OFF");
- }
- } else {
- Serial.println("ā ļø Unauthorized sender: " + senderNumber);
- }
- buffer = ""; // Clear buffer for next message
- }
- }
- }
- // Handle HTTP requests to control relays
- void handleWebRequest() {
- WiFiClient client = server.available();
- if (!client) return;
- while (!client.available()) delay(1);
- String request = client.readStringUntil('\r');
- client.readStringUntil('\n');
- // Relay control via web
- if (request.indexOf("/on1") != -1) digitalWrite(relayPins[0], LOW);
- if (request.indexOf("/off1") != -1) digitalWrite(relayPins[0], HIGH);
- if (request.indexOf("/on2") != -1) digitalWrite(relayPins[1], LOW);
- if (request.indexOf("/off2") != -1) digitalWrite(relayPins[1], HIGH);
- if (request.indexOf("/on3") != -1) digitalWrite(relayPins[2], LOW);
- if (request.indexOf("/off3") != -1) digitalWrite(relayPins[2], HIGH);
- if (request.indexOf("/on4") != -1) digitalWrite(relayPins[3], LOW);
- if (request.indexOf("/off4") != -1) digitalWrite(relayPins[3], HIGH);
- // Simple HTML page for control
- client.println("HTTP/1.1 200 OK");
- client.println("Content-Type: text/html");
- client.println();
- client.println("<h1>Relay Control Panel</h1>");
- for (int i = 0; i < 4; i++) {
- client.print("Relay ");
- client.print(i + 1);
- client.print(": <a href='/on");
- client.print(i + 1);
- client.print("'>ON</a> | <a href='/off");
- client.print(i + 1);
- client.println("'>OFF</a><br>");
- }
- delay(10);
- client.stop();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement