Yarana Iot Guru
Published © MIT

HTTP Request Using 4G LTE GSM Module | Send Data to Cloud Da

Build a portable IoT node that uses a 4G LTE modem to send sensor data (JSON) via HTTP POST to your cloud PHP/MySQL backend. No Wi-Fi requir

BeginnerFull instructions provided8 hours153
HTTP Request Using 4G LTE GSM Module | Send Data to Cloud Da

Things used in this project

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

⭐ 📁 Full Arduino Source Code (Organized & Cleaned)

C/C++
/*
   ESP32 + A7670C (4G LTE Module) → HTTP GET / POST Request via Serial Command

   ✅ Type in Serial Monitor:
      GET=HelloWorld
      POST=Temperature=30

   ✅ Automatically sends GET/POST request to your server.
   ✅ Works only with HTTP (not HTTPS).

   Author: Abhishek Maurya (Yarana IoT Guru)
   YouTube: https://youtu.be/iiWqvlhov-M
*/

// ---------------- USER CONFIG ----------------
#include <Arduino.h>

#define GSM_RX 23
#define GSM_TX 19

// Change to your domain or server URL
const char *API_URL = "http://neonadvertising.shop/tutorial/api.php";
// Change APN based on your SIM card operator
const char *APN = "airtelgprs.com";

HardwareSerial gsm(1);
bool netReady = false;

// -------------- HELPER FUNCTIONS --------------
String cleanResp(String in) {
  in.replace("\r", "");
  while (in.indexOf("\n\n") >= 0) in.replace("\n\n", "\n");
  in.trim();
  return in;
}

String readResp(uint32_t timeout = 5000) {
  String r;
  uint32_t start = millis();
  while (millis() - start < timeout) {
    while (gsm.available()) {
      r += (char)gsm.read();
      start = millis();
    }
    delay(5);
  }
  return cleanResp(r);
}

String sendAT(String cmd, uint32_t timeout = 2000) {
  gsm.println(cmd);
  Serial.print(">> "); Serial.println(cmd);
  String resp = readResp(timeout);
  Serial.println(resp);
  return resp;
}

// -------------- NETWORK INITIAL SETUP --------------
bool setupNetwork() {
  sendAT("AT");
  sendAT("ATE0");
  sendAT("AT+CMEE=2");
  sendAT("AT+CFUN=1");
  sendAT("AT+CREG?");
  sendAT("AT+CGDCONT=1,\"IP\",\"" + String(APN) + "\"");
  sendAT("AT+NETCLOSE");

  String netopen = sendAT("AT+NETOPEN", 10000);
  if (netopen.indexOf("OK") > 0 || netopen.indexOf("ALREADY CONNECT") > 0) {
    Serial.println("✅ Network Opened Successfully");
    sendAT("AT+IPADDR", 2000);
    netReady = true;
    return true;
  } else {
    Serial.println("❌ Network Open Failed");
    return false;
  }
}

// -------------- HTTP GET REQUEST FUNCTION --------------
void httpGET(String data) {
  if (!netReady) setupNetwork();

  sendAT("AT+HTTPTERM", 500);
  sendAT("AT+HTTPINIT", 1000);
  sendAT("AT+HTTPPARA=\"CID\",1");

  String fullUrl = String(API_URL) + "?data=" + data;
  sendAT("AT+HTTPPARA=\"URL\",\"" + fullUrl + "\"");
  sendAT("AT+HTTPACTION=0", 10000);  // GET
  String resp = sendAT("AT+HTTPREAD", 10000);

  sendAT("AT+HTTPTERM");
  Serial.println("📩 Server Response:");
  Serial.println(resp);
}

// -------------- HTTP POST REQUEST FUNCTION --------------
void httpPOST(String data) {
  if (!netReady) setupNetwork();

  sendAT("AT+HTTPTERM", 500);
  sendAT("AT+HTTPINIT", 1000);
  sendAT("AT+HTTPPARA=\"CID\",1");
  sendAT("AT+HTTPPARA=\"CONTENT\",\"application/x-www-form-urlencoded\"");
  sendAT("AT+HTTPPARA=\"URL\",\"" + String(API_URL) + "\"");

  String payload = "data=" + data;
  sendAT("AT+HTTPDATA=" + String(payload.length()) + ",10000", 2000);
  gsm.print(payload);
  delay(800);

  sendAT("AT+HTTPACTION=1", 10000);  // POST
  String resp = sendAT("AT+HTTPREAD", 10000);

  sendAT("AT+HTTPTERM");
  Serial.println("📩 Server Response:");
  Serial.println(resp);
}

// ---------------- SETUP ----------------
void setup() {
  Serial.begin(115200);
  gsm.begin(115200, SERIAL_8N1, GSM_RX, GSM_TX);

  Serial.println("\n=== ESP32 + A7670C HTTP GET/POST DEMO ===");
  Serial.println("Type in Serial Monitor:");
  Serial.println("  GET=HelloWorld");
  Serial.println("  POST=Temperature=30");
  setupNetwork();
}

// ---------------- LOOP ----------------
void loop() {
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();
    if (cmd.length() == 0) return;

    cmd.toUpperCase();

    if (cmd.startsWith("GET=")) {
      String data = cmd.substring(4);
      Serial.println("🌐 Sending GET -> " + data);
      httpGET(data);
    } 
    else if (cmd.startsWith("POST=")) {
      String data = cmd.substring(5);
      Serial.println("🌐 Sending POST -> " + data);
      httpPOST(data);
    } 
    else {
      Serial.println("❓ Unknown command. Use GET= or POST=");
    }
  }
}

Credits

Yarana Iot Guru
48 projects • 25 followers
Yarana Iot GuruYarana IoT Guru: Arduino,ESP32, GSM, NodeMCU & more.Projects, Tutorials & App Development. Innovate with us!
Thanks to Yarana IoT Guru.

Comments