AT-команды Отправка/получение SMS

Я новичок в AT-командах. Я использую Nokia E71 для отправки и получения SMS. Я разрабатываю приложение для отправки SMS, но мой код не работает.

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();
            }
        }
    }

Пожалуйста, помогите мне с этим кодом!


person Ahmed Khakwani    schedule 05.09.2012    source источник
comment
С какими проблемами вы сталкиваетесь?   -  person Steve Czetty    schedule 06.09.2012
comment
Нужно больше информации, чем это. Есть ли сообщение об ошибке? Вы прошли через код? Что вы пытались сделать для отладки?   -  person Steve Czetty    schedule 06.09.2012
comment
На самом деле, если вы поможете мне прочитать SMS с мобильного, возникла проблема с кодом. Но теперь мое приложение отправляет сообщения, пожалуйста, помогите мне прочитать смс с мобильного   -  person Ahmed Khakwani    schedule 06.09.2012


Ответы (3)


Вот мой код

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();
        }
    }
}

Вот ссылка http://circuitfreak.blogspot.com/2013/03/c-programming-sending-sms-using-at.html

person Jorick Caberio    schedule 04.03.2013

Почему бы вам не открыть соединение порта в самой форме_load(), позже вы можете закрыть его в конце, как вы это сделали.

И сделайте это тоже в Form_Load():

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

И упрощая код отправки смс:

port.WriteLine("AT+CMGS=\"" + PhNumber + "\"");
port.Write(Message + char.ConvertFromUtf32(26));
person Cdeez    schedule 12.09.2012

Попробуйте так.. Вы не открываете соединение с последовательным портом. Я попробовал это, и это работает нормально для меня.

 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;
 }
person Awais Mahmood    schedule 07.10.2015
comment
Я подключаю свой телефон Android с помощью USB-кабеля и не нахожу его под портами, а под портативными устройствами, из-за этого я не могу проверить функцию SMS. Как включить COM порт? - person Ds Arjun; 30.03.2018