30825

AT Commands to Send SMS not working in Windows 8.1

I have been researching now for more than two days, trying to make an app to send SMS using AT Command, I implemented few tutorials and projects available on web. Unluckily, none of them worked.

[https://docs.google.com/document/d/1VfBbMcKZsutP8Cwg2iu7Rqiyccks1J6N2ZEbkbxnCTU/preview ] This code gives me Command executed, but message is not sent.

Then I tried another project (I am using C# and Visual Studio 2013), which have following files, After execution the status is changes to Message Sent, but I do not receive Message. I am using HUAWEI Mobile Connect - 3G Application Interface GSM Modem

<strong>Program.cs</strong>

using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace CSharp_SMS { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form_SMS_Sender()); } } }

<strong>Form1.cs</strong>

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; 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; _serialPort = new SerialPort("COM17", 19200); //Replace "COM7" with corresponding port name 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(); } } }

Is there problem in the program? Did I missed any thing? Or, there's problem to run this in Windows 8.1, cause I also found that there is a program called MS HyperTerminal, which part of that is not clear to me.

Answer1:

I use SMSPDUlib

and code

private const string LT = "\r\n"; public void Auth(string pin) { lock (smsSendSync) { //Check if gateway is alive lastSplit = SplitResponse(SendCommand("AT")); if (!(lastSplit[lastSplit.Length - 1] == "OK")) throw new OperationCanceledException("AT connection failed"); //Echo ON lastSplit = SplitResponse(SendCommand("ATE1")); if (!(lastSplit[lastSplit.Length - 1] == "OK")) throw new OperationCanceledException("ATE command failed"); //Check echo lastSplit = SplitResponse(SendCommand("AT")); if (!(lastSplit.Length == 2 && lastSplit[1] == "OK")) throw new OperationCanceledException("AT command failed"); //Verbose error reporting lastSplit = SplitResponse(SendCommand("AT+CMEE=2")); if (!(lastSplit.Length == 2 && lastSplit[1] == "OK")) throw new OperationCanceledException("AT+CMEE command failed"); //Enter a PIN lastSplit = SplitResponse(SendCommand("AT+CPIN?")); if (!(lastSplit.Length == 3 && lastSplit[2] == "OK")) throw new OperationCanceledException("AT+CPIN? command failed"); switch (lastSplit[1]) { case "+CPIN: READY": //no need to enter PIN break; case "+CPIN: SIM PIN": //PIN requested lastSplit = SplitResponse(SendCommand("AT+CPIN=" + pin)); string m_receiveData = String.Empty; WaitForResponse(out m_receiveData); if (m_receiveData == String.Empty) throw new OperationCanceledException("PIN authentification timed out"); break; default: throw new OperationCanceledException("Unknown PIN request"); } //Check if registered to a GSM network lastSplit = SplitResponse(SendCommand("AT+CREG?")); if (!(lastSplit.Length == 3 && lastSplit[2] == "OK")) throw new OperationCanceledException("AT+CREG? command failed"); lastSplit = lastSplit[1].Split(new string[] {" ", ","}, StringSplitOptions.RemoveEmptyEntries); if (!(lastSplit[2] == "1" || lastSplit[2] == "5")) throw new OperationCanceledException("Not registered to a GSM network"); Debug.WriteLine("Authentification successfull"); } } private string[] SplitResponse(string response) { string[] split = response.Split(new string[] { LT }, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < split.Length; i++) split[i] = split[i].Trim(); return split; } public string SendCommand(string command) { string m_receiveData = string.Empty; smsPort.ReadExisting(); //throw away any garbage smsPort.WriteLine(command + LT); WaitForResponse(out m_receiveData); //Debug.WriteLine(m_receiveData); return m_receiveData; } public string SendSms2(string phoneNumber, string message, bool flashMsg, SMS.SMSEncoding encoding) { if (phoneNumber.StartsWith("00")) phoneNumber = "+" + phoneNumber.Substring(2); if (phoneNumber.StartsWith("0")) //replace with your national code phoneNumber = "+386" + phoneNumber.Substring(1); string StatusMessage = string.Empty; SMS sms = new SMS(); //Compose PDU SMS sms.Direction = SMSDirection.Submited; //Setting direction of sms sms.Flash = flashMsg; //Sets the flash property of SMS sms.PhoneNumber = phoneNumber.Replace(" ",""); //Set the recipient number sms.MessageEncoding = encoding; //Sets the Message encoding for this SMS sms.ValidityPeriod = new TimeSpan(4, 0, 0, 0); //Set validity period sms.Message = message; //Set the SMS Message text string sequence = sms.Compose() + CtrlZ; //Compile PDU unit string sequenceLength = ((sequence.Length - 3) / 2).ToString(); lock (smsSendSync) { StatusMessage = SendCommand("AT+CMGS=" + sequenceLength) + " "; Thread.Sleep(500); StatusMessage += SendCommand(sequence); } Debug.WriteLine(StatusMessage); if (StatusMessage.Contains("ERROR")) throw new OperationCanceledException("Error sending SMS"); return StatusMessage; }

Use Auth() to initialize modem and SendSms2() to send a SMS.

Answer2:

I used AT Commands in following format and it works.

public bool sendMsg(string smsid, string PhoneNo, string Message, string from, string to) { string recievedData; bool isSend = false; string text = "Hello " + to + ",\n" + Message + "\n\n" + from; if (!port.IsOpen) port = OpenPort(); recievedData = ExecCommand(port, "AT+CMGF=1", 400, "Failed to set message format."); try { //string recievedData; // = ExecCommand(port, "AT", 3000, "No phone connected"); String command = "AT+CMGS=\"" + PhoneNo + "\""; recievedData = ExecCommand(port, command, 1000, "Failed to accept phoneNo"); command = text + char.ConvertFromUtf32(26) + "\r"; recievedData = ExecCommand(port, command, 1000, "Failed to send message"); if (recievedData.Contains("OK")) { isSend = true; } else if (recievedData.Contains("ERROR")) { isSend = false; } } catch (Exception ex) { MyLog.Write(new LogPacket(ex, DateTime.Now)); } return isSend; }

Recommend

  • Powershell ComboBox Selected Text
  • How to get multi line result from serial port
  • jssc getInputStream() getOutputstream()
  • Intel Edison and NodeJS serial port communication: I am receiving strange characters
  • Unable to open UART port on Windows IoT with Raspberry Pi 3
  • How do I get latitude and longtitude for desktop application? [closed]
  • Fastest way checking for COM ports
  • C#:SerialPort: read and write buffer size
  • SerialPort.ReadLine() returns garbage
  • Using DMA to access High Speed Serial Port
  • Serial Port and ObjectDisposedException Safe Handle has been closed
  • Creating an object in Swift using the Objective-C factory method gives a compiler error [duplicate]
  • Using serial ports, I get an error: Attempted to read or write protected memory
  • xsd schema file must be annotated in SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class?
  • Parsing JSON string with jsoncpp
  • Validation not working when adding query string
  • Take image from video playing on windows media player in C#
  • Getting JavaScript runtime error: irrationalPath, what does it mean?
  • AutoFit Label Font Size
  • Type Native Wifi.Wlan + WlanReasonCode cannot be marshaled error
  • UIBarButtonItem's action is not called when in a view with a UIGestureRecognizer
  • Exception HRESULT: 0x800455BC in speech recognition in Windows phone 8
  • How to access recipient on sent messages page with mailboxer
  • Click on button in another program - FindWindow, C#
  • Can't delete or rename original file after resizing
  • c# open webrowser in many tab
  • How to Cache Real-time Data?
  • Hazelcast - OperationTimeoutException
  • To display the title for the current loaction in map in iphone
  • Akka Routing: Reply's send to router ends up as dead letters
  • AT Commands to Send SMS not working in Windows 8.1
  • Rails 2: use form_for to build a form covering multiple objects of the same class
  • How do I configure my settings file to work with unit tests?
  • Is it possible to post an object from jquery to bottle.py?