【问题标题】:Why I'm receiving at-commands along with the SMS?为什么我会随 SMS 一起接收命令?
【发布时间】:2019-07-31 20:07:12
【问题描述】:

我正在尝试通过 USB 调制解调器使用 AT 命令通过 PHP 发送 SMS。我可以从 PHP 服务器发送 SMS 到特定的电话号码。但问题是,当我向手机发送一些文本时,我也会收到用于发送 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+CMGF=1

等待=1

AT+CSCS="GSM"

等待=1

AT+CMGS="+91xxxxxxxxxx"

此处为示例文本

如何发送短信,让手机不发送 AT 指令?

【问题讨论】:

    标签: php gsm at-command


    【解决方案1】:

    您的代码包含三个基本误解,如果不修复,您将永远无法成功进行 AT 命令通信。

    首先最重要的一点:你必须read and parse everything the modem sends back to you。有时人们错误地使用 delaysleep 等而不是解析响应,但在这里你甚至没有这样做,而是尽可能快地调用 fputs。这是一场灾难,有时甚至无法可靠地工作。我强烈建议您放弃/取消订阅任何显示此类代码示例的博客/网站/视频频道1

    然后是问题要问的那个。如果你关心 echo 是否开启,you're doing it wrong.

    特别是对于AT+CMGS,您还必须 wait for the "ready to receive payload data" prompt 在发送 SMS 有效负载之前。


    1 同样,如果有人建议用肥皂和水清洁汽车发动机内部,那么在任何与汽车维修相关的事情上,你都不应该听从这个人的意见。他们可能仍会在其他领域提供有价值的信息(例如食物食谱和烹饪建议),但不要从他们那里获取汽车维修技巧。

    【讨论】:

    • 感谢您提供宝贵的信息和时间,这很有帮助。但是仍然有疑问,而不是 sleep() 我可以使用什么来延迟(在 PHP 中)。
    • 我不知道怎么做,但我通过在代码末尾添加 ob_flush() 解决了这个问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多