This post is a complete guide to the SIM900 GSM GPRS board with the Arduino board. Learn how to send and receive SMS and how to make and receive phone calls with Arduino board.
Tag: Project 501 SIM900 GSM GPRS board with Arduino
Dear visitors. You can support our project buy clicking on the links of parts and buying them or donate us to keep this website alive. Thank you. Acoptex.com
Project resources
- Libraries: SoftwareSerial library included in Arduino IDE. The library has the following known limitations:If using multiple software serial ports, only one can receive data at a time.Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).Not all pins on the Leonardo and Micro support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).On Arduino or Genuino 101 the current maximum RX speed is 57600bpsOn Arduino or Genuino 101 RX doesn’t work on Pin 13 The library has the following known limitations: If using multiple software serial ports, only one can receive data at a time;Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69);Not all pins on the Leonardo and Micro support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI);On Arduino or Genuino 101 the current maximum RX speed is 57600bps; On Arduino or Genuino 101 RX doesn’t work on Pin 13. You can read about it here.
- Code: ATcommandssketch; SendingSMSsketch, ReadingSMSsketch, MakingCallsketch, AnsweringCallSketch, AllinOnesketch
- Datasheets: SIM900
- Other: Fritzing drawings and views.
Parts required
1. SIM900A GSM GPRS mini module 1 pc

2. Arduino Nano Rev3 1pc

3. Breadboard 1 pc

4. Mini-B USB cable 1 pc

5. Jumper cables F-M, M-M

6. Arduino IDE (you can download it here)
7. USB to TTL/Serial adaptor/converter 1 pc

8. To power SIM900 GSM GPRS board: 5V DC 1A power adapter or Li-Ion battery 3.7VDC
9. Standard SIM card (2G) 1pc

10. SIM card size adapter (optional) 1 pc

Understanding the USB to TTL converter
You can read more about it here.
Understanding the SIM900 GSM GPRS board

Designed for global market, SIM900A is a dual-band GSM/GPRS engine that works on frequencies EGSM 900MHz and DCS 1800MHz. SIM900A features GPRS multi-slot class 10/ class 8 (optional) and supports the GPRS coding schemes CS-1, CS-2, CS-3 and CS-4. With a tiny configuration of 24mm x 24mm x 3mm, SIM900A can meet almost all the space requirements in your
applications, such as M2M, smart phone, PDA and other mobile devices.
The physical interface to the mobile application is a 68-pin SMT pad, which provides all hardware interfaces between the module and customers’ boards.
- The keypad and SPI display interface will give you the flexibility to develop customized applications.
- Serial port and Debug port can help you easily develop your applications.
- One audio channel includes a microphone input and a speaker output.
- Programmable General Purpose Input & Output.
The SIM900A is designed with power saving technique so that the current consumption is as low as 1.5mA in SLEEP mode. The SIM900A is integrated with the TCP/IP protocol; extended TCP/IP AT commands are developed for
customers to use the TCP/IP protocol easily, which is very useful for those data transfer applications.
SIM900A module allows users to send/receive data over GPRS, send/receive SMS and make/receive voice calls. SIM900A support 2G networks. It will not be able to connect to a 3G and 4G network. If you have 2G network and this module does’t work in your country you will need to flash SIM900 firmware on it. We will explain how to do it in next article.
The GSM/GPRS module uses USART communication to communicate with microcontroller or PC terminal. AT commands are used to configure the module in different modes and to perform various functions like calling, posting data to a site, etc.
The power supply of SIM900A is from a single voltage source of 3.4V…4.5V. In some case, the ripple in a transmitting burst may cause voltage drops when current consumption rises to typical peaks of 2A. So the power
supply must be able to provide sufficient current up to 2A. SIM900A module can be powered up with Arduino Nano 5V pin but for longer run it is advised to use separate power supply of at least 1A.

Key features:
Temperature range | Normal operation: -30°C to +80°C Restricted operation: -40°C to -30°C and +80 °C to +85°C(1) Storage temperature -45°C to +90°C |
DATA GPRS: CSD: | GPRS data downlink transfer: max. 85.6 kbps GPRS data uplink transfer: max. 42.8 kbps Coding scheme: CS-1, CS-2, CS-3 and CS-4 Supports the protocols PAP (Password Authentication Protocol) usually used for PPP connections. Integrates the TCP/IP protocol. Support Packet Switched Broadcast Control Channel (PBCCH) CSD transmission rates: 2.4, 4.8, 9.6, 14.4 kbps, non-transparent Unstructured Supplementary Services Data (USSD) support |
SMS | MT, MO, CB, Text and PDU mode SMS storage: SIM card |
FAX | Group 3 Class 1 |
SIM interface | Support SIM card: 1.8V, 3V |
External antenna | Antenna pad |
Audio features | Speech codec modes: Half Rate (ETS 06.20) Full Rate (ETS 06.10) Enhanced Full Rate (ETS 06.50 / 06.60 / 06.80) Adaptive multi rate (AMR) Echo Cancellation Noise Suppression |
Serial port and Debug port | Serial Port: 8-wire modem interface with status and control lines, unbalanced, asynchronous. 1.2kbps to 115.2kbps. Serial Port can be used for AT commands or data stream. Supports RTS/CTS hardware handshake and software ON/OFF flow control. Multiplex ability according to GSM 07.10 Multiplexer Protocol. Autobauding supports baud rate from 1200 bps to 115200bps. Debug port: 2-wire null modem interface DBG_TXD and DBG_RXD. Can be used for debugging and upgrading firmware. |
Phonebook management | Support phonebook types: SM, FD, LD, RC, ON, MC. |
SIM Application Toolkit | Support SAT class 3, GSM 11.14 Release 99 |
Real time clock | Implemented |
Timer function | Programmable via AT command |
Physical characteristics | Size: 24mm x 24mm x 3mm Weight: 3.4g |
Firmware upgrade | Firmware upgrade by debug port |
(1) The SIM900A does work, but deviations from the GSM specification may occur
Coding schemes and maximum net data rates over air interface:
Coding scheme | 1 Timeslot | 2 Timeslot | 4 Timeslot |
CS-1: | 9.05kbps | 18.1kbps | 36.2kbps |
CS-2: | 13.4kbps | 26.8kbps | 53.6kbps |
CS-3: | 15.6kbps | 31.2kbps | 62.4kbps |
CS-4: | 21.4kbps | 42.8kbps | 85.6kbps |
Functional Diagram:
The following figure shows a functional diagram of the SIM900A and illustrates the mainly functional parts: the GSM baseband engine, flash and SRAM, the GSM radio frequency part, the antenna interface, the Other interfaces.

Operating modes:
1.Normal operation
Mode | Function |
GSM/GPRS SLEEP | Module will automatically go into SLEEP mode if DTR is set to high level and there is no on air and no hardware interrupt (such as GPIO interrupt or data on serial port). In this case, the current consumption of module will reduce to the minimal level. In SLEEP mode, the module can still receive paging message and SMS from the system normally. |
GSM IDLE | Software is active. Module has registered to the GSM network, and the module is ready to send and receive. |
GSM TALK | Connection between two subscribers is in progress. In this case, the power consumption depends on network settings such as DTX off/on, FR/EFR/HR, hopping sequences, antenna. |
GPRS STANDBY | Module is ready for GPRS data transfer, but no data is currently sent or received. In this case, power consumption depends on network settings and GPRS configuration. |
GPRS DATA | There is GPRS data transfer (PPP or TCP or UDP) in progress. In this case, power consumption is related with network settings (e.g. power control level), uplink / downlink data rates and GPRS configuration (e.g. used multi-slot settings). |
2.POWER DOWN mode
Normal shutdown by sending the “AT+CPOWD=1” command or using the PWRKEY. The power management ASIC disconnects the power supply from the baseband part of the module, and only the power supply for the RTC is remained. Software is not active. The serial port is not accessible. Operating voltage (connected to VBAT) remains applied.
3. Minimum functionality mode (without remove power supply)
Use the “AT+CFUN” command can set the module to a minimum functionality mode without remove the power supply. In this case, the RF part of the module will not work or the SIM card will not be accessible, or both RF part and SIM card will be closed, and the serial port is still accessible. The power consumption in this case is very low.
Signals and connections of the USB to TTL converter
You can read more about it here.
Signals and connections of the SIM900 GSM GPRS board

SIM900 GSM GPRS board pinout
RS232 RXD | RS232 receive pin |
RS232 TXD | RS232 transmit pin |
5VT | 5V TXD transmit pin |
5VR | 5V RXD receive pin |
3VT | 3V3 TXD (SIMT) transmit pin |
3VR | 3V3 RXD (SIMR) receive pin |
GND | ground pin |
VCC | power supply 5V pin |
SIM900A chip pinout

- VBAT – 3 VBAT pins are dedicated to connect the supply voltage. The power supply of SIM900A has to be a single voltage source of VBAT= 3.4V…4.5V. It must be able to provide sufficient current in a transmit burst which is typically rises to 2A
- VRTC – Current input for RTC when the battery is not supplied for the system. Current output for backup battery when the main battery is present and the backup battery is in low voltage state. If the RTC function is enabled, a battery or capacitor should be connected with the VRTC pin. Otherwise the VRTC pin can be keep open.
- VDD_EXT – 2.8V output power supply. If unused, keep open.
- GND – Ground
- PWRKEY – Voltage input for PWRKEY. PWRKEY should be pulled low to power on or power off the system. The user should keep pressing the key for a short time when power on or power off the system because the system need margin time in order to assert the software. It is already pulled up.
- PWRKEY_OUT – Connecting PWRKEY and PWRKEY_OUT for a short time then release also can power on or power off the module.
- MIC_P MIC_N – Positive and negative voice band input. If unused keep open
- SPK_P SPK_N – Positive and negative voice band output
- LINEIN_R LINEIN_L – Line input
- DISP_DATA DISP _CLK DISP _CS DISP _D/C – Display interface. If unused keep open
- STATUS – Indicate working status. If unused keep open
- NETLIGHT – Indicate net status. If unused keep open
- SCL – I2C bus clock. If unused keep open
- SDA – I2C bus data. If unused keep open
- KBR0~KBR4 – Keypad interface. If unused keep these pins open
- KBC0~KBC4 – Keypad interface. Pull up to VDD_EXT, if unused keep pins open
- RXD – Receive data. DTR Pin has been pulled up to VDD_EXT. If unused keep pin open
- TXD – Transmit data
- RTS – Request to send
- CTS – Clear to send
- RI – Ring indicator
- DSR – Data Set Ready
- DCD – Data carry detect
- DTR – Data terminal Ready
- DBG_TXD – Serial interface for debugging and firmware upgrade. If unused keep pins open
- DBG_RXD – Serial interface for debugging and firmware upgrade. If unused keep pins open
- SIM_VDD – Voltage supply for SIM card. The voltage can be select by software automatically either 1.8V or 3V
- SIM_DATA – SIM data output. All signals of SIM interface are protected against ESD with a TVS diode array. Maximum cable length 200mm from the module pad to SIM card holder.
- SIM_CLK – SIM clock
- SIM_RST – SIM reset
- SIM_PRESENCE – SIM detect. If unused keep open
- ADC – General purpose analog to digital converter. If unused keep open. Input voltage range: 0V ~ 3V
- NRESET – External reset input (Active low). If unused keep open.
- PWM1 – PWM Output. If unused keep open.
- PWM2 – PWM Output. If unused keep open.
Wiring
1.Using Arduino board

2.Using USB to TTL converter

Step by step procedure
1. Configuring the SIM900A GSM GPRS board with Arduino board.

1. Insert standard Sim Card to Sim Card holder of SIM900A GSM GPRS mini board and lock it. Sim card must be unlocked and with credit.

2.Attach GSM/GPRS antenna to SMA connector of SIM900A GSM GPRS mini board.
3. Do wiring for using Arduino board. Connect the Arduino Nano to your PC with Mini-B USB cable.
4. Power up with 5V DC not more than 2A external power supply. The ‘status LED’ (D5) will be on.
5. Wait for some time (approx. 1 minute) and see the blinking rate of ‘network LED’ (D6). GSM module will use some time to establish connection with mobile network.
6. Once the connection is established successfully, the status/network LED will blink continuously every 3 seconds. You may try making a call to the mobile number of the sim card inside SIM900A GSM GPRS mini board. If you hear a ring back, the SIM900A GSM GPRS mini board has successfully established network connection.
7.Download the latest version of Arduino IDE for your system and install it in your PC.
8. Open Arduino IDE with ATcommandssketch .
9. Go to Tools->Board and select Arduino Nano.

10. Go to Tools-> Processor and select ATmega328P (from January 2018 sold NEW Arduino NANO boards). To program old boards you need to choose ATmega328P (Old Bootloader). If you get an error while uploading or you are not sure which bootloader you have, try each type of processor 328P until your board gets properly programmed.

11. Go to Tools->Port and select correct serial port. If you have an origianl Arduino Nano the driver for it will be installed automatically, if you have chineese Arduino Nano (non-original) if you can not see your board check the project here.

12. Compile and upload the ATcommandssketch to your Adruino Nano. To upload the sketch to the Arduino Nano, click the Upload button in the upper left to load and run the sketch on your board.
13. Open Serial monitor at 19200 bps and select Both NL&CR.

14. First you need to check if AT commands are working – enter “AT” and press Send button. This would print “OK” which signifies of working connection and operation of the module.
15. Enter “AT+GMI” and press Send button. Returns the Manufacturer Identification of the module: “SIMCOM_Ltd OK”
16. Enter “AT+GSN” and press Send button. Returns the TA Serial Number Identification (IMEI) of the module: “869988018731253 OK”
17. Enter “AT+GMM” and press Send button. Returns the TA Model Identification of the module: “SIMCOM_SIM900A OK”
18. Call Control Commands. If you call the cell number of Sim Card then message RING will be shown. 1) Answer a call. Enter “ATA” and press Send button; 2) Make a call. Enter number to call “ATDP+37163055289” and press Send button; 3) Disconnect existing call. Enter “ATH” and press Send button.
19. SMS Commands. Set the SIM900A to text mode: “AT+CMGF=1\r“. Send SMS to a number: “AT+CMGS=PHONE_NUMBER” (in international format). Read the first SMS from the inbox: “AT+CMGR=1\r“. Read the second SMS from the inbox: “AT+CMGR=2\r” . Read all SMS from the inbox: “AT+CMGR=ALL\r“.
20. Check the list of all AT commands here.

2. Configuring the SIM900A GSM GPRS board with USB to TTL converter

For using this USB to UART Converter you need a software tool. Most of the development tools like MikroC Pro, Arduino has a UART Tool along with it. You can use different software tools: Terminal, USR-TCP232-Test V1.4, AiThinker_Serial_Tool_V1.2.3, coolterm, sscom3.2 , KiTTY, putty,tera term, Access port and so on. We recommend you to use AiThinker_Serial_Tool_V1.2.3 or sscom3.2, as you can save your AT commands and it’s very easy to use.
1. Insert standard Sim Card to Sim Card holder of SIM900A GSM GPRS mini board and lock it. Sim card must be unlocked and with credit.

2.Attach GSM/GPRS antenna to SMA connector of SIM900A GSM GPRS mini board.
3. Do wiring for using USB to TTL converter.
4. Plug your USB to TTL converter into your PC USB port. The ‘status LED’ (D5) will be on.
5. Wait for some time (approx. 1 minute) and see the blinking rate of ‘network LED’ (D6). GSM module will use some time to establish connection with mobile network.
6. Once the connection is established successfully, the network LED will blink continuously every 3 seconds. You may try making a call to the mobile number of the sim card inside SIM900A GSM GPRS mini board. If you hear a ring back, the SIM900A GSM GPRS mini board has successfully established network connection.
7. Open AiThinker_Serial_Tool_V1.2.3 program. Set the baud rate 115200, data bits 8, parity bits none,stop bits one.
8. First you need to check if AT commands are working – enter “AT” and press Send button. This would print “OK” which signifies of working connection and operation of the module.
9. Enter “AT+GMI” and press Send button. Returns the Manufacturer Identification of the module: “SIMCOM_Ltd OK”
10. Enter “AT+GSN” and press Send button. Returns the TA Serial Number Identification (IMEI) of the module: “869988018731253 OK”
11. Enter “AT+GMM” and press Send button. Returns the TA Model Identification of the module: “SIMCOM_SIM900A OK”
12. Enter “AT+IPR=115200” and press Send button. The baud rate will be changed to 115200 bps.
12. Call Control Commands. If you call the cell number of Sim Card then message RING will be shown. 1) Answer a call. Enter “ATA” and press Send button; 2) Make a call. Enter number to call “ATDP+37163055289” and press Send button; 3) Disconnect existing call. Enter “ATH” and press Send button.
13. SMS Commands. Set the SIM900A to text mode: “AT+CMGF=1\r“. Send SMS to a number: “AT+CMGS=PHONE_NUMBER” (in international format). Read the first SMS from the inbox: “AT+CMGR=1\r“. Read the second SMS from the inbox: “AT+CMGR=2\r” . Read all SMS from the inbox: “AT+CMGR=ALL\r“.
14. Check the list of all AT commands here.

Wrapping up
We have learnt about SIM900A GSM GPRS module and how to use it with Arduino Nano and USB to TTL converter.
Thank you for reading!
Check for more DIY projects on Acoptex.lt and Acoptex.com!
If you are looking for high quality PCBs PCBWay is the best choice:

RELATED POSTS
Guide to LILYGO T-SIM7000G ESP32 development board -How to update a firmware
Guide to LILYGO T-SIM7000G ESP32 development board- AT communication
Arduino guide for microphone sound sensor