GSM modem AT命令UCS2错误500

时间:2018-01-03 22:32:51

标签: php encoding gsm at-command

三天前,我开始制作一个简单的应用程序来发送短信。我已经测试了它并且它在GSM CSCS模式下工作,但是当我将它切换到UCS2时它没有显示西里尔字母

<?php
error_reporting(E_ALL);

$fp = fopen("/dev/ttyUSB0", 'w+');

$msg = strtoupper(bin2hex(mb_convert_encoding("Тест", "UCS-2", "UTF-8")));
$number_raw = "+359000000000";
$number = bin2hex(mb_convert_encoding($number_raw, "UCS-2", "UTF-8"));
echo $number."<br>";
echo $msg;
$debug = false;
if(!$fp || $debug){
  //echo "Can not open!";
}else{
  fwrite($fp, "AT+CMGF=1".chr(13)); // OK
  sleep(5);
  fwrite($fp, 'AT+CSCS="UCS2"'.chr(13)); // OK
  sleep(5);
  fwrite($fp, 'AT+CMGS="'.$number.'"'.chr(13)); // OK
  sleep(5);
  fwrite($fp, $msg.chr(26)); // ERROR 500
  echo "<br>Sent";
}
?>

根据此来源正确编码数字和消息:http://www.columbia.edu/kermit/ucs2.html

发送邮件时,我会收到邮件(因此编号正确)但内容显示不正确。

https://imgur.com/a/cCaTU

这种行为的可能原因是什么,可能是我的PHP文件编码?另外为什么linux找到3个GSM tty设备?

1 个答案:

答案 0 :(得分:0)

删除所有可怕的sleep调用并实施正确的最终响应解析后,您需要修复AT + CMGS的waiting for the "\r\n> "响应的解析。

没有任何修复,字符集编码麻烦是一个非常小的问题。当您运行AT+CSCS="UCS2" 时,每个字符串将由调制解调器以这种方式进行编码,并且必须按照您的方式进行编码,直到永久(或选择其他字符集)为止,例如切换从UCS2到UTF-8将是AT+CSCS="005500540046002D0038"而不是AT+CSCS="UTF-8"