PHP
Arduino
Firmata
PHPMake

PHP で Arduino を制御する - LED を点灯させよう

More than 3 years have passed since last update.

PHPMake\Firmata を用いれば PC から Arduino を制御するプログラムを PHP で書くことができます。

Firmata とは

Firmata はシリアル通信を介してPC等のホストマシンから Arduino やその他マイコンボード等のデバイスを制御するためのプロトコルです。
PHPMake\Firmata は PHP によるホスト側の実装です。 PHP による実装は他にも carica-firmata があります。

Arduino を入手しよう

スイッチサイエンスのArduinoをはじめようキットがお手軽でいいかもしれません。このキットには下の回路図中のブレッドボード、ジャンパワイヤや抵抗、 LED やスイッチなどの基本的な部品が入っています。
とりあえずこのキットで始めてみて、物足りなさを感じた時に秋月電子などでお好みの部品を買い足すといいでしょう。

Arduino に Firmata スケッチをアップロード

Arduino IDE を起動し、メニューの
File > Examples > Firmata > StandardFirmata
を選択し、 StandardFirmata のスケッチを開き Arduino にアップロードします。
この際、つながれているデバイスを、メニューの Tools > Board から選択します。

upload-standard-firmata.gif

デバイスの名前について

PC に接続された Arduino はシリアルポートとして認識されます。
Linux, Mac ではデバイスファイルとして、 Windows ではデバイスマネージャの COM から確認できます。
それぞれ次のような名前になります。

  • Linux
    /dev/ttyACM* や /dev/ttyUSB* など
  • Mac
    /dev/tty.usb* や /dev/cu.usb* など
  • Windows
    COM*

PHP ライブラリの準備

PHPMake\SerialPort のインストール

PHPMake\Firmata はシリアル通信ライブラリ PHPMake\SerialPort に依存しています。先にこれをインストールする必要があります。
PHPMake\SerialPort ダウンロード・インストールを参照して下さい。
(上で挙げた carica-firmata も PHPMake\SerialPort が存在すればそれを使うようになっています。)

PHPMake\Firmata は composer に対応しているので、これを用いるのが簡便です。
次のような composer.json を用意し、

{
    "name": "phpmake/example-blink-led",
    "type": "project",
    "require": {
        "phpmake/firmata": "dev-master"
    }
}

さらに

$ composer install

とすれば準備完了です。
composer の詳しい使い方については https://getcomposer.org/ を参照して下さい。

LED を点灯させよう

以下のような回路を組んで LED を点灯させてみましょう。

arduino-led.png

LED をつなぐ際には足の長さに注意して下さい。
足の長いほうがアノード(+)側、短いほうがカソード(-)側となり、電流がアノード→カソードと流れるように接続します。
また、 GND との間に適当な大きさ(1kΩ程度)の抵抗をはさみます。(図中の抵抗は220Ωです)

ようやく PHP のコードです。
今回は次のようなシンプルなコード(blink-led.php)を用意しました。

<?php
require dirname(__FILE__) . '/vendor/autoload.php';

/* initialize the device */
$device = new PHPMake\Firmata\Device('/dev/ttyACM0');
/* for Windows */
// $device = new PHPMake\Firmata\Device('COM3');

$pin = 13;

for ($i = 0; $i < 3; ++$i) {
  $device->digitalWrite($pin, PHPMake\Firmata::HIGH); // light
  sleep(1);
  $device->digitalWrite($pin, PHPMake\Firmata::LOW); // unlight
  sleep(1);
}

実行しましょう。

$ php blink-led.php 

13ピンに接続した LED は光りましたか?
この例は examples/blink-led で確認できます。

Firmata はできる子

Firmata で出来ることはもちろんこれだけではありません。
センサーから値を読みだしたり、 LED を光らすにしても明るさを調整したり、サーボモーターを回したり、別のデバイスとシリアル通信したりとひと通りのことはできます。
回を改めてこれらの方法についても紹介していきたいと思います。

続き
PHP で Arduino を制御する - デジタル入力を読もう