Yarana Iot Guru
Published © MIT

ESP32 4G LTE Based Home Automation System

A WiFi-free IoT automation system using ESP32 and 4G LTE that enables real-time cloud relay control anywhere with SIM network coverage. ๐Ÿš€

BeginnerFull instructions provided8 hours21
ESP32 4G LTE Based Home Automation System

Things used in this project

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

โœ… Complete Code

C/C++
#include <HardwareSerial.h>

HardwareSerial sim(2);

// ๐Ÿ” Relay Pins
#define R1 4
#define R2 5
#define R3 18
#define R4 19

String serverURL = "http://yourdomain.com/getRelayState.php";
String apn = "airtelgprs.com";

void sendAT(String cmd, int waitTime = 2000) {
  sim.println(cmd);
  delay(waitTime);
  while (sim.available()) {
    Serial.write(sim.read());
  }
}

void setup() {
  Serial.begin(115200);
  sim.begin(115200, SERIAL_8N1, 16, 17);

  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);

  digitalWrite(R1, LOW);
  digitalWrite(R2, LOW);
  digitalWrite(R3, LOW);
  digitalWrite(R4, LOW);

  Serial.println("Initializing LTE Module...");

  sendAT("AT");
  sendAT("ATE0"); // Echo off
  sendAT("AT+CPIN?");
  sendAT("AT+CREG?");
  sendAT("AT+CGATT=1");

  // ๐Ÿ“ก Set APN
  sendAT("AT+CGDCONT=1,\"IP\",\"" + apn + "\"");
  sendAT("AT+CGACT=1,1");

  Serial.println("LTE Initialization Complete");
}

void fetchRelayState() {

  Serial.println("Fetching Relay State...");

  sendAT("AT+HTTPTERM",1000);
  sendAT("AT+HTTPINIT");
  sendAT("AT+HTTPPARA=\"CID\",1");
  sendAT("AT+HTTPPARA=\"URL\",\"" + serverURL + "\"");
  sendAT("AT+HTTPACTION=0",5000);
  sendAT("AT+HTTPREAD",3000);

  String response = "";

  while (sim.available()) {
    response += (char)sim.read();
  }

  Serial.println("Response:");
  Serial.println(response);

  // ๐Ÿ” Parse Response Example: R1=1,R2=0,R3=1,R4=0
  if (response.indexOf("R1=1") != -1) digitalWrite(R1, HIGH);
  else digitalWrite(R1, LOW);

  if (response.indexOf("R2=1") != -1) digitalWrite(R2, HIGH);
  else digitalWrite(R2, LOW);

  if (response.indexOf("R3=1") != -1) digitalWrite(R3, HIGH);
  else digitalWrite(R3, LOW);

  if (response.indexOf("R4=1") != -1) digitalWrite(R4, HIGH);
  else digitalWrite(R4, LOW);

  sendAT("AT+HTTPTERM");
}

void loop() {

  fetchRelayState();

  delay(5000); // 5 sec polling interval
}

Credits

Yarana Iot Guru
47 projects โ€ข 23 followers
Yarana Iot GuruYarana IoT Guru: Arduino,ESP32, GSM, NodeMCU & more.Projects, Tutorials & App Development. Innovate with us!
Thanks to Yarana IoT Guru.

Comments