Click here to Skip to main content
11,431,844 members (63,803 online)
Click here to Skip to main content

Send and Read SMS through a GSM Modem using AT Commands

, 30 Aug 2010 CPOL
Rate this:
Please Sign up or sign in to vote.
In this article, you can send and read SMS through a GSM modem using AT commands and without using any third party library.

Introduction

There are many different kinds of applications SMS applications in the market today, and many others are being developed. Applications in which SMS messaging can be utilized are virtually unlimited. Some common examples of these are given below:

  • Person-to-person text messaging is the most commonly used SMS application, and it is what the SMS technology was originally designed for.
  • Many content providers make use of SMS text messages to send information such as news, weather report, and financial data to their subscribers.
  • SMS messages can carry binary data, and so SMS can be used as the transport medium of wireless downloads. Objects such as ringtones, wallpapers, pictures, and operator logos can be encoded in SMS messages.
  • SMS is a very suitable technology for delivering alerts and notifications of important events.
  • SMS messaging can be used as a marketing tool.

In general, there are two ways to send SMS messages from a computer / PC to a mobile phone:

  1. Connect a mobile phone or GSM/GPRS modem to a computer / PC. Then use the computer / PC and AT commands to instruct the mobile phone or GSM/GPRS modem to send SMS messages.
  2. Connect the computer / PC to the SMS center (SMSC) or SMS gateway of a wireless carrier or SMS service provider. Then send SMS messages using a protocol / interface supported by the SMSC or SMS gateway.

In this article, I will explain the first way to send, read, and delete SMS using AT commands. But before starting, I would like to explain a little bit about AT commands.

AT Commands

AT commands are instructions used to control a modem. AT is the abbreviation of ATtention. Every command line starts with "AT" or "at". That's why modem commands are called AT commands. There are two types of AT commands:

  1. Basic commands are AT commands that do not start with a "+". For example, D (Dial), A (Answer), H (Hook control), and O (Return to online data state) are the basic commands.
  2. Extended commands are AT commands that start with a "+". All GSM AT commands are extended commands. For example, +CMGS (Send SMS message), +CMGL (List SMS messages), and +CMGR (Read SMS messages) are extended commands.

If you want to get more information about AT commands, then you can get it on my other article on CodeProject here: http://www.codeproject.com/KB/system/IntroductiontoATcommands.aspx.

Operating Modes

The SMS specification has defined two modes in which a GSM/GPRS modem or mobile phone can operate. They are called SMS text mode and SMS PDU mode. (PDU stands for Protocol Data Unit.) The mode that a GSM/GPRS modem or mobile phone is operating in determines the syntax of some SMS AT commands and the format of the responses returned after execution.

I am using SMS text mode in this article.

How to Test GSM Modem Connectivity Using Hyper Terminal

  • First, find the best GSM modem that suits the needs. I tested this application with a Wavecom FASTRACK M1206.
  • Understand the AT Command set required to communicate with the modem.
  • Connect the modem to the computer according to the setup guide specified in the manual provided with the GSM modem.
  • Put a valid SIM card into the mobile phone or GSM/GPRS modem.
  • Connect your mobile phone or GSM/GPRS modem to a computer, and set up the corresponding wireless modem driver.
  • Run the MS HyperTerminal by selecting Start -> Programs -> Accessories -> Communications -> HyperTerminal.
  • In the Connection Description dialog box, enter a name and choose an icon you like for the connection. Then click the OK button.
  • In the Connect To dialog box, choose the COM port that your mobile phone or GSM/GPRS modem is connecting to in the Connect using combo box. For example, choose COM1 if your mobile phone or GSM/GPRS modem is connecting to the COM1 port. Then click the OK button.
  • The Properties dialog box comes out. Enter the correct port settings for your mobile phone or GSM/GPRS modem. Then click the OK button.
  • To find the correct port settings that should be used with your mobile phone or GSM/GPRS modem, consult the manual of your mobile phone or GSM/GPRS modem.
  • Type "AT" in the main window. A response "OK" should be returned from the mobile phone or GSM/GPRS modem.
  • If “OK” returns, it means your mobile phone or GSM/GPRS modem is connected successfully.

After successful connection of the GSM /GPRS modem with PC, you are ready to run this application. Download the attached project and run the application.

Sending SMS through GSM Modem using AT Commands

Port Settings

In this tab, you will have to do port settings which will be the same as you did in the hyper terminal and then click the OK button. If the modem is connected successfully, a message box will appear with the message “Modem is connected”.

public SerialPort OpenPort(string p_strPortName,
       int p_uBaudRate, int p_uDataBits, 
       int p_uReadTimeout, int p_uWriteTimeout)
{
    receiveNow = new AutoResetEvent(false);
    SerialPort port = new SerialPort();

    try
    {
        port.PortName = p_strPortName;                 //COM1
        port.BaudRate = p_uBaudRate;                   //9600
        port.DataBits = p_uDataBits;                   //8
        port.StopBits = StopBits.One;                  //1
        port.Parity = Parity.None;                     //None
        port.ReadTimeout = p_uReadTimeout;             //300
        port.WriteTimeout = p_uWriteTimeout;           //300
        port.Encoding = Encoding.GetEncoding("iso-8859-1");
        port.DataReceived += new SerialDataReceivedEventHandler
                (port_DataReceived);
        port.Open();
        port.DtrEnable = true;
        port.RtsEnable = true;
    }
    catch (Exception ex)
    {
        throw ex;
    }
    return port;
}

Send SMS

In the second tab, you can send SMS:

public bool sendMsg(SerialPort port, string PhoneNo, string Message)
{
    bool isSend = false;

    try
    {
        string recievedData = ExecCommand(port,"AT", 300, "No phone connected");
        recievedData = ExecCommand(port,"AT+CMGF=1", 300,
            "Failed to set message format.");
        String command = "AT+CMGS=\"" + PhoneNo + "\"";
        recievedData = ExecCommand(port,command, 300,
            "Failed to accept phoneNo");
        command = Message + char.ConvertFromUtf32(26) + "\r";
        recievedData = ExecCommand(port,command, 3000,
            "Failed to send message"); //3 seconds
        if (recievedData.EndsWith("\r\nOK\r\n"))
        {
            isSend = true;
        }
        else if (recievedData.Contains("ERROR"))
        {
            isSend = false;
        }
        return isSend;
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

Read SMS

In the third tab, you can read SMS:

public ShortMessageCollection ReadSMS(SerialPort port)
{
    // Set up the phone and read the messages
    ShortMessageCollection messages = null;
    try
    {
        #region Execute Command
        // Check connection
        ExecCommand(port,"AT", 300, "No phone connected");
        // Use message format "Text mode"
        ExecCommand(port,"AT+CMGF=1", 300, "Failed to set message format.");
        // Use character set "PCCP437"
        ExecCommand(port,"AT+CSCS=\"PCCP437\"", 300,
        "Failed to set character set.");
        // Select SIM storage
        ExecCommand(port,"AT+CPMS=\"SM\"", 300,
        "Failed to select message storage.");
        // Read the messages
        string input = ExecCommand(port,"AT+CMGL=\"ALL\"", 5000,
            "Failed to read the messages.");
        #endregion

        #region Parse messages
        messages = ParseMessages(input);
        #endregion
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }

    if (messages != null)
        return messages;
    else
        return null;
}

Delete SMS

In the fourth and last tab, you can count the number of SMS and delete SMS as well.

public bool DeleteMsg(SerialPort port , string p_strCommand)
{
    bool isDeleted = false;
    try
    {
        #region Execute Command
        string recievedData = ExecCommand(port,"AT", 300, "No phone connected");
        recievedData = ExecCommand(port,"AT+CMGF=1", 300,
            "Failed to set message format.");
        String command = p_strCommand;
        recievedData = ExecCommand(port,command, 300, "Failed to delete message");
        #endregion

        if (recievedData.EndsWith("\r\nOK\r\n"))
        {
            isDeleted = true;
        }
        if (recievedData.Contains("ERROR"))
        {
            isDeleted = false;
        }
        return isDeleted;
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
}

Points of Interest

I'm not using any third party library or anything else in this project.

History

  • 4th August, 2009: Initial post.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Syeda Anila Nusrat
Software Developer
Pakistan Pakistan
Name: Syeda Anila Nusrat

Education:-
National University of Computer and Emerging Sciences
MS (Computer Science) 2010–2012
Federal Urdu University of Arts, Science and Technology
BS (Computer Science) 2004–2007

Professional Experience:-
Software Engineer at Systems Pvt Ltd (Nov 2010-Mar 2011)
Software Engineer at Syndustria Pvt Ltd (Jun2008-Feb2010)
Software Engineer(internee) at yEvolve Pvt Ltd (Feb2008-Apr 2008)

Specialties:-
IDE: Ms Visual Studio 2005 and 2008
Programming Languages: C++.NET, C#.NET, VB.NET, ADO.NET
Web Technologies: ASP.NET, AJAX, Html, CSS, Java Scripting
Databases: SQL Server 2000, SQL Server 2005
Programming Methodologies: Multithreading and DLLs
Scheduling and Modeling tools: Ms-Project 2000, MS Visio, Rational Rose

Honors and Awards:-
Received Merit Certificate for scoring 3.81 CGPA on scale of 4.0 in BS(CS)

My professional Network
http://pk.linkedin.com/in/syedaanila

Comments and Discussions

 
Questionutf8 for sms? [modified] Pin
amin6924-Jul-14 5:20
memberamin6924-Jul-14 5:20 
AnswerRe: utf8 for sms? Pin
Member 828399726-Sep-14 0:07
memberMember 828399726-Sep-14 0:07 
GeneralRe: utf8 for sms? Pin
amin6927-Sep-14 4:45
memberamin6927-Sep-14 4:45 
QuestionThis topic is under plagiarism and this is the original projects Pin
ian123334-Jul-14 18:29
memberian123334-Jul-14 18:29 
QuestionTP-LINK 3G USB Adapter Pin
Member 1051252829-May-14 20:58
memberMember 1051252829-May-14 20:58 
QuestionA Question. Pin
4d.kh4n9-May-14 4:16
member4d.kh4n9-May-14 4:16 
AnswerUnable to Read SMS Pin
NeillJam9-May-14 2:10
memberNeillJam9-May-14 2:10 
GeneralRe: Unable to Read SMS [modified] Pin
ian123334-Jul-14 21:04
memberian123334-Jul-14 21:04 
QuestionSending SMS Pin
nemezis222-Apr-14 2:58
membernemezis222-Apr-14 2:58 
Newssupply gsm sms modem Pin
Member 1075791617-Apr-14 22:41
memberMember 1075791617-Apr-14 22:41 
QuestionNo SMS In Sim Pin
Toufiq Akbar7-Apr-14 21:12
memberToufiq Akbar7-Apr-14 21:12 
AnswerRe: No SMS In Sim [modified] Pin
ian123334-Jul-14 21:05
memberian123334-Jul-14 21:05 
QuestionConnected Successfully but Whene send SMS shows me "Message: The write timed out" [modified] Pin
Pritesh Aryan28-Mar-14 18:35
memberPritesh Aryan28-Mar-14 18:35 
AnswerRe: Connected Successfully but Whene send SMS shows me "Message: The write timed out" Pin
Pritesh Aryan28-Mar-14 18:49
memberPritesh Aryan28-Mar-14 18:49 
QuestionGSM DONGLE.."Response Received is Incomplete" "There is no message in SIM" problem sending/reading msgs Pin
सुरेश लामिछाने25-Mar-14 18:49
memberसुरेश लामिछाने25-Mar-14 18:49 
GeneralRe: GSM DONGLE.."Response Received is Incomplete" "There is no message in SIM" problem sending/reading msgs Pin
Member 780104024-May-14 7:24
memberMember 780104024-May-14 7:24 
GeneralRe: GSM DONGLE.."Response Received is Incomplete" "There is no message in SIM" problem sending/reading msgs Pin
manach4-Aug-14 11:08
membermanach4-Aug-14 11:08 
GeneralMy vote of 5 Pin
mangal57325-Mar-14 11:19
membermangal57325-Mar-14 11:19 
Generaldoubt Pin
Member 1059744416-Mar-14 8:23
memberMember 1059744416-Mar-14 8:23 
Questionget information sim Electric Dialog Pin
tataxa2069-Mar-14 17:51
membertataxa2069-Mar-14 17:51 
QuestionMessage Automatically Removed Pin
22-Feb-14 4:31
memberSMS Developer22-Feb-14 4:31 
QuestionProblem of Sending message in C#.net Pin
Member 1060523121-Feb-14 19:24
memberMember 1060523121-Feb-14 19:24 
AnswerRe: Problem of Sending message in C#.net Pin
Member 104483628-Mar-14 19:43
memberMember 104483628-Mar-14 19:43 
Generalsource code Pin
ebtihaj6-Feb-14 7:33
memberebtihaj6-Feb-14 7:33 
GeneralRe: source code Pin
aawajaarughat4-Mar-14 0:51
memberaawajaarughat4-Mar-14 0:51 
Generaljazak ALLAH Pin
AsifButt1-Feb-14 2:07
memberAsifButt1-Feb-14 2:07 
QuestionWRITE TIME OUT Pin
Member 1049626020-Jan-14 2:28
memberMember 1049626020-Jan-14 2:28 
SuggestionCan not send SMS using 3G USB dongle Pin
Suren N Roy28-Dec-13 5:25
memberSuren N Roy28-Dec-13 5:25 
QuestionSending sms is giving error Pin
Member 1046564613-Dec-13 18:43
memberMember 1046564613-Dec-13 18:43 
QuestionSend and Read SMS through a GSM Modem using AT Commands from Websites Pin
Member 924525929-Nov-13 22:56
groupMember 924525929-Nov-13 22:56 
QuestionGSM Modem Using TA Command how to make call and hear the Sound in speaker or Headphone Pin
Member 246274827-Nov-13 20:53
memberMember 246274827-Nov-13 20:53 
Questionread sms error Pin
hmiswi24-Nov-13 18:56
memberhmiswi24-Nov-13 18:56 
QuestionCant Read from SIM on modem Huawei Pin
leon lck28-Oct-13 23:29
memberleon lck28-Oct-13 23:29 
QuestionCan Not Read SMS Pin
ngoclam0017-Oct-13 6:38
memberngoclam0017-Oct-13 6:38 
QuestionMsg displayed: "Response received is incomplete." Pin
Member 1032702710-Oct-13 9:56
memberMember 1032702710-Oct-13 9:56 
GeneralMy vote of 3 Pin
jalal tabatabaei6-Oct-13 6:57
memberjalal tabatabaei6-Oct-13 6:57 
QuestionAuto Send and Recieve Pin
Member 823744028-Sep-13 9:43
memberMember 823744028-Sep-13 9:43 
GeneralMy vote of 5 Pin
I Husain21-Sep-13 10:22
memberI Husain21-Sep-13 10:22 
QuestionHow to notify serial port when new message is received using GSM Modem? Pin
mdrizwan_119-Sep-13 20:51
membermdrizwan_119-Sep-13 20:51 
QuestionNokia C3 Pin
Zain Ul Abidin25-Aug-13 22:27
memberZain Ul Abidin25-Aug-13 22:27 
AnswerRe: Nokia C3 Pin
Member 1153151017-Mar-15 0:04
memberMember 1153151017-Mar-15 0:04 
QuestionProblem Pin
Member 1022226322-Aug-13 2:59
memberMember 1022226322-Aug-13 2:59 
QuestionSms Send in arabic Pin
Syed talha hussain11-Aug-13 6:14
memberSyed talha hussain11-Aug-13 6:14 
Questionaadding call functions Pin
Member 101872734-Aug-13 10:24
memberMember 101872734-Aug-13 10:24 
QuestionProblem with gsm Pin
Mehdi Hooshmand23-Jun-13 3:45
memberMehdi Hooshmand23-Jun-13 3:45 
GeneralMy vote of 5 Pin
csharpbd18-Jun-13 23:54
membercsharpbd18-Jun-13 23:54 
GeneralMy vote of 5 Pin
roxtarali18-Jun-13 2:23
memberroxtarali18-Jun-13 2:23 
QuestionProblem while sending and receiving Pin
apmasta839-Jun-13 20:16
memberapmasta839-Jun-13 20:16 
SuggestionFor those converting it to VB Pin
CarlNDA7-Jun-13 1:51
memberCarlNDA7-Jun-13 1:51 
QuestionUsing sim application to send SMS Pin
sanjeewabdissa5-Jun-13 1:28
membersanjeewabdissa5-Jun-13 1:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.150428.2 | Last Updated 30 Aug 2010
Article Copyright 2009 by Syeda Anila Nusrat
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid