我正在尝试通过USB调制解调器使用AT命令通过PHP发送短信。我可以将SMS从PHP服务器发送到特定的电话号码。但是问题是,当我向电话发送一些文本时,我还会收到用于发送SMS的命令。
server.php
$fp = fopen('COM4', 'r+');
$writtenBytes = fputs($fp, "AT\r\n");
$writtenBytes = fputs($fp, "AT+CMGF=1\r\n");
$writtenBytes = fputs($fp, "WAIT=1\r\n");
$writtenBytes = fputs($fp, "AT+CSCS=\"GSM\"\n\r");
$writtenBytes = fputs($fp, "WAIT=1\r\n");
$writtenBytes = fputs($fp, "AT+CMGS=\"+91xxxxxxxxxx\"\r\n");
$writtenBytes = fputs($fp, "sample text here\n\r");
$writtenBytes = fputs($fp, chr(26));
预期输出:
此处为示例文本
但是我收到的短信是:
AT
AT + CMGF = 1
WAIT = 1
AT + CSCS =“ GSM”
WAIT = 1
AT + CMGS =“ + 91xxxxxxxxxx”
此处为示例文本
如何以没有AT命令发送到手机的方式发送SMS?
答案 0 :(得分:1)
您的代码包含三个基本的误解,即如果不修复,将永远无法成功进行AT命令通信。
最重要的一点:您必须read and parse everything the modem sends back to you。有时人们错误地使用delay
,sleep
等而不是解析响应,但是这里您甚至没有这样做,而是尽可能快地调用fput。那是灾难的产物,甚至有时甚至无法可靠地工作。我强烈建议您从显示此类代码示例 1 的任何博客/网站/视频频道中放弃/退订。
然后问一个问题。如果您担心回声是否打开,请you're doing it wrong。
并且特别针对AT+CMGS
,您还必须 wait for the "ready to receive payload data" prompt,然后再发送SMS有效负载。
1 就像有人建议用肥皂和水清洗汽车发动机内部一样,那个人您永远都不应听与汽车保养有关的任何事情。他们可能仍会在其他领域提供有价值的信息(例如食物食谱和烹饪建议),但不会从中获取汽车机械师的提示。