Zbotic Logo Zbotic Logo
  • Home
  • Shop
  • Sale
  • 3D Print Service
  • PCB Service
  • B2B
  • Blogs
  • Contact Us
0 0

View Wishlist Add all to cart

0 0
0 Shopping Cart
Shopping cart (0)
Subtotal: ₹0.00

View cartCheckout

  • Shop
  • About Us
  • Contact Us
  • Reseller
  • Blogs
020 69134444
1800 209 0998
[email protected]
Help Desk
Facebook Twitter Instagram Linkedin YouTube
Zbotic Logo Zbotic Logo
0 0

View Wishlist Add all to cart

0 0
0 Shopping Cart
Shopping cart (0)
Subtotal: ₹0.00

View cartCheckout

All departments
  • 3D Print Service
  • 3D Printer
  • Batteries & Chargers
  • Development Boards
  • Drone Parts
  • EBike parts
  • Sensor Modules
  • Electronic Components
  • Electronic Modules
  • IoT and Wireless
  • Mechanical Parts and Workbench Tools
  • Motors & Drivers & Pumps & Actuators
  • DIY and Robot Kits
  • Show more
  • Home
  • Shop
  • Sale
  • 3D Print Service
  • PCB Service
  • B2B
  • Blogs
  • Contact Us
Return to previous page
Home Arduino & Microcontrollers

Arduino GSM SIM800L: Send SMS and Call with AT Commands

Arduino GSM SIM800L: Send SMS and Call with AT Commands

March 11, 2026 /Posted byJayesh Jain / 0

The SIM800L is one of the most versatile and affordable GSM/GPRS modules available, and pairing it with Arduino opens up a world of IoT possibilities — from SMS-based security alerts and remote sensor monitoring to automated calling systems and GPRS data uploads. However, the SIM800L has a notorious reputation for being difficult to get working, mainly due to power supply issues that trip up most beginners. This guide covers everything from correct wiring and power supply to AT command mastery, with tested code for sending SMS and making calls.

Table of Contents

  • SIM800L Module Overview and Variants
  • Power Supply: The #1 Reason SIM800L Fails
  • Wiring SIM800L to Arduino
  • AT Command Basics and Essential Commands
  • Sending SMS with Arduino Code
  • Making and Receiving Phone Calls
  • GPRS Data: HTTP POST to a Server
  • Frequently Asked Questions

SIM800L Module Overview and Variants

The SIM800L from SIMCom is a quad-band GSM/GPRS module operating on 850/900/1800/1900 MHz — covering all Indian cellular bands used by Jio, Airtel, BSNL, and Vi. It supports:

  • Voice calls — make and receive GSM calls
  • SMS — send and receive text messages (PDU and text mode)
  • GPRS Class 10 — data upload/download at up to 85.6 kbps
  • AT command interface — control over serial UART at 9600 bps default

You will typically encounter the SIM800L on a small breakout PCB with a micro-SIM slot. Some variants have a built-in charging circuit for a lithium battery backup. There are also the SIM800C (ceramic antenna), SIM800H (HVQFN package), and the larger SIM800 (full module with more I/O). For most Arduino projects, the common SIM800L breakout is perfect.

Indian SIM card note: Use an active 2G/GPRS SIM. Jio does not support 2G — use Airtel or Vi/BSNL for SIM800L. Airtel prepaid with a data pack works reliably for GPRS.

Recommended: Arduino Uno R3 Beginners Kit — the Uno’s separate 5V and 3.3V rails, plus the ability to power it from a 9V barrel jack, makes managing SIM800L’s power requirements much easier than with bare-minimum boards.

Power Supply: The #1 Reason SIM800L Fails

The SIM800L requires a supply voltage of 3.4V to 4.4V — NOT 5V and NOT 3.3V. Many beginners connect it to the Arduino’s 5V pin and wonder why it burns out, or to the 3.3V pin and wonder why it resets constantly. The 3.3V issue is the most common: the Arduino Uno’s on-board 3.3V regulator can only supply about 50 mA, while the SIM800L can draw up to 2A peak during GSM transmission bursts.

Correct Power Supply Options

Option 1: 18650 Li-Ion Cell (Best for prototyping)

A single 18650 lithium cell provides 3.7V nominal, 4.2V fully charged — perfectly within SIM800L’s range. This is the most reliable approach and eliminates supply noise issues. A TP4056 charging module lets you charge over USB.

Option 2: LM2596 Buck Converter from 9-12V Supply

Step down your wall adapter to 4.0V using an adjustable buck converter. Set the output to 4.0V with a multimeter before connecting the SIM800L. Add a 1000 µF capacitor across the SIM800L VCC–GND pins to handle current spikes.

Option 3: 4 x AA Alkaline Batteries

4 AA cells give 6V fresh — too high. Use 3 AA for 4.5V with a Schottky diode drop (0.3V) to get to ~4.2V. This is acceptable for testing but the voltage sags under load as batteries discharge.

Capacitor Recommendation

Always place a 1000 µF electrolytic capacitor (rated 10V+) across the SIM800L’s VCC and GND pins, as physically close to the module as possible. The GSM transmission burst draws 2A for ~1 ms — without local capacitance, this spike collapses the supply voltage and causes the module to reset.

Wiring SIM800L to Arduino

The SIM800L communicates via UART. Its TX/RX pins are 2.8V logic — connecting directly to the Arduino Uno’s 5V UART requires a voltage divider on the Arduino TX → SIM800L RX line (SIM800L TX → Arduino RX is safe since 2.8V is interpreted as HIGH by the 5V Arduino).

SIM800L Pin Arduino Connection Notes
VCC 4.0V (dedicated supply) NOT Arduino 5V or 3.3V
GND GND (common with Arduino) Must share ground
TXD Arduino D10 (RX software) Direct connection is fine
RXD Arduino D11 via divider 1kΩ + 2kΩ voltage divider
RST Arduino D9 (optional) For programmatic reset

Voltage divider for 5V → 2.8V: use 1kΩ from Arduino TX to SIM800L RX, and 2kΩ from SIM800L RX to GND. This gives (2/3) × 5V ≈ 3.3V — slightly above SIM800L’s 2.8V max but within the 0.3V tolerance of most modules.

Antenna: The SIM800L has a U.FL/IPEX antenna connector. Always connect an antenna before powering — operating without an antenna damages the RF frontend. Most modules come with a small spring antenna; for better reception in weak-signal areas, use a proper GSM stub antenna.

Recommended: Arduino Nano 33 IoT with Header — while this board has built-in WiFi, it is excellent for hybrid projects where you want local WiFi connectivity plus a SIM800L for GSM backup. Its 3.3V architecture also simplifies the level shifting needed with SIM800L.

AT Command Basics and Essential Commands

All SIM800L functions are controlled through Hayes AT commands — a text-based protocol where every command starts with “AT” and ends with a carriage return (rn). The module responds with OK, ERROR, or data.

Essential AT Commands

Command Response Purpose
AT OK Test connection
ATI SIM800 R14.18 Module firmware version
AT+CPIN? +CPIN: READY SIM card status
AT+CSQ +CSQ: 18,0 Signal quality (0-31, higher=better)
AT+CREG? +CREG: 0,1 Network registration (1=registered)
AT+COPS? +COPS: 0,0,”Airtel” Current network operator
AT+CMGF=1 OK Set SMS text mode

Always verify the sequence: AT → OK, then AT+CPIN? → READY, then AT+CREG? → 1 (registered), before attempting SMS or calls. If any step fails, the later ones will also fail.

Sending SMS with Arduino Code

Use SoftwareSerial to communicate with SIM800L on pins 10/11, keeping the hardware Serial (pins 0/1) free for debugging:

#include <SoftwareSerial.h>

// SIM800L on pins 10 (RX from SIM) and 11 (TX to SIM via voltage divider)
SoftwareSerial sim800(10, 11);

void setup() {
  Serial.begin(9600);     // Debug monitor
  sim800.begin(9600);     // SIM800L default baud
  
  delay(3000);  // Wait for SIM800L to boot and register
  
  Serial.println("Initializing SIM800L...");
  
  sim800.println("AT");          // Test
  delay(500); printResponse();
  
  sim800.println("AT+CPIN?");    // Check SIM
  delay(500); printResponse();
  
  sim800.println("AT+CREG?");    // Check registration
  delay(1000); printResponse();
  
  sim800.println("AT+CSQ");      // Signal quality
  delay(500); printResponse();
}

void sendSMS(String number, String message) {
  Serial.print("Sending SMS to ");
  Serial.println(number);
  
  sim800.println("AT+CMGF=1");      // Text mode
  delay(500);
  
  sim800.print("AT+CMGS="");
  sim800.print(number);              // e.g. "+919876543210"
  sim800.println(""");
  delay(500);
  
  sim800.print(message);             // SMS body
  delay(200);
  
  sim800.write(26);  // Ctrl+Z = send SMS
  delay(5000);       // Wait up to 5s for network
  
  printResponse();
}

void loop() {
  // Send a test SMS every 30 seconds
  sendSMS("+919876543210", "Hello from Arduino SIM800L!");
  delay(30000);
}

void printResponse() {
  while (sim800.available()) {
    Serial.write(sim800.read());
  }
  Serial.println();
}

Phone number format: Always use international format with + prefix — +919876543210 for an Indian number (91 is India’s country code).

Recommended: Arduino Mega 2560 R3 Board — for complex SIM800L projects (data logging + SMS alerts + display), the Mega’s 4 hardware UARTs let you run SIM800L on Serial1, a GPS on Serial2, and keep Serial0 for debugging — no SoftwareSerial bottlenecks.

Making and Receiving Phone Calls

Making a voice call is simpler than SMS — just one AT command:

void makeCall(String number) {
  Serial.println("Calling...");
  sim800.print("ATD");
  sim800.print(number);  // e.g. "+919876543210"
  sim800.println(";");   // Semicolon = voice call (not data)
  delay(20000);          // Let it ring for 20 seconds
  
  sim800.println("ATH"); // Hang up
  delay(1000);
}

void hangUp() {
  sim800.println("ATH");
  delay(500);
}

// To detect incoming calls, monitor for RING in the serial buffer:
void checkIncoming() {
  if (sim800.available()) {
    String response = sim800.readString();
    if (response.indexOf("RING") != -1) {
      Serial.println("Incoming call!");
      sim800.println("ATA");  // Answer
      // Or sim800.println("ATH"); to reject
    }
  }
}

Note that SIM800L has a built-in audio codec and SPKP/SPKN (speaker) and MICP/MICN (microphone) pins for actual audio, but most breakout modules do not expose these conveniently. For voice projects, look for modules with audio connectors or use the SIM800L EVB (evaluation board).

GPRS Data: HTTP POST to a Server

GPRS data is the SIM800L’s most powerful feature for IoT — sending sensor data to a cloud server without WiFi infrastructure. Here is the essential AT command sequence for an HTTP POST:

void sendHTTPPost(float temperature, float humidity) {
  // 1. Set bearer profile (GPRS)
  sim800.println("AT+SAPBR=3,1,"CONTYPE","GPRS"");
  delay(500);
  sim800.println("AT+SAPBR=3,1,"APN","airtelgprs.com""); // Airtel APN
  delay(500);
  sim800.println("AT+SAPBR=1,1");  // Open bearer
  delay(3000);
  
  // 2. Initialize HTTP service
  sim800.println("AT+HTTPINIT");
  delay(500);
  sim800.println("AT+HTTPPARA="CID",1");
  delay(500);
  sim800.println("AT+HTTPPARA="URL","http://yourserver.com/api/data"");
  delay(500);
  sim800.println("AT+HTTPPARA="CONTENT","application/json"");
  delay(500);
  
  // 3. POST data
  String json = "{"temp":" + String(temperature) + ","hum":" + String(humidity) + "}";
  sim800.println("AT+HTTPDATA=" + String(json.length()) + ",10000");
  delay(2000);
  sim800.print(json);
  delay(2000);
  sim800.println("AT+HTTPACTION=1");  // POST
  delay(5000);
  
  // 4. Cleanup
  sim800.println("AT+HTTPTERM");
  delay(500);
  sim800.println("AT+SAPBR=0,1");  // Close bearer
  delay(500);
}

Indian APN settings: Airtel: airtelgprs.com, Vodafone/Vi: www, BSNL: bsnlnet. No username/password required for most prepaid plans.

Recommended: DHT11 Digital Temperature and Humidity Sensor Module — combine with SIM800L and Arduino for a classic remote weather station that sends SMS alerts when temperature thresholds are crossed, or posts data to IoT platforms like ThingSpeak.

Frequently Asked Questions

My SIM800L keeps restarting — LED blinks rapidly. What is wrong?

This is almost always a power supply issue. The module is not getting enough current during GSM transmission bursts. Add a 1000 µF capacitor directly across VCC and GND on the module. Ensure your supply can deliver at least 2A peak — most phone chargers and Arduino USB connections cannot. Use a dedicated 4V supply (Li-Ion cell or buck converter from 12V adapter).

I get OK for AT but ERROR for AT+CMGS — why?

Several possible causes: (1) The SIM card is not registered — check AT+CREG? for status 1 or 5; (2) Signal is too weak — AT+CSQ should return at least 10 for reliable SMS; (3) You forgot AT+CMGF=1 to set text mode before AT+CMGS; (4) The SIM has insufficient balance for SMS — top up and try again.

Does SIM800L work with Jio SIM?

No. Jio is a VoLTE-only network operating exclusively on 4G. The SIM800L supports only 2G GSM/GPRS. Jio has completely shut down 2G in India. Use Airtel or Vi (Vodafone Idea) prepaid SIMs which still maintain 2G/GPRS infrastructure nationwide.

Can I use SIM800L with a 3.3V Arduino (like Nano 33)?

Yes — in fact it is simpler because 3.3V Arduino TX → SIM800L RX is a direct connection (no voltage divider needed). The power supply requirement (4.0V) is separate from the logic voltage — use a dedicated supply for SIM800L VCC regardless of which Arduino you use, sharing only the ground.

How do I read incoming SMS messages?

Send AT+CMGF=1 (text mode), then AT+CNMI=1,2,0,0,0 to enable automatic notification — new SMS will appear on the serial port automatically as +CMT: "+91xxxx","","date" followed by the message text. Alternatively, AT+CMGL="ALL" lists all stored messages.

Build your next IoT project with the right components — explore Arduino boards and modules at Zbotic.in, shipped fast across India including Mumbai, Pune, Hyderabad, Chennai, and all major cities.

Tags: Arduino, AT commands, embedded systems, GPRS, GSM, iot, SIM800L, SMS
Share Post
  • Facebook
  • Linkedin
  • Whatsapp
MicroPython vs C++: Which to L...
blog micropython vs c which to learn for microcontrollers 594900
blog fading led with arduino pwm analogwrite complete guide 594907
Fading LED with Arduino: PWM a...

Related posts

Svg%3E
Read more

Arduino Batch Programming: Flash Multiple Boards Quickly

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading
Svg%3E
Read more

Arduino Based Radar System with Ultrasonic Sensor

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading
Svg%3E
Read more

Arduino Automatic Plant Monitor: Sunlight, Moisture, Temperature

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading
Svg%3E
Read more

Arduino Lie Detector: GSR Sensor Polygraph Project

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading
Svg%3E
Read more

Arduino Metal Detector: Build a Treasure Finder

April 1, 2026 0
Table of Contents Introduction Components and Hardware Setup Wiring Diagram and Connections Complete Code with Explanation Customization and Improvements Troubleshooting... Continue reading

Add comment Cancel reply

Your email address will not be published. Required fields are marked

Facebook Twitter Instagram Pinterest Linkedin Youtube

Get the latest deals and more.

Download on Google Play Download on the App Store

Call us: 020 69134444 / 1800 209 0998

Monday - Saturday 09:30 AM - 06:00 PM
For Technical Supports Email: [email protected]
For Sales / Enquiries Email: [email protected]

  • My Account

    • Cart

    • Wishlist

    • Checkout

    • My Orders

    • Track Order

    • My Account

  • Information

    • FAQs

    • Blogs

    • Career

    • About Us

    • Contact Us

    • Payment Options

  • Policies

    • Privacy Policy

    • Terms & Conditions

    • GST Input Tax Credit

    • Shipping Return Policy

    • E-Waste Collection Points

    • Our Sitemap

© Zbotic.in is registered trademark of Moxie Supply Pvt Ltd – All Rights Reserved
Login
Use Phone Number
Use Email Address
Not a member yet? Register Now
Reset Password
Use Phone Number
Use Email Address
Register
Already a member? Login Now