coLinux日記

coLinuxはフリーソフトを種として、よろずのシステムとぞなれりける。

PHPで、RS-232Cを使って、AQUOSを制御する。その2

2009-03-07 22:57:59 | php
前回インストールした、php_ser を使って、PHP Serial Exampleを参考に、いい加減なプログラム remote-c.php を作ってみました。デバッグやテスト用の意味のないコードも入っていますが、読み飛ばしてください。

シリアルポートのオープンが遅いようなので、一度オープンしたらなるべくクローズしないようにすると通常のリモコン並みの反応が得られました。

テレビからの応答もリモコンなのでデバッグ以外にはほとんど関係ないと思います。また、何らかのトラブルでser_close()が実行できないで終了した場合でも、もう一度オープンすれば普通にシリアルポートが使えました。
<?php
 //
 // remote-c.php
 // Written by Espiya 2009-03-04
 // http://blog.goo.ne.jp/espiya/
 //
 $str = ser_version();
 echo "Version: $str";

 echo "\n";

 echo "Open port";
 ser_open("COM2", 9600, 8, "None", 1, "None");

 echo "\n";

 $str = ser_isopen();
 echo "Port: $str"

 sleep(1);
 
 echo "\n";

 $str = ser_read(128);
 echo $str;

 sleep(1);

 echo "\n";

 echo "Enter command\n";
 
 $b_part = 0; 
 $comline = "null";
 while ( ($line = trim(fgets(STDIN)) ) != "end" ) {  
   sscanf($line, "%s %d", $a_part, $b_part);
   // echo "A part: $a_part \n";
   // echo "B part: $b_part \n";
   if ( $b_part >= 0 && $b_part < 1000) {
     $data = sprintf("% -4d\r",$b_part);
     switch ($a_part) {
       case "off":
       case "power":
       case "p":
         if ( $b_part <=1 ) {
           $comline = &qout;POWR0   \r";
         }
         break;
       case "on":
         $comline = "POWR1   \r";
         break;
       case "volume":
       case "vol":
       case "v":
         if ( $b_part >= 0 && $b_part < 31 ) {
           $comline = "VOLM$data";
         } else {
           $comline = "VOLM????\r";
         }
         break;
       case "video":
         $comline = "IAVD5   \r";
         break;
       case "tv";
         $comline = "ITVD0   \r";
         break;
       case "ch":
         $comline = "CAIR$data";
         break;
       case "dch":
         switch ($b_part) {
           case 1 :
             $data = "11  \r";
             break;
           case 3 :
             $data = "21  \r";
             break;
           case 4 : 
             $data = "41  \r";
             break;
           case 6 :
             $data = "61  \r";
             break;
           case 8 :
             $data = "81  \r";
             break;
           case 10 :
             $data = "51  \r";
             break;
           case 12 :
             $data = "71  \r";
         }
         $comline = "CTBD$data";
         break;
       case "digital":
         $comline = "IDEG0   \r";
         break;
       case "mute":
         $comline = "MUTE0   \r";
         break;
       case "help":
       case "h" :
       case "menu":
         echo "Command list(nn は数字)\n";
         echo "  on      : 電源を入れる。( power 1 も可 )\n";
         echo "  off     : 電源を切る。 ( power 0 も可 )\n";
         echo "  vol nn: ボリューム( 0から30まで) \n";
         echo "  ch  nn:チャンネル( アナログにする )\n";
         echo "  dch nn:チャンネル( デジタルにする )\n";
         echo "  video  :ビデオにする。\n";
         echo "  tv   :テレビにする。\n";
         echo "  mute  :消音(トグルスィッチ)\n";
         echo "  help  :このヘルプ( menu も可 )\n";
         echo "  end   :プログラムを終了する。\n";
         break;
     }
   }

   if ($comline != "null") {
     ser_write($comline);
     sleep(1); 
     echo "Answer\n";
     $str = ser_read(128);
     echo "$str";
   }
   echo "\n";

   $a_part  = "null";
   $b_part  =  0;
   $comline = "null";
 }
 
 echo "\n";
 echo "Close port";
 ser_close();
?>


コマンドプロンプトからの操作なので、キーボードでAQUOSを操作している感じです。ただし、たまに反応が遅いことがあります。

ボリュームを 30 以下にしたのは、それ以上にしたことがないのと、万が一コマンドを指定してしまった場合、近所迷惑になるか壊れるかもしれないと思ったからです。デジタルチャンネルは、東京地方のアナログチャンネルに対応させました。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする