Advertisement
Virajsinh

Arduino ESP8266 + GSM800L + 4 Switch Relay To Light On Off

May 1st, 2025 (edited)
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 5.48 KB | Source Code | 0 0
  1. #include <ESP8266WiFi.h>
  2. #include <SoftwareSerial.h>
  3.  
  4. // WiFi credentials
  5. const char* ssid = "WIFI_NAMW;
  6. const char* password = "WIFI_PASSWORD";
  7.  
  8. // Trusted phone number
  9. String trustedNumber = "+91XXXXXXXXXX"; // Replace with your SIM number
  10.  
  11. // GPIO definitions for NodeMCU
  12. #define RELAY1 5    // D1
  13. #define RELAY2 4    // D2
  14. #define RELAY3 14   // D5
  15. #define RELAY4 12   // D6
  16. #define GSM_RX 13   // D7 (NodeMCU receives from GSM TX)
  17. #define GSM_TX 15   // D8 (NodeMCU sends to GSM RX, use level shifter!)
  18.  
  19. // Relay pins array
  20. const int relayPins[4] = {RELAY1, RELAY2, RELAY3, RELAY4};
  21.  
  22. // GSM Serial
  23. SoftwareSerial gsm(GSM_RX, GSM_TX);
  24.  
  25. // Web server
  26. WiFiServer server(80);
  27.  
  28. void setup() {
  29.  Serial.begin(9600);
  30.  gsm.begin(9600);
  31.  
  32.  // Initialize GSM for SMS text mode
  33.  delay(1000);
  34.  gsm.println("AT");
  35.  delay(500);
  36.  gsm.println("AT+CMGF=1");        // Set SMS text mode
  37.  delay(500);
  38.  gsm.println("AT+CNMI=2,2,0,0,0"); // Show new SMS on serial
  39.  delay(500);
  40.  
  41.  // Relay pin setup
  42.  for (int i = 0; i < 4; i++) {
  43.    pinMode(relayPins[i], OUTPUT);
  44.    digitalWrite(relayPins[i], HIGH); // Active LOW = OFF
  45.  }
  46.  
  47.  // Connect to WiFi
  48.  WiFi.begin(ssid, password);
  49.  Serial.print("Connecting to WiFi");
  50.  while (WiFi.status() != WL_CONNECTED) {
  51.    delay(500);
  52.    Serial.print(".");
  53.  }
  54.  
  55.  server.begin();
  56.  Serial.println("\nāœ… WiFi connected");
  57.  Serial.print("šŸ“” IP Address: ");
  58.  Serial.println(WiFi.localIP());
  59. }
  60.  
  61. void loop() {
  62.  handleSMS();         // Handle SMS commands
  63.  handleWebRequest();  // Handle web browser control
  64. }
  65.  
  66. // Handle incoming SMS from trusted number
  67. void handleSMS() {
  68.  static String buffer = "";
  69.  
  70.  while (gsm.available()) {
  71.    char c = gsm.read();
  72.    Serial.write(c); // Debug output
  73.    buffer += c;
  74.  
  75.    // Check if there's a new SMS notification
  76.    if (buffer.indexOf("+CMT:") != -1) {
  77.      int senderStart = buffer.indexOf("\"") + 1;
  78.       int senderEnd = buffer.indexOf("\"", senderStart);
  79.       String senderNumber = buffer.substring(senderStart, senderEnd);
  80.       senderNumber.trim();
  81.  
  82.       Serial.println("šŸ“ž Sender: " + senderNumber);
  83.  
  84.       int msgStart = buffer.indexOf("\n", senderEnd) + 1;
  85.       String messageBody = buffer.substring(msgStart);
  86.       messageBody.trim();
  87.       messageBody.toUpperCase();
  88.  
  89.       Serial.println("šŸ“© Message: " + messageBody);
  90.  
  91.       if (senderNumber == trustedNumber) {
  92.         // Relay control via SMS commands
  93.         if (messageBody.indexOf("ON1") >= 0) {
  94.           digitalWrite(relayPins[0], LOW);
  95.           Serial.println("Relay 1 ON");
  96.         }
  97.         if (messageBody.indexOf("OFF1") >= 0) {
  98.           digitalWrite(relayPins[0], HIGH);
  99.           Serial.println("Relay 1 OFF");
  100.         }
  101.         if (messageBody.indexOf("ON2") >= 0) {
  102.           digitalWrite(relayPins[1], LOW);
  103.           Serial.println("Relay 2 ON");
  104.         }
  105.         if (messageBody.indexOf("OFF2") >= 0) {
  106.           digitalWrite(relayPins[1], HIGH);
  107.           Serial.println("Relay 2 OFF");
  108.         }
  109.         if (messageBody.indexOf("ON3") >= 0) {
  110.           digitalWrite(relayPins[2], LOW);
  111.           Serial.println("Relay 3 ON");
  112.         }
  113.         if (messageBody.indexOf("OFF3") >= 0) {
  114.           digitalWrite(relayPins[2], HIGH);
  115.           Serial.println("Relay 3 OFF");
  116.         }
  117.         if (messageBody.indexOf("ON4") >= 0) {
  118.           digitalWrite(relayPins[3], LOW);
  119.           Serial.println("Relay 4 ON");
  120.         }
  121.         if (messageBody.indexOf("OFF4") >= 0) {
  122.           digitalWrite(relayPins[3], HIGH);
  123.           Serial.println("Relay 4 OFF");
  124.         }
  125.         if (messageBody.indexOf("ONALL") >= 0) {
  126.           for (int i = 0; i < 4; i++) {
  127.             digitalWrite(relayPins[i], LOW);
  128.           }
  129.           Serial.println("All Relays ON");
  130.         }
  131.         if (messageBody.indexOf("OFFALL") >= 0) {
  132.           for (int i = 0; i < 4; i++) {
  133.             digitalWrite(relayPins[i], HIGH);
  134.           }
  135.           Serial.println("All Relays OFF");
  136.         }
  137.       } else {
  138.         Serial.println("āš ļø Unauthorized sender: " + senderNumber);
  139.       }
  140.  
  141.       buffer = ""; // Clear buffer for next message
  142.     }
  143.   }
  144. }
  145.  
  146. // Handle HTTP requests to control relays
  147. void handleWebRequest() {
  148.   WiFiClient client = server.available();
  149.   if (!client) return;
  150.  
  151.   while (!client.available()) delay(1);
  152.  
  153.   String request = client.readStringUntil('\r');
  154.   client.readStringUntil('\n');
  155.  
  156.   // Relay control via web
  157.   if (request.indexOf("/on1") != -1) digitalWrite(relayPins[0], LOW);
  158.   if (request.indexOf("/off1") != -1) digitalWrite(relayPins[0], HIGH);
  159.   if (request.indexOf("/on2") != -1) digitalWrite(relayPins[1], LOW);
  160.   if (request.indexOf("/off2") != -1) digitalWrite(relayPins[1], HIGH);
  161.   if (request.indexOf("/on3") != -1) digitalWrite(relayPins[2], LOW);
  162.   if (request.indexOf("/off3") != -1) digitalWrite(relayPins[2], HIGH);
  163.   if (request.indexOf("/on4") != -1) digitalWrite(relayPins[3], LOW);
  164.   if (request.indexOf("/off4") != -1) digitalWrite(relayPins[3], HIGH);
  165.  
  166.   // Simple HTML page for control
  167.   client.println("HTTP/1.1 200 OK");
  168.   client.println("Content-Type: text/html");
  169.   client.println();
  170.   client.println("<h1>Relay Control Panel</h1>");
  171.   for (int i = 0; i < 4; i++) {
  172.     client.print("Relay ");
  173.     client.print(i + 1);
  174.     client.print(": <a href='/on");
  175.     client.print(i + 1);
  176.     client.print("'>ON</a> | <a href='/off");
  177.     client.print(i + 1);
  178.     client.println("'>OFF</a><br>");
  179.   }
  180.  
  181.   delay(10);
  182.   client.stop();
  183. }
  184.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement