HAL の起動時または終了時に、何らかの特別な処理を行いたい場合もあるでしょう。SetUp.php と CleanUp.php は、これらの処理を記述するためのファイルです。

あなたのアプリケーションに合った処理を記述して下さい。

※この記事で紹介しているソケットサーバー『HAL』は、諸般の事情により現在、公開と販売を中止しています。この製品へのお問い合わせは画面上部の『お問い合わせ』メニューよりご連絡ください。

※この記事は執筆・公開から3年以上経過しています。記事の情報が古くなっている場合がありますのでご注意ください。

公開日時:2016/05/15 14:42
最終更新:2019/12/10 04:31

セットアップとクリーンナップ

HAL を起動する際、何らかの初期設定を行いたい場合もあるでしょう。

setting ディレクトリ内にある SetUp.php ファイルは、HAL の起動時、必要なライブラリの読み込みが終わった後にすぐに実行されます。

GPIO の設定などは、このファイルの中で行うと良いでしょう。以下に、デフォルト状態の SetUp.php ファイルの内容を記します。

このファイルの設定は、あなたが望む値に好きに変えていただいて構いません。あなた好みのセッティングをしてください。

SetUp.php

<?php
/* *
 * 
 * socket server HAL v1.1
 * 
 * (c) 2016 Katsuhiko Miki
 * 
 * */
namespace Feijoa\HAL;

class SetUp
{
    public static function exec(HALDto $dto)
    {
        wiringPiSetupGpio();

        // SPI通信用の入出力を定義
        pinMode(HAL::SPICLK, HAL::OUTPUT);
        pinMode(HAL::SPIMOSI, HAL::OUTPUT);
        pinMode(HAL::SPIMISO, HAL::INPUT);
        pinMode(HAL::SPICS, HAL::OUTPUT);

        pinMode(HAL::GPIO_SPEAKER, HAL::PWM);
        pwmWrite(HAL::GPIO_SPEAKER, 0);
        pinMode(HAL::GPIO_LED, HAL::OUTPUT);
        digitalWrite(HAL::GPIO_LED, HAL::LOW);
    }
}

exec メソッドの冒頭にある

wiringPiSetupGpio();

は、WiringPi を GPIOピンで指定するモードで初期化を行うメソッドです。

WiringPi のデフォルトは WiringPi 専用のピン番号での指定になっています。このピン番号は、Raspberry Pi に付属する GPIO カードのピン番号とは異なるため、少々不便です。

wiringPiSetupGpio() で初期化を行うと、GPIO カードの GPIO ピン番号で指定できるため、何かと便利です。

詳しくは、WiringPi のサイトのSetupページを参照して下さい。(※英語です)

pinMode()

メソッドは、各 GPIO ピンについて動作モードを指定しています。0 が入力、1が出力、2が PWM 信号モードです。

HAL:: で始まる値については、HALの設定を参照してください。この値は、0や1のように、直接数値を指定しても問題はありません。

このほか、GPIO 以外のあなた特有の初期設定も、このファイルの exec() メソッド内に記述すると良いでしょう。

CleanUp.php の説明

setting ディレクトリ内にある CleanUp.php は、SetUp.php とは反対に、HAL が終了する際、待受けソケットを閉じた直前に実行されます。

このファイルの exec() メソッドでは、例えば、使用した GPIO ピンのクリーンアップ等を行います。

以下に、CleanUp.php の内容を記します。

CleanUp.php

<?php
/* *
 * 
 * socket server HAL v1.1
 * 
 * (c) 2016 Katsuhiko Miki
 * 
 * */
namespace Feijoa\HAL;

class CleanUp
{
    public static function exec(HALDto $dto)
    {
        pwmWrite(HAL::GPIO_SPEAKER, 0);
        digitalWrite(HAL::GPIO_LED, HAL::LOW);

        // JULIUSプロセス終了
        exec("pkill -f 'voice_client.php'");
        exec("pkill -f 'julius'");
    }
}

上記の例では、使用していた PWM 信号用のピンに 値 0 を出力し、LED 用のピンに LOW を設定しています。このようにしないと、HAL が終了した後も LED が光り続けたり、接続してあったスピーカーから音が鳴り続けたりします。

exec("pkill -f 'voice_client.php'");
exec("pkill -f 'julius'");

については、起動している Julius と voice_client のプロセスを終了させています。

もしあなたが HAL で他の GPIO ピンを利用したり、何か別の処理をさせているのなら、この CleanUp.php の exec() メソッド内に、その後処理を記述して下さい。

記事リンク