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回まで
  • 13歳以上
  • 登録:2014/02/08 12:29:36
  • 終了:2014/02/11 08:34:19
id:MrB

質問者から

MrB2014/02/10 21:04:24

コメントありがとうございます。
いわれてみればそうですね。
なまじ「T」とか返ってくるので、見落としてました。
CR+LFをつけたらうまくいきました。
ありがとうございます。
お礼をしたいので、良ければ、回答に転記していただけないでしょうか。

ベストアンサー

id:karuishi No.1

ニャンざぶろう回答回数764ベストアンサー獲得回数1282014/02/11 00:53:39

ポイント100pt

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

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

その他の回答(0件)

id:karuishi No.1

ニャンざぶろう回答回数764ベストアンサー獲得回数1282014/02/11 00:53:39ここでベストアンサー

ポイント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
    お気遣いありがとうございました。
    お言葉に甘えて回答欄に転記させていただきました。

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません