8

Fedora 13 に xampp をインストールしました。php シリアル クラスを使用して、シリアル ポート経由でマイクロコントローラーと通信しようとしています。私のコードはexample.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();

?>

php スクリプトは実行されますが、次の警告が表示されます。

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

... コマンドを使用しました: chmod 0777 /dev/ttyUSB0 許可を与えます。コマンドを使用して、apacheユーザー「prudhvi」をdialoutグループに追加しようとしました: $ usermod -a -G dialout prudhvi

しかし、うまくいきません。コマンドを使用して端末からコマンドを直接送信すると、 echo 1 > /dev/ttyUSB0 が機能し、「1」がシリアルポートに送信されます。しかし、phpを使用すると、上記の警告が表示されます。

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

4

4 に答える 4

3

PHPスクリプトでArduinoボードを制御するためにDebianでこれを一度行ったところ、最初は同じ問題に遭遇しました。

Debian では、シリアル接続要求を作成できるようにするために、Apache ユーザーを dialout グループに追加する必要があります。同じことが Fedora にも当てはまると思います。

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

useradd -G dialout www-data

ただし、Fedora は Apache ユーザーを代わりに apache と名付けていると思います。テストする 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

ニール

于 2012-05-16T08:06:42.537 に答える
2

「147行目の/opt/lampp/htdocs/xampp/php_serial.class.php」に関連する/の近くの行を投稿していただけますか?

デバイスを間違って設定しようとしていると思われます (Mar が指摘したように)。それまたはポートは、同時に実施している他のテストで既に使用されています。実行中のスクリプトが、既に使用されているポートに接続しようとしている特定のエラーを提供するかどうかはわかりません。

于 2012-05-03T16:18:37.900 に答える
0

私にこれを調べさせたマーク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+):?$@i", $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+):?$@i", $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");と修正されると思いますが、の代わりにソースを変更しphp_serial.class.phpて作業する必要がある場合があります。/dev/ttyUSB/dev/ttyS

于 2012-05-20T21:00:04.627 に答える
0

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

次に、Web サーバー / php エンジンが、シリアル ポートに対応する適切な /dev/ttyWHATEVER デバイス ファイルへのアクセスを許可されたグループ内のユーザーとして実行されていることを確認します。それがデフォルトで真であるとしたら、驚くべきことです。おそらく、'dialout' または同様のグループに追加する必要があります。

コードに障害チェック/レポートを追加します。

于 2012-04-29T21:37:35.947 に答える