Contact Sales & After-Sales Service

Contact & Quotation

  • 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.
Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

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.

SIM800L Arduino: GSM Module SMS & Calls Tutorial (Complete Guide 2025)

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.

ParameterSpecification
Operating Voltage3.4V to 4.4V (4.0V recommended)
Peak Current ConsumptionUp to 2A during transmission
Idle Current~7mA
Sleep Mode Current< 2mA
Frequency BandsQuad-band: 850/900/1800/1900 MHz
GPRS ClassMulti-slot Class 12
Communication ProtocolUART (AT Commands)
Operating Temperature-40°C to +85°C
Module Dimensions15.8mm × 17.8mm × 2.4mm
SIM Card TypeMicro-SIM
Antenna ConnectorU.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 NameFunctionDescription
VCCPower Supply3.4V-4.4V input (NOT 5V directly!)
GNDGroundConnect to Arduino GND
TXDTransmit DataSerial data output to Arduino RX
RXDReceive DataSerial data input from Arduino TX
RSTResetPull LOW for 100ms for hard reset
NETAntennaSolder helical antenna here
RINGRing IndicatorGoes LOW on incoming call/SMS
DTRData Terminal ReadyControls sleep mode
MIC+ / MIC-MicrophoneDifferential microphone input
SPK+ / SPK-SpeakerDifferential 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 PatternModule Status
Fast blink (1 second interval)Searching for network
Slow blink (3 second interval)Registered on network, ready
Always ONGPRS communication active
OFFNo 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.

ComponentPurposeNotes
SIM800L GSM ModuleCellular connectivityGet one with antenna included
Arduino Uno/NanoMicrocontrollerAny 5V Arduino works
DC-DC Buck Converter (LM2596)Voltage regulationMust output 2A minimum
2G-compatible SIM CardNetwork accessRemove PIN lock first
1000µF Electrolytic CapacitorPower stabilityCrucial for current spikes
10kΩ Resistors (3x)Voltage dividerFor RX level shifting
Jumper WiresConnectionsUse thick gauge for power
External AntennaBetter signalIPX 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:

  1. Connect your 9V or 12V adapter to the LM2596 buck converter input
  2. Adjust the converter output to exactly 4.0V using a multimeter
  3. Connect the converter output to SIM800L VCC
  4. Add a 1000µF capacitor between VCC and GND, close to the module

Signal Connections

For the serial communication between SIM800L and Arduino:

SIM800L PinArduino PinNotes
TXDPin 2 (Software Serial RX)Direct connection OK
RXDPin 3 via voltage dividerUse 10kΩ/20kΩ divider
GNDGNDCommon ground essential
RSTPin 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 CommandFunctionExpected Response
ATTest communicationOK
AT+CSQCheck signal strength (0-31, 31 best)+CSQ: xx,xx
AT+CCIDRead SIM card number20-digit ICCID
AT+CREG?Network registration status+CREG: 0,1 (registered)
AT+COPS?Current network operatorOperator name
AT+CMGF=1Set SMS text modeOK
AT+CMGS=”phone_number”Send SMS> prompt
AT+CMGR=1Read SMS at index 1Message content
ATD+phone_number;Make voice callOK
ATHHang up callOK
AT+CLIP=1Enable caller IDOK

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!”);

}

void loop() {

  // Your main code here

}

void sendSMS(String phoneNumber, String message) {

  Serial.println(“Sending SMS…”);

  sim800l.print(“AT+CMGS=\””);

  sim800l.print(phoneNumber);

  sim800l.println(“\””);

  delay(1000);

  sim800l.print(message);

  delay(100);

  sim800l.write(26); // Ctrl+Z to send

  delay(5000);

  Serial.println(“SMS Sent!”);

}

void sendCommand(String command, int timeout) {

  sim800l.println(command);

  long int time = millis();

  while ((time + timeout) > millis()) {

    while (sim800l.available()) {

      char c = sim800l.read();

      Serial.print(c);

    }

  }

  Serial.println();

}

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 NameFeaturesGitHub Link
TinyGSMUniversal library, supports HTTP/MQTTgithub.com/vshymanskyy/TinyGSM
Adafruit FONAWell-documented, good for beginnersgithub.com/adafruit/Adafruit_FONA
SIM800L LibraryLightweight, basic functionsgithub.com/ostaquet/Arduino-SIM800L-driver

Useful Resources and Downloads

Here are essential resources for your SIM800L Arduino projects:

Official Documentation:

  • SIM800L Hardware Design Guide: simcom.com/documents
  • SIM800 Series AT Command Manual V1.11: waveshare.com/wiki

Datasheets:

  • SIM800L Datasheet (PDF): components101.com/wireless/sim800l-gsm-module
  • 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!

Leave a Reply

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

Contact Sales & After-Sales Service

Contact & Quotation

  • 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.

Drag & Drop Files, Choose Files to Upload You can upload up to 3 files.

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.