PHP-それは動作します:-)
Arduinoのスキルを練習する際に、簡単なLEDオン/オフスケッチを作成しました。シリアルモニターにonまたはoffと入力することで機能します。
次のステップでは、リンクをクリックして上記のオン/オフ機能を実行するためのGUIインターフェースとして機能するWebページを作成しました。このWebベースのGUIは、PHPを介して機能します。 PHP SERIAL クラスを使用して、Arduinoが使用しているシリアルポートと対話します。
問題は、シリアルポートからフィードバックを得る方法を見つける必要があるということです。 Arduino IDEシリアルモニターを使用すると、各シリアル入力に応答して印刷されたメッセージを見ることができます。また、同じフィードバックをPHPコード
PHP SerialクラスはreadPort()関数を提供しますが、データを返しません。
UPDATE [2]:
アルドゥイノ:
const int greenPin = 2;
const int bluePin = 3;
const int redPin = 4;
int currentPin = 0; //current pin to be faded
int brightness = 0; //current brightness level
void setup(){
Serial.begin(9600);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(redPin, OUTPUT);
}
void loop(){
//if there's any serial data in the buffer, read a byte
if( Serial.available() > 0 ){
int inByte = Serial.read();
//respond only to the values 'r', 'g', 'b', or '0' through '9'
if(inByte == 'r')
currentPin = redPin;
if(inByte == 'g')
currentPin = greenPin;
if(inByte == 'b')
currentPin = bluePin;
if(inByte >= '0' && inByte <= '9'){
//map the incoming byte value to the range of the analogRead() command
brightness = map(inByte, '0', '9', 0, 255);
//set the current pin to the current brightness:
analogWrite(currentPin, brightness);
}
Serial.print("Current Pin : ");
Serial.println(currentPin);
Serial.print("Brightness : ");
Serial.println(brightness);
}//close serial check
}
PHP/HTML:
<?php
require("php_serial.class.php");
// include("php_serial.class.php");
// Let's start the class
$serial = new phpSerial();
// First we must specify the device. This works on both Linux and Windows (if
// your Linux serial device is /dev/ttyS0 for COM1, etc.)
$serial->deviceSet("/dev/ttyACM0");
// Set for 9600-8-N-1 (no flow control)
$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");
// Then we need to open it
$serial->deviceOpen();
// Read data
$read = $serial->readPort();
print "<pre>";
print_r($read);
print "</pre>";
// Print out the data
echo $read;
// print exec("echo 'r9g9b9' > /dev/ttyACM0");
print "RESPONSE(1): {$read}<br><br>";
// If you want to change the configuration, the device must be closed.
$serial->deviceClose();
?>
<?php
if( isset($_REQUEST['LED']) )
response();
?>
<form action='index.php' method='POST'>
<select id='led' name='LED'>
<option id='nil'>-</option>
<option id='red'>RED</option>
<option id='green'>GREEN</option>
<option id='blue'>BLUE</option>
<option id='all'>ALL</option>
</select>
<input type='submit' value='SET'>
</form>
<?php
print "Hi, Earthlings!";
function response(){
$CMDString = "";
$execute = false;
if( isset($_REQUEST['LED']) ){
switch ($_REQUEST['LED']) {
case 'RED':
$CMDString = 'r9';
$execute = true;
exec("echo 'r9g0b0' > /dev/ttyACM0");
print "<br>FOUND: {$_REQUEST['LED']}";
break;
case 'GREEN':
$CMDString = 'g9';
$execute = true;
print "<br>FOUND: {$_REQUEST['LED']}";
break;
case 'BLUE':
$CMDString = 'b9';
$execute = true;
print "<br>FOUND: {$_REQUEST['LED']}";
break;
case 'ALL':
$CMDString = 'r9g9b9';
$execute = true;
print "<br>FOUND: {$_REQUEST['LED']}";
break;
default:
print exec("echo 'r0g0b0' > /dev/ttyACM0");
$execute = false;
break;
}
if($execute){
print exec("echo '{$CMDString}' > /dev/ttyACM0");
print "<br><br>executing: {$CMDString}";
}
}
}
?>
Linuxで作業していると思います。
最初にシリアルポートをセットアップします。
stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts
その後、古き良き時代のfread/fwriteを使用できます
$fp =fopen("/dev/ttyACM0", "w+");
if( !$fp) {
echo "Error";die();
}
fwrite($fp, $_SERVER['argv'][1] . 0x00);
echo fread($fp, 10);
fclose($fp);
覚えておかなければならないことが1つだけあります。 Arduinoはすべての接続で再起動します。あなたはそれがあなたを混乱させることを知らない場合。たとえば、接続(fopen)してすぐにデータを送信すると、Arduinoは起動中なので1〜2秒かかります。睡眠を試して、少し時間をとります。再起動を無効にする場合は、GRDからRSTへの10uFコンデンサを使用します。
幸運を
追伸「スクリーン」でトラブルシューティングできます
screen /dev/ttyACM0 9600
設定についての投稿PHP with Arduino http://systemsarchitect.net/connecting-php-with-arduino-via-serial-port-on-linux/ と1つ詳細はこちら http://systemsarchitect.net/arduino-and-php-serial-communication-with-a-protocol/ 。
/ dev/ttyUSB0をユーザーrootで実行します。Apacheを使用してApacheにchown/dev/ttyUSB0を試みるか、ユーザーがログインします。
$ Sudo chown Apache2:Apache2 /dev/ttyACM0
OR
$ Sudo chown yourusername:yourusername /dev/ttyACM0
その後、再試行するか、ubuntuからログアウトして、rootユーザーとしてログインします。
シリアルポートにデータがない場合は、おそらく読み取ろうとしています。 JavaScript 呼び出すコードを実装する必要があります [〜#〜] php [〜#〜] 定期的に読み取ることができるコード。
データを取得したら、それを処理する必要があります。
readPort()
はうまく機能しました。ボーレート、パリティなどが適切に調整されていれば、シリアルポートの読み取りに問題はないはずです。
以下は、Arduinoのライブラリの使用例です。それはしばらく前に私のために働いた:
<?php
include "php_serial.class.php";
// Let's start the class
$serial = new phpSerial();
// First we must specify the device. This works on both Linux and Windows (if
// your Linux serial device is /dev/ttyS0 for COM1, etc.)
$serial->deviceSet("/dev/ttyUSB0");
// Set for 9600-8-N-1 (no flow control)
$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");
// Then we need to open it
$serial->deviceOpen();
// Read data
$read = $serial->readPort();
// Print out the data
echo $read;
// If you want to change the configuration, the device must be closed.
$serial->deviceClose();
?>