PHPでArduinoのシリアル通信を読み取る

PHPArduinoなどのシリアルポートを読みとります。

f:id:haru-komugi:20140708181351j:plainf:id:haru-komugi:20140708181335j:plain

PHPArduinoなどのシリアルポートを読むには、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

とシリアルポートを指定すれば、指定されたシリアル通信を取得することができます。

シリアルポートはデバイスマネージャーなどから確認することができます。
f:id:haru-komugi:20140708182235j:plain

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な日々+イラストとか

使用している機材

Arduinoをはじめようキット

Arduinoをはじめようキット

HC-SR04 超音波距離センサーモジュール For Arduino

HC-SR04 超音波距離センサーモジュール For Arduino