The GSM module SIM800L Arduino combination is the go-to solution for adding cellular connectivity to your electronics projects in India. Whether you need to send SMS alerts from a security system, make automated phone calls from a fire alarm, or push sensor data to the cloud over GPRS, the SIM800L makes it possible with just an Indian SIM card from Jio, Airtel, or Vi. This guide covers everything from wiring and power supply to sending SMS, making calls, and transmitting data over GPRS.
Table of Contents
- About the SIM800L Module
- Critical: Power Supply Requirements
- Indian SIM Card Setup
- Wiring SIM800L to Arduino
- Essential AT Commands
- Sending SMS with Arduino
- Making Phone Calls
- GPRS Data: HTTP Requests
- Frequently Asked Questions
About the SIM800L Module
The SIM800L is a quad-band GSM/GPRS module manufactured by SIMCom. It supports 850/900/1800/1900 MHz bands, covering all GSM networks in India. Key features include:
- GSM/GPRS: Voice calls, SMS, and 2G data (GPRS Class 12, 85.6 kbps)
- Voltage: 3.4V to 4.4V (NOT 5V and NOT 3.3V)
- SIM Card: Micro-SIM slot
- Interface: UART serial (AT commands)
- Bluetooth: BT 3.0 + EDR (on some variants)
- Audio: Supports headset and speaker output
- Size: 15.8 x 17.8 x 2.4 mm (tiny!)
Critical: Power Supply Requirements
This is the number one cause of SIM800L failures. The module requires a stable power supply between 3.4V and 4.4V with peak current capability of 2A during transmission bursts. The Arduino’s 3.3V and 5V pins cannot supply this.
Solutions for reliable power supply:
- SIM800L V2 (recommended): Has an onboard voltage regulator. Feed it 5V from a USB power bank or wall adapter with at least 2A capability.
- LiPo battery: A 3.7V LiPo battery naturally falls within the 3.4-4.4V range and can deliver high peak currents. This is the cleanest solution.
- Buck converter: Use an adjustable buck converter set to 4.0V from a 5V or 12V source. Add a 1000 uF capacitor at the output.
Signs of insufficient power: The module resets during calls or SMS, the LED blinks rapidly but never settles, AT commands return “ERROR” or no response, and the module cannot register on the network.
Indian SIM Card Setup
Before inserting the SIM card into your SIM800L, prepare it on a regular phone first:
- Activate the SIM: Insert into a phone and make one test call to ensure it is active
- Disable SIM PIN: Go to phone Settings → Security → SIM Lock → Disable PIN. The SIM800L cannot enter a PIN code on startup
- Check balance: Ensure minimum ₹10-20 balance for SMS/GPRS testing
- Note APN settings: You will need these for GPRS data
- Jio: APN =
jionet - Airtel: APN =
airtelgprs.com - Vi (Vodafone Idea): APN =
www - BSNL: APN =
bsnlnet
- Jio: APN =
Important: Jio is a 4G-only network. The SIM800L is a 2G module and does NOT work with Jio SIM cards in most areas. Use Airtel, Vi, or BSNL SIM cards which still support 2G networks in India. For Jio, you need a 4G module like SIM7600 or A7670E.
Wiring SIM800L to Arduino
| SIM800L Pin | Arduino Uno | Notes |
|---|---|---|
| VCC | External 3.7-4.2V | NOT from Arduino! (V2: use 5V) |
| GND | GND | Common ground with Arduino |
| TXD | D2 (SoftwareSerial RX) | Module TX to Arduino RX |
| RXD | D3 (SoftwareSerial TX) | Use voltage divider (5V → 3.3V) |
| RST | D4 (optional) | Hardware reset |
RXD voltage divider: The SIM800L’s RX pin is 3.3V. Use a simple voltage divider with a 1K and 2K resistor to step down the Arduino’s 5V TX signal. Alternatively, use a logic level converter.
Essential AT Commands
The SIM800L is controlled via AT commands sent over the serial connection. Here are the most important commands:
AT → Test communication (should return "OK")
AT+CSQ → Signal quality (0-31, higher is better)
AT+CREG? → Network registration (0,1 = registered)
AT+COPS? → Show connected operator name
AT+CBC → Battery voltage and percentage
AT+CMGF=1 → Set SMS to text mode
AT+CMGS="+919876543210" → Send SMS to number
ATD+919876543210; → Dial a number (semicolon is important)
ATH → Hang up call
ATA → Answer incoming call
Sending SMS with Arduino
#include <SoftwareSerial.h>
SoftwareSerial sim800l(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
sim800l.begin(9600);
delay(3000); // Wait for module to initialise
Serial.println("SIM800L SMS Test - Zbotic.in");
// Check if module is responding
sendAT("AT", 1000);
// Check signal strength
sendAT("AT+CSQ", 1000);
// Check network registration
sendAT("AT+CREG?", 1000);
// Send SMS
sendSMS("+919876543210", "Hello from Arduino and SIM800L! - Zbotic.in");
}
void loop() {
// Forward data between Serial Monitor and SIM800L
if (sim800l.available()) Serial.write(sim800l.read());
if (Serial.available()) sim800l.write(Serial.read());
}
void sendSMS(String number, String message) {
sim800l.println("AT+CMGF=1"); // Text mode
delay(500);
sim800l.print("AT+CMGS="");
sim800l.print(number);
sim800l.println(""");
delay(500);
sim800l.print(message);
delay(100);
sim800l.write(26); // Ctrl+Z to send
delay(5000);
Serial.println("SMS sent!");
}
void sendAT(String command, int timeout) {
sim800l.println(command);
long start = millis();
while (millis() - start < timeout) {
if (sim800l.available()) {
Serial.write(sim800l.read());
}
}
Serial.println();
}
Making Phone Calls
void makeCall(String number) {
Serial.print("Calling ");
Serial.println(number);
sim800l.print("ATD");
sim800l.print(number);
sim800l.println(";"); // Semicolon for voice call
delay(20000); // Ring for 20 seconds
sim800l.println("ATH"); // Hang up
Serial.println("Call ended");
}
// Usage in setup() or loop():
// makeCall("+919876543210");
For two-way audio, connect a small electret microphone to MIC+ and MIC- pins, and a speaker to SPK+ and SPK- pins on the SIM800L module.
GPRS Data: HTTP Requests
The SIM800L can send data to web servers over GPRS (2G data). This is how IoT projects send sensor data to platforms like ThingSpeak, Blynk, or custom servers:
void sendToThingSpeak(float temperature, float humidity) {
// Initialise GPRS
sendAT("AT+SAPBR=3,1,"CONTYPE","GPRS"", 2000);
sendAT("AT+SAPBR=3,1,"APN","airtelgprs.com"", 2000); // Airtel APN
sendAT("AT+SAPBR=1,1", 5000); // Open bearer
sendAT("AT+HTTPINIT", 2000); // Init HTTP
// Build URL with sensor data
String url = "http://api.thingspeak.com/update?api_key=YOUR_KEY";
url += "&field1=" + String(temperature);
url += "&field2=" + String(humidity);
sim800l.print("AT+HTTPPARA="URL","");
sim800l.print(url);
sim800l.println(""");
delay(2000);
sendAT("AT+HTTPACTION=0", 10000); // GET request
sendAT("AT+HTTPREAD", 2000); // Read response
sendAT("AT+HTTPTERM", 1000); // Terminate HTTP
sendAT("AT+SAPBR=0,1", 2000); // Close bearer
Serial.println("Data sent to ThingSpeak!");
}
Note: GPRS speeds are slow (40-80 kbps) and there is a data cost per MB. For frequent data uploads, consider using WiFi (ESP32) at home or a 4G module for remote sites.
Frequently Asked Questions
Does SIM800L work with Jio SIM card?
No. Jio operates exclusively on 4G/VoLTE networks. The SIM800L is a 2G GSM module and cannot connect to Jio’s network. Use Airtel, Vi (Vodafone Idea), or BSNL SIM cards, which still maintain 2G network coverage across India. For Jio compatibility, use a 4G module like the SIM7600 or A7670E.
Why does my SIM800L keep restarting?
Insufficient power supply. The SIM800L draws up to 2A during transmission bursts. Connect a 3.7V LiPo battery or a 5V 2A adapter (for V2 version). Add a 1000 uF capacitor near the power pins.
What does the LED blinking pattern mean?
Blink every 1 second: searching for network. Blink every 2 seconds: connected to 2G data (GPRS). Blink every 3 seconds: registered on network, no data. Always on: module is off or not powered.
How much does it cost to send an SMS via SIM800L in India?
SMS costs depend on your mobile operator plan. Most prepaid plans in India include free SMS or charge ₹0.50-1.00 per SMS. For bulk IoT SMS, consider an Airtel Machine-to-Machine (M2M) SIM plan.
Can I receive SMS and trigger actions on Arduino?
Yes. Use the AT+CNMI=2,2,0,0,0 command to forward incoming SMS directly to the serial port. Parse the SMS text in your Arduino code to trigger relays, motors, or other actuators remotely.
Conclusion
The SIM800L GSM module transforms your Arduino into a connected IoT device with the ability to send SMS alerts, make voice calls, and transmit data over GPRS — all using an ordinary Indian SIM card. The key to success is providing a clean, high-current power supply. Start with the V2 version for easier setup, and always use Airtel, Vi, or BSNL SIM cards for 2G compatibility.
Browse our complete range of GSM and cellular modules at Zbotic.in, from the affordable SIM800L to advanced 4G LTE modules for high-speed IoT connectivity.
Add comment