使用AT命令通过诺基亚移动发送短信

时间:2013-12-15 08:09:21

标签: vb.net gsm at-command

我正在尝试使用AT命令向我的诺基亚手机(C1-01)发送短信,我可以使用此vb.net代码成功发送短信。

Button_Send_Click:

Dim SMSPort = New SerialPort
    With SMSPort
        .PortName = "COM2"
        .BaudRate = 9600
        .Parity = Parity.None
        .DataBits = 8
        .StopBits = StopBits.One
        .Handshake = Handshake.None
        .DtrEnable = True
        .RtsEnable = True
        .NewLine = vbCrLf
    End With

    SMSPort.Open()

    SMSPort.Write("AT+CMGF=1" & vbCrLf)
    Threading.Thread.Sleep(200)

    SMSPort.Write("AT+CMGS=" & Chr(34) & TextBox1.Text & Chr(34) & vbCrLf) 'TextBox1.text = Recipient mobile number and chr(34) = "
    Threading.Thread.Sleep(200)

    SMSPort.Write("TEST MESSAGE" & Chr(26)) 'chr(26) = →
    Threading.Thread.Sleep(200)

    MsgBox(SMSPort.ReadExisting())

    SMSPort.Close()

第一次正常工作,火灾后这段代码我在手机上收到短信TEST MESSAGE(很棒)但是当我第二次按下发送按钮时,我在手机上收到短信,其中包含: AT+CMGF=1 AT+CMGS=+92XXYYYYYY TEST MESSAGE

为什么第二次在SMS中包含“AT命令,即AT + CMGF等......”? 如何从中删除不需要的文字? 在打开之后和关闭我的串口(SMSPort)之前,我还尝试了SMSPort.DiscardInBuffer()SMSPort.DiscardOutBuffer()属性,但我的问题没有解决。 我用Google搜索了很多但都是徒劳的,请帮我解决这个问题。

平台:带有.NET 2.0的Microsoft Visual Basic 2010

3 个答案:

答案 0 :(得分:1)

首先,您必须认真重做AT命令处理

  • 读取并解析从调制解调器返回的每一条响应行,直到您获得最终结果代码。这适用于每个命令行调用,没有任何例外。有关详细信息,请参阅this answer
  • 永远不要在任何处理AT命令的代码中调用Threading.Thread.Sleep。有关中止下一个命令的风险的详细信息,请参阅this answer
  • 对于AT+CMGS,您还必须在发送数据之前等待“\ n \ r>”响应,有关详细信息,请参阅this answer(再次)。

在解决这些基本问题之前,你不能指望任何成功的行为。

答案 1 :(得分:0)

好的,今天我遇到了同样的问题,我通过添加" \ r \ n "解决了这个问题。在发送CTRL + Z(char 26)之前,在消息的末尾。您可以仅使用" \ n"

进行尝试

答案 2 :(得分:-1)

试试这个

Dim SMSPort = New SerialPort
    With SMSPort
        .PortName = "COM2"
        .BaudRate = 9600
        .Parity = Parity.None
        .DataBits = 8
        .StopBits = StopBits.One
        .Handshake = Handshake.None
        .DtrEnable = True
        .RtsEnable = True
        .NewLine = vbCrLf
End With

SMSPort.Open()

SMSPort.WriteLine("AT" & Chr(13))
Threading.Thread.Sleep(200)

SMSPort.WriteLine("AT+CMGF=1" & Chr(13))
Threading.Thread.Sleep(200)

SMSPort.WriteLine("AT+CMGS=" & Chr(34) & TextBox1.Text & Chr(34)) 
Threading.Thread.Sleep(200)

SMSPort.WriteLine("TEST MESSAGE" & Chr(26))
Threading.Thread.Sleep(200)

MsgBox(SMSPort.ReadExisting())

SMSPort.Close()

添加SMSPort.WriteLine(“AT”& Chr(13)),我用WriteLine替换了Write并删除了vbCrlf。还将Chr(13)添加到SMSPort.WriteLine(“AT + CMGF = 1”)