我刚买了一台新的Sim900并连接到Arduino Uno。我使用下面的代码向自己发送文本。我收到了我的手机上的文字,但我的串口显示器上没有收到任何回音(即“OK”)。我尝试过交换RX / TX引脚和不同的波特率但没有成功。
void setup()
{
Serial.begin(9600); //Baud rate of the GSM/GPRS Module
Serial.println("");
delay(2000);
Serial.println("AT+CMGF=1");
delay(1000);
Serial.println("AT+CMGS=\"+120########\""); //Number to which you want to send the sms
delay(1000);
Serial.print("This is a test."); //The text of the message to be sent
delay(1000);
Serial.write(0x1A); // send CTRL - z to end message
Serial.write(0x0D); // Carriage Return
Serial.write(0x0A); // Line Feed
delay(5000);
}
void loop()
{
}
答案 0 :(得分:0)
你绝不应该永远使用delay
代替读取和解析从调制解调器发回的响应。现在,我确实认识到这是一个有点讽刺意见的建议,因为问题是你没有得到任何响应,但是你应该在你得到响应工作的那一刻使用延迟抛弃这段代码,而不是一秒钟之后。< / p>
为了强调这一点,在向调制解调器发送AT命令行之后,在调制解调器以最终结果代码响应之前,您不应发送任何内容。 V.250标准说:
最终结果代码表示完整的DCE操作和完成 愿意接受DTE的新命令。
如果在收到最终结果代码之前发送任何内容,您将中止当前正在执行的命令!
我不知道这个sim900调制解调器,但请注意一般调制解调器可以配置为不回显字符并抑制结果代码(ATE
和ATQ
命令),所以除非你绝对肯定知道调制解调器配置为回显字符和打印结果代码,这应该是你要检查的第一件事。
所有这些都在V.250标准中描述,该标准是really important document。阅读第5章的全部内容,并密切关注第6.2章 DTE-DCE接口命令。
移动电话相关命令通常在27.007 standard中指定,尽管在27.005 standard中指定了与sms消息相关的命令。请密切注意这样一个事实:特别是AT+CMGS
,你需要等待在发送短信有效负载之前接收`“\ n \ r&gt;”(另见this answer的第一部分)。 / p>
答案 1 :(得分:0)
正如@hlovdal所说,使用消息之间的延迟是一个坏主意。您必须等待每个命令的答案并根据答案采取行动(或因为超时)。
假设这是您的所有代码,您正在跳过阅读串口的部分。就像你执行serial.write一样,你必须使用serial.read来获取传入的字符。也许这就是原因,因为你没有收到任何东西。
最后,Arduino UNO有一个UART端口,所以如果你想要一个串口监视器进行调试,你必须使用SoftwareSerial与SIM900进行通信。