Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Notes: For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.
I’ve been designing PCBs for IoT applications for over a decade, and the SIM800L Arduino combination remains one of my go-to solutions for projects requiring cellular connectivity. Whether you need remote monitoring, SMS alerts, or voice call capabilities in areas without WiFi, this compact GSM module delivers reliable performance at a fraction of the cost of other cellular solutions.
In this hands-on tutorial, I’ll walk you through everything from wiring your SIM800L to Arduino to sending your first SMS and making calls. You’ll learn the critical power supply considerations that trip up most beginners, essential AT commands, and troubleshooting techniques I’ve refined through countless projects.
What is the SIM800L GSM Module?
The SIM800L is a miniature quad-band GSM/GPRS module manufactured by SIMCom. At just 15.8mm × 17.8mm × 2.4mm, this chip packs serious functionality into a tiny footprint. The module connects your microcontroller to cellular networks, enabling SMS messaging, voice calls, and GPRS data transmission.
What makes the SIM800L Arduino pairing so popular among hobbyists and professionals alike is the module’s versatility. You get nearly all the capabilities of a mobile phone in a component that costs less than a few cups of coffee.
SIM800L Module Key Features
The SIM800L operates on quad-band frequencies (850/900/1800/1900MHz), making it compatible with GSM networks worldwide. The module communicates via UART serial interface using AT commands, which simplifies integration with virtually any microcontroller.
Here’s what the module brings to your projects:
SMS text messaging (send and receive)
Voice calls with external speaker and microphone support
GPRS data connectivity for internet access
Built-in TCP/IP stack for web communications
Automatic baud rate detection (1200 to 115200 bps)
Low power sleep mode drawing less than 2mA
SIM800L Arduino Technical Specifications
Before connecting your SIM800L to Arduino, understanding the specifications prevents damage and ensures reliable operation.
Parameter
Specification
Operating Voltage
3.4V to 4.4V (4.0V recommended)
Peak Current Consumption
Up to 2A during transmission
Idle Current
~7mA
Sleep Mode Current
< 2mA
Frequency Bands
Quad-band: 850/900/1800/1900 MHz
GPRS Class
Multi-slot Class 12
Communication Protocol
UART (AT Commands)
Operating Temperature
-40°C to +85°C
Module Dimensions
15.8mm × 17.8mm × 2.4mm
SIM Card Type
Micro-SIM
Antenna Connector
U.FL and NET pad for helical antenna
SIM800L Module Pinout Explained
Understanding each pin’s function is essential for proper SIM800L Arduino wiring. The module typically has 12 pins, though breakout boards may vary.
Pin Name
Function
Description
VCC
Power Supply
3.4V-4.4V input (NOT 5V directly!)
GND
Ground
Connect to Arduino GND
TXD
Transmit Data
Serial data output to Arduino RX
RXD
Receive Data
Serial data input from Arduino TX
RST
Reset
Pull LOW for 100ms for hard reset
NET
Antenna
Solder helical antenna here
RING
Ring Indicator
Goes LOW on incoming call/SMS
DTR
Data Terminal Ready
Controls sleep mode
MIC+ / MIC-
Microphone
Differential microphone input
SPK+ / SPK-
Speaker
Differential speaker output
Understanding the LED Indicator
The SIM800L has a status LED that tells you exactly what’s happening. I always check this first when debugging:
LED Blink Pattern
Module Status
Fast blink (1 second interval)
Searching for network
Slow blink (3 second interval)
Registered on network, ready
Always ON
GPRS communication active
OFF
No power or module fault
Essential Components for SIM800L Arduino Projects
Before wiring anything, gather these components. Skimping on the power supply is the number one cause of failed SIM800L projects I’ve seen.
Component
Purpose
Notes
SIM800L GSM Module
Cellular connectivity
Get one with antenna included
Arduino Uno/Nano
Microcontroller
Any 5V Arduino works
DC-DC Buck Converter (LM2596)
Voltage regulation
Must output 2A minimum
2G-compatible SIM Card
Network access
Remove PIN lock first
1000µF Electrolytic Capacitor
Power stability
Crucial for current spikes
10kΩ Resistors (3x)
Voltage divider
For RX level shifting
Jumper Wires
Connections
Use thick gauge for power
External Antenna
Better signal
IPX type for improved range
SIM800L Arduino Wiring Diagram
Getting the wiring right is critical. The SIM800L operates at 3.3V logic levels, while most Arduino boards use 5V logic. Sending 5V signals directly to the module’s RX pin can damage it permanently.
Power Supply Connection
Never power the SIM800L from Arduino’s 3.3V or 5V pins directly. The module needs 3.4-4.4V at up to 2A during transmission bursts. Here’s the proper setup:
Connect your 9V or 12V adapter to the LM2596 buck converter input
Adjust the converter output to exactly 4.0V using a multimeter
Connect the converter output to SIM800L VCC
Add a 1000µF capacitor between VCC and GND, close to the module
Signal Connections
For the serial communication between SIM800L and Arduino:
SIM800L Pin
Arduino Pin
Notes
TXD
Pin 2 (Software Serial RX)
Direct connection OK
RXD
Pin 3 via voltage divider
Use 10kΩ/20kΩ divider
GND
GND
Common ground essential
RST
Pin 4 (optional)
For hardware reset
The voltage divider for RX uses two 10kΩ resistors in series from Arduino Pin 3 to GND, with the SIM800L RXD connected to the junction. This drops 5V to approximately 2.5V, safe for the module.
Testing SIM800L with AT Commands
Before writing complex code, always test basic communication using AT commands. This confirms your wiring and module are functioning correctly.
Basic AT Command Test Code
Upload this sketch to your Arduino to establish a serial passthrough between your computer and the SIM800L:
#include <SoftwareSerial.h>
// SIM800L TX to Arduino Pin 2 (RX)
// SIM800L RX to Arduino Pin 3 (TX) via voltage divider
SoftwareSerial sim800l(2, 3);
void setup() {
Serial.begin(9600);
sim800l.begin(9600);
Serial.println(“SIM800L Arduino Test – Type AT commands”);
delay(1000);
}
void loop() {
// Forward data from Serial Monitor to SIM800L
if (Serial.available()) {
sim800l.write(Serial.read());
}
// Forward data from SIM800L to Serial Monitor
if (sim800l.available()) {
Serial.write(sim800l.read());
}
}
Open the Serial Monitor at 9600 baud with “Both NL & CR” line ending. Type AT and press Enter. You should receive OK back from the module.
Essential AT Commands Reference
Mastering these commands will get you through most SIM800L Arduino projects:
AT Command
Function
Expected Response
AT
Test communication
OK
AT+CSQ
Check signal strength (0-31, 31 best)
+CSQ: xx,xx
AT+CCID
Read SIM card number
20-digit ICCID
AT+CREG?
Network registration status
+CREG: 0,1 (registered)
AT+COPS?
Current network operator
Operator name
AT+CMGF=1
Set SMS text mode
OK
AT+CMGS=”phone_number”
Send SMS
> prompt
AT+CMGR=1
Read SMS at index 1
Message content
ATD+phone_number;
Make voice call
OK
ATH
Hang up call
OK
AT+CLIP=1
Enable caller ID
OK
How to Send SMS with SIM800L and Arduino
Sending text messages is one of the most common SIM800L Arduino applications. This code sends an SMS when you press a button or at startup.
Arduino Code for Sending SMS
#include <SoftwareSerial.h>
SoftwareSerial sim800l(2, 3);
void setup() {
Serial.begin(9600);
sim800l.begin(9600);
delay(3000); // Wait for module to initialize
Serial.println(“Initializing SIM800L…”);
sendCommand(“AT”, 1000);
sendCommand(“AT+CMGF=1”, 1000); // Text mode
// Send SMS
sendSMS(“+1234567890”, “Hello from Arduino and SIM800L!”);
Replace +1234567890 with the recipient’s phone number including country code.
How to Receive SMS with SIM800L Arduino
Receiving and processing incoming SMS opens up remote control possibilities for your projects.
Arduino Code for Receiving SMS
#include <SoftwareSerial.h>
SoftwareSerial sim800l(2, 3);
String incomingData = “”;
void setup() {
Serial.begin(9600);
sim800l.begin(9600);
delay(3000);
Serial.println(“Configuring SIM800L for SMS reception…”);
sendCommand(“AT”, 1000);
sendCommand(“AT+CMGF=1”, 1000);
sendCommand(“AT+CNMI=1,2,0,0,0”, 1000); // Forward SMS to serial
Serial.println(“Ready to receive SMS”);
}
void loop() {
while (sim800l.available()) {
char c = sim800l.read();
incomingData += c;
// Check if complete message received
if (incomingData.indexOf(“OK”) > 0 || incomingData.indexOf(“ERROR”) > 0) {
processMessage(incomingData);
incomingData = “”;
}
}
}
void processMessage(String data) {
Serial.println(“Received: ” + data);
// Check for specific commands in SMS
if (data.indexOf(“LED ON”) > 0) {
digitalWrite(13, HIGH);
Serial.println(“LED turned ON”);
}
else if (data.indexOf(“LED OFF”) > 0) {
digitalWrite(13, LOW);
Serial.println(“LED turned OFF”);
}
}
void sendCommand(String command, int timeout) {
sim800l.println(command);
delay(timeout);
while (sim800l.available()) {
Serial.write(sim800l.read());
}
}
Making Voice Calls with SIM800L and Arduino
Adding voice call functionality requires a speaker and microphone connected to the module’s audio pins.
Arduino Code for Making Calls
#include <SoftwareSerial.h>
SoftwareSerial sim800l(2, 3);
void setup() {
Serial.begin(9600);
sim800l.begin(9600);
delay(3000);
Serial.println(“Dialing…”);
makeCall(“+1234567890”);
}
void loop() {
updateSerial();
}
void makeCall(String phoneNumber) {
sim800l.print(“ATD”);
sim800l.print(phoneNumber);
sim800l.println(“;”);
delay(20000); // 20 second call duration
sim800l.println(“ATH”); // Hang up
Serial.println(“Call ended”);
}
void updateSerial() {
while (Serial.available()) {
sim800l.write(Serial.read());
}
while (sim800l.available()) {
Serial.write(sim800l.read());
}
}
Receiving Incoming Calls
To answer incoming calls and enable caller ID:
void setup() {
// … initialization code …
sendCommand(“AT+CLIP=1”, 1000); // Enable caller ID
}
void loop() {
if (sim800l.available()) {
String response = sim800l.readString();
if (response.indexOf(“RING”) > 0) {
Serial.println(“Incoming call!”);
delay(2000);
sim800l.println(“ATA”); // Answer call
}
}
}
SIM800L Arduino Troubleshooting Guide
After helping dozens of makers debug their SIM800L projects, here are the issues I encounter most frequently.
Problem: Module Keeps Restarting
Symptoms: LED blinks rapidly, then goes off, and the cycle repeats.
Solution: This is almost always a power supply issue. The SIM800L draws up to 2A during transmission bursts. Your power supply cannot keep up. Add a 1000µF or larger electrolytic capacitor directly across VCC and GND of the module. Use shorter, thicker wires for power connections. Ensure your buck converter is rated for at least 2A output.
Problem: LED Blinks Every Second (Not Connecting to Network)
Symptoms: The status LED blinks at 1-second intervals indefinitely.
Solutions:
Verify your SIM card is 2G compatible (SIM800L does NOT support 3G/4G)
Check if 2G GSM service is available in your area
Ensure the SIM card PIN is disabled
Confirm the antenna is properly connected
Try moving to a location with better signal
Problem: AT Commands Not Responding
Symptoms: Typing AT commands returns nothing or garbage characters.
Solutions:
Verify TX/RX connections (should be crossed: module TX to Arduino RX)
Check baud rate matches between code and module (try 9600 first)
Ensure common ground connection between Arduino and SIM800L
Verify the voltage divider on the RX line is working
Problem: SMS Not Sending
Symptoms: Module connects but SMS fails to send.
Solutions:
Check if SIM card has SMS credit/balance
Verify phone number format includes country code (+1, +44, etc.)
Ensure AT+CMGF=1 is sent before attempting SMS
Check network signal strength with AT+CSQ (needs at least 10)
Real-World SIM800L Arduino Project Applications
The SIM800L Arduino combination enables countless practical applications:
Home Automation Systems: Control lights, appliances, and security systems via SMS from anywhere. No internet connection required at the installation site.
Vehicle GPS Tracking: Combine with a GPS module to create a tracker that sends location coordinates via SMS when requested or at regular intervals.
Remote Sensor Monitoring: Agricultural applications like soil moisture monitoring, temperature logging, and water level alerts in locations without WiFi coverage.
Emergency Alert Systems: Automated calling or SMS alerts for security breaches, fire detection, or medical emergencies.
Industrial Monitoring: Machine status updates, production line alerts, and equipment failure notifications sent directly to maintenance personnel.
SIM800L Libraries for Arduino
While AT commands work perfectly, libraries can simplify development:
Library Name
Features
GitHub Link
TinyGSM
Universal library, supports HTTP/MQTT
github.com/vshymanskyy/TinyGSM
Adafruit FONA
Well-documented, good for beginners
github.com/adafruit/Adafruit_FONA
SIM800L Library
Lightweight, basic functions
github.com/ostaquet/Arduino-SIM800L-driver
Useful Resources and Downloads
Here are essential resources for your SIM800L Arduino projects:
Full AT Command Reference: cdn-shop.adafruit.com/datasheets
Community Resources:
Arduino Forum GSM Section: forum.arduino.cc
Last Minute Engineers SIM800L Tutorial: lastminuteengineers.com
Tools:
Online Voltage Divider Calculator: ohmslawcalculator.com
UART Terminal for Testing: realterm.sourceforge.net
Frequently Asked Questions
Does SIM800L support 4G or 5G networks?
No, the SIM800L is a 2G-only module operating on GSM networks. It does not support 3G, 4G LTE, or 5G. If you need newer network compatibility, consider modules like SIM7600 or A7670 which support LTE.
Can I power SIM800L directly from Arduino’s 5V pin?
Technically some Arduino boards can provide enough current, but I strongly advise against it. The module needs up to 2A during transmission, which exceeds what most Arduino voltage regulators can supply. Always use a dedicated power supply with a buck converter set to 4.0V.
Why does my SIM800L restart when sending SMS or making calls?
This classic symptom indicates insufficient power supply current. During transmission, the module draws up to 2A in short bursts. Add a large capacitor (1000µF minimum) close to the module’s power pins and ensure your power supply is rated for at least 2A output.
What SIM card does SIM800L need?
The SIM800L requires a micro-SIM card activated on a 2G GSM network. Before inserting, disable the PIN lock using a regular phone. In some countries, 2G networks are being phased out, so verify 2G availability with your carrier.
How do I improve SIM800L signal strength?
Start by using the included helical antenna soldered properly to the NET pad. For better reception, use an external antenna via the U.FL connector with a longer cable to position it in an optimal location. Avoid placing the antenna near other electronics or metal enclosures that could shield the signal.
Conclusion
The SIM800L Arduino combination opens up a world of cellular-connected projects without requiring WiFi infrastructure. From the critical power supply setup to sending your first SMS, you now have the knowledge to build reliable GSM applications.
Remember these key points: always use a dedicated 4V/2A power supply with decoupling capacitors, implement proper voltage level shifting for the RX line, and verify your SIM card works on a 2G network before troubleshooting software issues.
Start with the basic AT command test sketch to confirm communication, then progress to SMS and call functionality. Once comfortable with the fundamentals, explore the libraries mentioned above to accelerate your project development.
The skills you’ve learned here apply to more advanced cellular modules too, making this an excellent foundation for IoT development. Now get building, and don’t hesitate to experiment with different applications for your SIM800L Arduino setup!
Inquire: Call 0086-755-23203480, or reach out via the form below/your sales contact to discuss our design, manufacturing, and assembly capabilities.
Quote: Email your PCB files to Sales@pcbsync.com (Preferred for large files) or submit online. We will contact you promptly. Please ensure your email is correct.
Notes: For PCB fabrication, we require PCB design file in Gerber RS-274X format (most preferred), *.PCB/DDB (Protel, inform your program version) format or *.BRD (Eagle) format. For PCB assembly, we require PCB design file in above mentioned format, drilling file and BOM. Click to download BOM template To avoid file missing, please include all files into one folder and compress it into .zip or .rar format.