PHPでArduinoのシリアル通信を読み取る
PHPでArduinoなどのシリアルポートを読むには、SerialPortライブラリを使用すると簡単にできます。
準備
まずは、SerialPortライブラリのダウンロードします。
oasynnoum/phpmake_serialport · GitHub
こちらには、PHPでシリアルを読むためのサンプルソース一式が含まれています。
次に、シリアル通信をするためのDLLファイルのダウンロードします。
http://sandbox.n-3.so/Gorilla/downloads/
使用しているPHPのバージョンに対応するdllファイルをダウンロードして php/ext/ フォルダに解凍します(xamppの場合はxampp/php/ext/)。
Gorilla-0.5.3-[PHPのバージョン]-[スレッドセーフかどうか]-x86.zip
dllライブラリを有効にするために、php.ini(xamppはxampp/php/php.ini)にdllライブラリの使用を追記して、apacheを再起動します。
extension=php_Gorilla.dll
バージョンなどの問題がなければ、apacheはそのまま起動します。
シリアル通信の読み取り方法
最初にダウンロードしたサンプルプログラムを使用して、コマンドプロンプトなどから、
$ php arduino/ASCIITable.php COM3
とシリアルポートを指定すれば、指定されたシリアル通信を取得することができます。
シリアルポートはデバイスマネージャーなどから確認することができます。
Arduinoのソース
ちなみにArduinoの超音波センサーのソースはこちらになります。
超音波距離測定センサーモジュール - Androciti Wikiのソースのプリントアウトの部分のみJSON形式で出力できるよう改変しています。
6m程まで簡単に距離が測れるので面白いです。
sketch_jul03a.ino
const int trigPin=12; //トリガを12ピンに設定 const int echoPin=13; //エコーを13ピンに設定 void setup() { pinMode(trigPin,OUTPUT); pinMode(echoPin,INPUT); Serial.begin(9600); } void loop() { float distance; distance = getDistance(getEchoLength()); Serial.print("{\"distance\":\"") ; Serial.print(distance); //シリアルモニタに距離表示 Serial.print("\"}") ; Serial.println("") ; delay(100); } //エコー信号の長さをマイクロ秒単位で返す long getEchoLength() { long echoLen; digitalWrite(trigPin,LOW); //トリガにマイクロ秒のhighパルスを出力 delayMicroseconds(2); digitalWrite(trigPin,HIGH); delayMicroseconds(10); digitalWrite(trigPin,LOW); echoLen = pulseIn(echoPin,HIGH); //エコー信号の長さをマイクロ秒単位で測る return echoLen; } //エコー信号の長さからセンチメートル単位で距離を計算する float getDistance(long echoLen) { float distance = (float)echoLen*0.017; // エコー信号の長さから距離に変換 return distance; }
このままだと、単純にシリアルがだだーっと流れ出るだけですので、先日のソケット通信と組み合わせると面白いでしょう。
PHPのWebSocketを使用してリアルタイムにグラフを描画 - PHP,MySQL,Flex,JSな日々+イラストとか
使用している機材
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- 購入: 64人 クリック: 1,164回
- この商品を含むブログ (51件) を見る
HC-SR04 超音波距離センサーモジュール For Arduino
- 出版社/メーカー: サインスマート(SainSmart)
- メディア: エレクトロニクス
- この商品を含むブログを見る