PHPでserialエクステンションを使ってシリアル通信を試みてます。


<?php
ser_open('COM5', 9600, 8, 'None', '1', 'None');
if (ser_isopen()) {
var_dump(ser_write("AT"));
sleep(5);
$str = ser_read();
var_dump($str);
} else {
echo 'Serialport Open Failed' . PHP_EOL;
}
ser_close();
?>

このスクリプトを実行すると、$strに「T」が反ってきます。
TeraTermでシリアルで「AT」を送ると「OK」が反ってきます。
PHPでも「OK」が反って来てほしいのですが、何か勘違いしてるのでしょうか?
(PHPでシリアル通信するのが適切ではないのはわかってはいるのですが・・・)

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/02/11 08:34:19
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:MrB

質問者から

MrB2014/02/10 21:04:24

コメントありがとうございます。

いわれてみればそうですね。

なまじ「T」とか返ってくるので、見落としてました。

CR+LFをつけたらうまくいきました。

ありがとうございます。

お礼をしたいので、良ければ、回答に転記していただけないでしょうか。

ベストアンサー

id:karuishi No.1

回答回数767ベストアンサー獲得回数128

ポイント100pt

ATコマンド送っているっていう事はモデムとの通信だと思いますが
通常モデムは"CR/LF"のような改行コード(デリミタ)を受信するまで"OK"を返しません。

ですので、
var_dump(ser_write("AT\n")); <= "\n"の部分はモデムの設定とあっている必要があります。
のように改行コード込みで記述してみて下さい。

その他の回答0件)

id:karuishi No.1

回答回数767ベストアンサー獲得回数128ここでベストアンサー

ポイント100pt

ATコマンド送っているっていう事はモデムとの通信だと思いますが
通常モデムは"CR/LF"のような改行コード(デリミタ)を受信するまで"OK"を返しません。

ですので、
var_dump(ser_write("AT\n")); <= "\n"の部分はモデムの設定とあっている必要があります。
のように改行コード込みで記述してみて下さい。

  • id:karuishi
    ATコマンド送っているっていう事はモデムとの通信だと思いますが
    通常モデムは"CR/LF"のような改行コード(デリミタ)を受信しないと"OK"を返しません。

    ですので、
    var_dump(ser_write("AT\n")); <= "\n"の部分はモデムの設定とあっている必要があります。
    のように改行コード込みで記述して下さい。
  • id:MrB
    ありがとうございます。解決しました。
  • id:karuishi
    お気遣いありがとうございました。
    お言葉に甘えて回答欄に転記させていただきました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません