不从脚本发送消息

时间:2013-04-03 09:00:38

标签: php serial-port at-command

我知道我可能会投下这么多票,但是请帮我解决这个问题。我有以下代码。

<?php
exec("mode COM1 BAUD=9600 PARITY=N data=8 stop=1 xon=off");
$fp = fopen ("\\.\com1", "r+");
//$fp = dio_open('COM5:', O_RDWR | O_NOCTTY | O_NONBLOCK);
if (!$fp) 
{
    echo "Uh-oh. Port not opened.";
} 
else 
{

    $string  = "AT+CMGF=1";

    $string  = $string."OK";

    $string  = $string."AT+CMGS='+44XXXXX'";

    $string  = $string."> Hello World?<Ctrl>+<Z>";

    $string  = $string."+CMGS: 44";

    $string  = $string."OK";

    fputs ($fp, $string );
    echo $string."\n";
    fclose ($fp);
}

?>

上面的代码输出AT+CMGF=1OKAT+CMGS='+44XXXX'> Hello World?++CMGS: 44OK但实际上没有向该号码发送任何消息。

我的设备附有装有SIM卡的PC。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

据我所知,AT命令是对话。您必须发送AT+CMGF=1,然后等待调制解调器发送 OK,发送下一个命令等。

您现在正在发送所有内容,包括调制解调器的响应在一个字符串中。

维基百科上的更多信息(一如既往):http://en.wikipedia.org/wiki/Hayes_command_set

代码应该是(我的头顶,未经测试):

$string = "AT+CMGF=1";
fputs($fp, $string);
$r = fgets($fp);
if ($r == "OK") {
  $string = "AT+CMGS='+44XXXXX'";
  fputs($fp, $string);
  $r = $fgets($fp);
  ... etc ...
}