3

I am new to AT commands. I am using Nokia E71 to send and receive SMS. I am designing an application for sending SMS, but my code is not working.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;

namespace AT_commands
    {
    public partial class Form1 : Form
        {
        SerialPort serialPort;
        public Form1()
            {
            InitializeComponent();
            }

        public void Form1_Load(object sender, EventArgs e)
            {
            this.serialPort = new SerialPort();
            this.serialPort.PortName = "COM23";
            this.serialPort.BaudRate = 9600;
            this.serialPort.Parity = Parity.None;
            this.serialPort.DataBits = 8;
            this.serialPort.StopBits = StopBits.One;
            this.serialPort.Handshake = Handshake.RequestToSend;
            this.serialPort.DtrEnable = true;
            this.serialPort.RtsEnable = true;
            this.serialPort.NewLine = System.Environment.NewLine;
            send_sms();
            }
        public bool send_sms()
            {
            label1.Text = "Loaded Successfuly";
            String SMSMessage = "Message to send";
            String CellNumber = "+923333333333";
            String messageToSend = null;
            if (SMSMessage.Length <= 160)
                {
                messageToSend = SMSMessage;
                }
            else
                {
                messageToSend = SMSMessage.Substring(0, 160);
                }
            if (this.IsOpen == true)
                {
                this.serialPort.WriteLine(@"AT" + (char)(13));
                Thread.Sleep(200);
                this.serialPort.WriteLine("AT+CMGF=1" + (char)(13));
                Thread.Sleep(200);
                this.serialPort.WriteLine(@"AT+CMGS=""" + CellNumber + @"""" + (char)(13));
                Thread.Sleep(200);
                this.serialPort.WriteLine(SMSMessage + (char)(26));
                return true;
                }
            return false;
            }
        public void Open()
            {
            if (this.IsOpen == false)
                {
                this.serialPort.Open();
                }
            }

        public void Close()
            {
            if (this.IsOpen == true)
                {
                this.serialPort.Close();
                }
            }

        public bool IsOpen
            {
            get
                {
                return this.serialPort.IsOpen;
                }
            }

        public void Dispose()
            {
            if (this.IsOpen)
                this.Close();
            }
        }
    }

Please help me with this code!

BenMorel
  • 34,448
  • 50
  • 182
  • 322
Ahmed Khakwani
  • 410
  • 2
  • 8
  • 18

3 Answers3

7

Here's my code

using System;
using System.IO.Ports;
using System.Threading;
using System.Windows.Forms;

namespace CSharp_SMS
{
  public partial class Form_SMS_Sender : Form
  {
    private SerialPort _serialPort;
    public Form_SMS_Sender()
    {
        InitializeComponent();
    }

    private void buttonSend_Click(object sender, EventArgs e)
    {
        string number = textBoxNumber.Text;
        string message = textBoxMessage.Text;

        //Replace "COM7"withcorresponding port name
        _serialPort = new SerialPort("COM7", 115200);   

        Thread.Sleep(1000);

        _serialPort.Open();

        Thread.Sleep(1000);

        _serialPort.Write("AT+CMGF=1\r");

        Thread.Sleep(1000);

        _serialPort.Write("AT+CMGS=\"" + number + "\"\r\n");

        Thread.Sleep(1000);

        _serialPort.Write(message + "\x1A");

        Thread.Sleep(1000);

        labelStatus.Text = "Status: Message sent";

        _serialPort.Close();
        }
    }
}

Here's a link http://circuitfreak.blogspot.com/2013/03/c-programming-sending-sms-using-at.html

Jorick Caberio
  • 205
  • 3
  • 7
2

Why dont you open the port connection in the form_load() itself, later you can close it at the end as you did.

And do these too in Form_Load():

string cmd = "AT";
port.WriteLine(cmd + "\r");
port.Write(cmd + "\r");
port.WriteLine("AT+CMGF=1");

And simplifying the sms sending code:

port.WriteLine("AT+CMGS=\"" + PhNumber + "\"");
port.Write(Message + char.ConvertFromUtf32(26));
Shiridish
  • 4,942
  • 5
  • 33
  • 64
2

Try it this way.. You are not opening the connection to the serial port. I have tried it and it is working fine for me.

 private void button1_Click(object sender, EventArgs e)
 {
     this.serialPort = new SerialPort();
     this.serialPort.PortName = "COM5";
     this.serialPort.BaudRate = 9600;
     this.serialPort.Parity = Parity.None;
     this.serialPort.DataBits = 8;
     this.serialPort.StopBits = StopBits.One;
     this.serialPort.Handshake = Handshake.RequestToSend;
     this.serialPort.DtrEnable = true;
     this.serialPort.RtsEnable = true;
     this.serialPort.NewLine = System.Environment.NewLine;
     serialPort.Open();
     send_sms();
 }
 public bool send_sms()
 {
     String SMSMessage = "gsm MESSAGE FROM .NET C#";
     String CellNumber = "+9233333333333";
     String messageToSend = null;
     if (SMSMessage.Length <= 160)
     {
         messageToSend = SMSMessage;
     }
     else
     {
         messageToSend = SMSMessage.Substring(0, 160);
     }
     if (serialPort.IsOpen)
     {
         this.serialPort.WriteLine(@"AT" + (char)(13));
         Thread.Sleep(200);
         this.serialPort.WriteLine("AT+CMGF=1" + (char)(13));
         Thread.Sleep(200);
         this.serialPort.WriteLine(@"AT+CMGS=""" + CellNumber + @"""" + (char)(13));
         Thread.Sleep(200);
         this.serialPort.WriteLine(SMSMessage + (char)(26));
         return true;
         }
     return false;
 }
Awais Mahmood
  • 1,308
  • 4
  • 21
  • 51
  • Am connecting my android phone with the USB cable and am not finding it under "ports" rather it is under "portable devices", because of this am not able to test the SMS feature. How can I enable COM port? – Ds Arjun Mar 30 '18 at 10:12