<?php

use PHPMake\SerialPort;
/* シリアルポートを開きます */
$port = new SerialPort('COM3');
/* ボーレートを 9600 に設定します */
$port->setBaudRate(SerialPort::BAUD_RATE_9600);
/* フロー制御は行いません */
$port->setFlowControl(SerialPort::FLOW_CONTROL_NONE);
/* 
 * データの読み込みにカノニカル入力モードを用いません。
 * この設定では SerialPort::read() は
 * 最低1バイト読み込むまで呼び出し元に制御を戻しません。
 */
$port->setCanonical(false)->setVTime(0)->setVMin(1);
/* データを送信します。 */
$written = $port->write('hello');
/* 
 * 最大256バイトまでデータを読み込みます。
 * 上で行った読み込みタイムアウトの設定と合わせると、
 * SerialPort::read() は次のように振る舞います。
 * 
 * - 最低1バイト読み込むまでブロックする
 * - 最大256バイト読み込む
 * 
 * 実際に読み込まれたデータのサイズは 
 * strlen($data) 
 * などとして求められます。
 */
$data = $port->read(256);
$dataSize = strlen($data);
示例#2
0
<?php

if ($argc < 2) {
    print 'specify port' . PHP_EOL;
    exit(1);
}
use PHPMake\SerialPort;
$retval = 0;
$device = $argv[1];
$baudRate = 9600;
$prompt = 'brightness>';
$port = new SerialPort();
try {
    $port->open($device);
    $port->setBaudRate($baudRate);
    $port->setFlowControl(SerialPort::FLOW_CONTROL_NONE);
    $port->setCanonical(false);
    $port->setVTime(0)->setVMin(0);
    $stdin = fopen('php://stdin', 'r');
    print $prompt;
    while (FALSE !== ($line = fgets($stdin))) {
        if (preg_match('/^(?:quit|exit)/', $line)) {
            break;
        }
        $brightness = pack('C', (int) $line);
        $port->write($brightness);
        print $prompt;
    }
    fclose($stdin);
} catch (Exception $e) {
    print 'exception occurred' . PHP_EOL;
示例#3
0
 * このスクリプトと一緒にバンドルされている arduino.ino スケッチが arduino に
 * アップロードされている必要があります。
 */
if ($argc != 2) {
    $filename = basename(__FILE__);
    print <<<EOU
使い方: php {$filename} port
    port    arduino が接続されたポート

EOU;
    exit(1);
}
use PHPMake\SerialPort;
//$pins = array(chr(55), chr(56), chr(57), chr(58), chr(59), chr(60), chr(61));
$pins = array('7', '8', '9', ':', ';', '<', '=');
$port = new SerialPort($argv[1]);
$port->setFlowControl(SerialPort::FLOW_CONTROL_SOFT)->setBaudRate(SerialPort::BAUD_RATE_38400);
$port->setCanonical(false)->setVTime(1)->setVMin(0);
print 'arduino の準備を待っています ';
while ($port->read(1) != '?') {
    print '.';
}
print '準備完了' . PHP_EOL;
$output = count($pins) . implode('', $pins);
$port->write($output);
$asc = true;
$sig = '1';
while (true) {
    $sig = $asc ? '1' : '0';
    foreach ($pins as $pin) {
        $port->write($sig . $pin);
function serialPortDump(SerialPort $sp)
{
    printf('flow control: %s' . PHP_EOL . 'baud rate: %d' . PHP_EOL . 'canonical: %s' . PHP_EOL . 'char size: %d' . PHP_EOL . 'stop bits: %d' . PHP_EOL . 'parity: %s' . PHP_EOL . 'vmin: %d' . PHP_EOL . 'vtime: %d' . PHP_EOL . 'CTS: %s' . PHP_EOL . 'RTS: %s' . PHP_EOL . 'DSR: %s' . PHP_EOL . 'DTR: %s' . PHP_EOL . 'DCD: %s' . PHP_EOL . 'RNG: %s' . PHP_EOL . PHP_EOL, $sp->getFlowControl(), $sp->getBaudRate(), $sp->isCanonical() ? 'true' : 'false', $sp->getCharSize(), $sp->getNumOfStopBits(), $sp->getParity(), $sp->getVMin(), $sp->getVTime(), $sp->getCTS() ? 'true' : 'false', $sp->getRTS() ? 'true' : 'false', $sp->getDSR() ? 'true' : 'false', $sp->getDTR() ? 'true' : 'false', $sp->getDCD() ? 'true' : 'false', $sp->getRNG() ? 'true' : 'false');
}
示例#5
0
<?php

if ($argc != 2) {
    print 'Usage: php ' . basename(__FILE__) . ' port_string' . PHP_EOL . '    port_string     接続するポート' . PHP_EOL;
    exit(1);
}
use PHPMake\SerialPort;
$status = 0;
$portString = $argv[1];
$port = new SerialPort();
$data = null;
try {
    $port->open($portString);
    $port->setBaudRate(SerialPort::BAUD_RATE_9600)->setFlowControl(SerialPort::FLOW_CONTROL_NONE)->setCanonical(false)->setVTime(0)->setVMin(1);
    while ($data = $port->read(256)) {
        print 'data received.' . PHP_EOL;
        if ($data == '!!!') {
            print 'exit.' . PHP_EOL;
            break;
        } else {
            var_dump($data);
            print PHP_EOL;
            $port->write($data);
        }
    }
} catch (Exception $e) {
    print $e->getMessage() . PHP_EOL;
    $status = 2;
}
if ($port->isOpen()) {
    $port->close();
示例#6
0
<?php

if ($argc < 2) {
    print 'Usage: php ' . basename(__FILE__) . ' port_string [message]' . PHP_EOL . '    port_string     接続するポート' . PHP_EOL . '    message        出力する文字列' . PHP_EOL;
    exit(1);
}
use PHPMake\SerialPort;
$status = 0;
$portString = $argv[1];
$message = $argc == 3 ? $argv[2] : "hello";
$port = new SerialPort();
try {
    $port->open($portString);
    $port->setBaudRate(SerialPort::BAUD_RATE_9600)->setFlowControl(SerialPort::FLOW_CONTROL_NONE)->setCanonical(false)->setVTime(1)->setVMin(0);
    while ($port->read()) {
    }
    // void the remain data
    print $port->read($port->write($message)) . PHP_EOL;
} catch (Exception $e) {
    print $e->getMessage() . PHP_EOL;
    $status = 2;
}
if ($port->isOpen()) {
    $port->close();
}
exit($status);
示例#7
0
<?php

use PHPMake\SerialPort;
$status = 0;
$deviceName = array_key_exists('deviceName', $_POST) ? $_POST['deviceName'] : null;
if ($deviceName) {
    /**
     * SerialPort のインスタンスを作ります。
     * SerialPort::__construct(string $portString) でインスタンスを生成する場合は、
     * 以下に続く SerialPort::open(string $portString) もコンストラクタ内で行われます。
     */
    $port = new SerialPort();
    try {
        /* 
         * $portString が示すシリアルポートとのストリームを開きます。
         * コンストラクタ SerialPort::__construct(string $deviceName) でインスタンスを生成している場合は、
         * SerialPort::open(string $deviceName) をコールする必要はありません。
         */
        $port->open($deviceName);
        /*
         *  ボーレートを設定します。
         * ここではクラス定数を用いていますが整数リテラルでも構いません。
         */
        $port->setBaudRate(SerialPort::BAUD_RATE_9600);
        /*
         * フロー制御を設定します。
         * SerialPort::setFlowControl() の引数には
         * クラス定数 SerialPort::FLOW_CONTROL_* を用いてください。
         */
        $port->setFlowControl(SerialPort::FLOW_CONTROL_NONE);
        /*