2012-04-29 27 views
8

私はxamppをfedora 13にインストールしました。私はシリアルポートを使ってシリアルポート経由でマイクロコントローラと通信しようとしています。 私のコードが実行されますPHPスクリプトは、example.phplinuxのPHPシリアル通信

include("php_serial.class.php"); 
$serial = new phpSerial(); 
$serial->deviceSet("0"); 

$serial->confBaudRate(9600); //Baud rate: 9600 
$serial->confParity("none"); //Parity (this is the "N" in "8-N-1") 
$serial->confCharacterLength(8); //Character length (this is the "8" in "8-N-1") 
$serial->confStopBits(1); //Stop bits (this is the "1" in "8-N-1") 
$serial->confFlowControl("none"); //Device does not support flow control of any kind, so set it to none. 

//Now we "open" the serial port so we can write to it 
$serial->deviceOpen(); 

$serial->sendMessage("*1"); //sleep(1); // echo "hi"; $serial->deviceClose(); 

?> 

ですが、次の警告を与えます。

警告:指定されたシリアルポートは、/opt/lampp/htdocs/xampp/php_serial.class.phpの行147には無効です。 警告:ボーレートを設定できません:デバイスが設定されていないか、 opt/lampp/htdocs/xampp/php_serial.class.php on line 241 警告:パリティを設定できません:デバイスが設定されていないか、/opt/lampp/htdocs/xampp/php_serial.class.php行295

...私はchmod 0777/dev/ttyUSB0コマンドを使用して権限を与えました。私はまた、コマンドを使用して、ダイヤルアウトグループにapacheユーザー "prudhvi"を追加しようとしました: $ usermod -a -G dialout prudhvi

しかし、それは動作しません。 echo 1>/dev/ttyUSB0というコマンドを使って端末から直接コマンドを送信すると、それが動作し、シリアルポートに '1'が送信されます。しかし、私は上記の警告を得るPHPを使用してください。

"$ whoami"を使用してユーザーの名前を確認し、そのユーザー "prudhvi"をダイヤルアウトグループに追加しました。それはまだ仕事をしません。私を助けてください。

+3

本当にphpがttyUSB0にアクセスしていますか?デフォルトではttyS0を使用しようとする可能性があります。 –

答えて

0

まず、基本インストールをテストするためのhello worldタイプのPHPスクリプトをテストします。

次に、Webサーバー/ PHPエンジンが、シリアルポートに対応する該当する/ dev/ttyWHATEVERデバイスファイルにアクセスできるグループ内のユーザーとして実行されていることを確認します。もしそれがデフォルトで真実ならば、それは意外でしょう - おそらくそれを 'ダイヤルアウト'または同様のグループに追加する必要があります。

コードにフォルトチェック/レポートを追加します。

2

「/opt/lampp/htdocs/xampp/php_serial.class.php 147」の近くに/関連する行を投稿できますか?

誤ってデバイスを設定しようとしていると思われます(Marcが示すように)。そのポートまたはポートは、同時に実行している他のテストからすでに使用されています。実行しているスクリプトが、すでに使用中のポートに固有のエラーを提供しているかどうかはわかりません。

3

私はこれをPHPスクリプトを使ってArduinoボードを制御するためにDebianで1回行い、最初は同じ問題に遭遇しました。

Debianでは、シリアル接続要求を行うために、Apacheユーザーをダイヤルアウトグループに追加する必要があります。 Fedoraでも同じことが当てはまると思います。 Debianに

コマンドは次のとおりです。

useradd -G dialout www-data 

私が代わりにApacheなどのApacheのユーザーFedoraの名を信じているが。私は上のテストするためのFedoraマシンを持っていないが、私はあなたが実行する必要があるコマンドがあると仮定します:

useradd -G dialout apache 

あなたは、あなたのXAMPPのサーバーを再起動する必要があります。

は、参考のために、以下を参照してください。

http://www.cyberciti.biz/faq/howto-linux-add-user-to-group/ http://fedoraproject.org/wiki/Administration_Guide_Draft/Apache#Apache_File_Security

ニール

0

クレジットがこれをルックアップするために私をさせるためのMarc Bさんのコメントに行き、彼は上死んだ:http://www.phpclasses.org/browse/file/17926.html

function deviceSet ($device) 
{ 
    if ($this->_dState !== SERIAL_DEVICE_OPENED) 
    { 
     if ($this->_os === "linux") 
     { 
      if (preg_match("@^COM(\d+):[email protected]", $device, $matches)) 
      { 
       $device = "/dev/ttyS" . ($matches[1] - 1); 
      } 

      if ($this->_exec("stty -F " . $device) === 0) 
      { 
       $this->_device = $device; 
       $this->_dState = SERIAL_DEVICE_SET; 
       return true; 
      } 
     } 
     elseif ($this->_os === "windows") 
     { 
      if (preg_match("@^COM(\d+):[email protected]", $device, $matches) and $this->_exec(exec("mode " . $device)) === 0) 
      { 
       $this->_windevice = "COM" . $matches[1]; 
       $this->_device = "\\.\com" . $matches[1]; 
       $this->_dState = SERIAL_DEVICE_SET; 
       return true; 
      } 
     } 

     trigger_error("Specified serial port is not valid", E_USER_WARNING); 
     return false; 
    } 
    else 
    { 
     trigger_error("You must close your device before to set an other one", E_USER_WARNING); 
     return false; 
    } 
} 

私は$serial->deviceSet("/dev/ttyUSB0");を呼び出すとそれを修正すると信じていますあなたは/dev/ttySの代わりに/dev/ttyUSBで動作するようにphp_serial.class.phpのソースを変更する必要があります。