HAL の設定はとても簡単です。ほとんどの場合、HAL が動作する Raspberry Pi の IP アドレスを指定するだけで動作します。ここでは、ほんの少しだけ、もう少し詳しく設定ファイルについて説明します。

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

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

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

HALの設定

※この設定ファイルは、version 1.4.x までの物です。最新版の設定ファイル記事はまだ書き上がっていません。

ソケットサーバー「HAL」の設定ファイル HALSetting.phpの詳細 は、以下のようになっています。

このページの内容は特に覚える必要はありません。必要になった時に参照してください。

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

class HAL
{
    // HALを起動するRaspberry PiのIPアドレス
    const HAL_ADDRESS = "192.168.1.12";

    // HAL接続許可IPアドレス(CIDR表記が利用できます)
    const ALLOWED_IP = array("192.168.1.5");

    // HALプロセス終了許可IPアドレス(CIDR表記が利用できます)
    const ADMIN_IP = array("192.168.1.5");

    // HALを起動するポート番号
    const HAL_PORT = 9000;

    // JULIUSのモジュールモード動作用ポート番号
    const JUILUS_PORT = 10500;

    // JULIUS音声識別結果有効しきい値
    const JULIUS_TRUST = 0.75;

    // ソケット待ち受けインターバル(マイクロ秒)
    const SYSTEM_INTERVAL = 200000; // 200ミリ秒

    // ソケット読み込み最大バイト数
    const MAX_READ_BYTES = 2048;

    // ソケット読み込み最大バイト数(JULIUS用)
    const JULIUS_MAX_READ_BYTES = 2048;

    // HALプロセス終了パスワード
    // ※プレーンテキスト、又は password_hash() で生成された PASSWORD_DEFAULT のパスワードハッシュが利用できます。
    const KILLING_WORD = '$2y$10$neuqKchyTRMN6ma7SA5QIepaV5kD3Bg46Zu6ROzp//GN1KK9gg3iW';    //'close sesame';

    // ログ出力フラグ
    const OUTPUT_LOG = true;

    // 使用メモリ量出力フラグ
    const MEMORY_LOG = true;

    // GPIOピンモード定義
    const INPUT = 0, OUTPUT = 1, PWM = 2;

    // GPIOステータス定義
    const HIGH = 1, LOW = 0;

    // SPI通信用GPIOピン番号
    const SPICS = 8, SPIMISO = 9, SPIMOSI = 10, SPICLK = 11;

    // LED用GPIOピン番号
    const GPIO_LED = 25;

    // 圧電スピーカー用GPIOピン番号
    const GPIO_SPEAKER = 18;

    // 圧電スピーカー用周波数
    const   TONE_A0 = 135,
            TONE_B0 = 160,
            TONE_C1 = 190,
            TONE_D1 = 240,
            TONE_E1 = 265,
            TONE_F1 = 315,
            TONE_G1 = 365,
            TONE_A1 = 390,
            TONE_B1 = 415;
}

このファイルは、HAL というクラスを定義しています。const は、PHP で定数を設定するための命令です。

const HAL_ADDRESS = "192.168.1.12";

とすることで、HAL というクラスの HAL_ADDRESS という名前の定数として、192.168.1.12 を設定しています。こうすることで、PHP コード内で HAL::HAL_ADDRESS と記述するだけで 192.168.1.12 という値を取得できるようになります。

192.168.1.12 という値だけを見た場合何の値なのかわかりませんが、HAL::HAL_ADDRESS という名前でその値を参照することで、プログラムコードに意味を持たせることが出来るようになります。

例えば、Raspberr Pi の GPIO 25番ピンに LED を接続する場合、25 という数字で直接 GPIO ピンを参照するよりも、この HAL クラス内に

const GPIO_LED = 25;

と定義して、プログラムコードで HAL::GPIO_LED としてアクセスした方が何を操作したいのかが明確になり、時間が経った後でも内容が把握しやすくなります。

なお、定義する名前は自由につけることができますし、必ずしも大文字でなければならないわけではありませんが、慣例として定数には大文字を用いるのが一般的です。

HAL::HAL_ADDRESS

HAL_ADDRESS は、HAL を実行する Raspberry Pi の IP アドレスを設定して下さい。IP アドレスは、

ifconfig

コマンドで確認できます。HALSetting.php を書き換える必要が無いよう、Raspberry Pi の IP アドレスを固定化しておくのをおすすめします。

現在の Raspbian jessie での IP アドレス固定化については、有線LANの場合、

sudo vi /etc/dhcpcd.conf

で、ファイル末尾に

interface eth0
static ip_address=192.168.1.15/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

のように記述することで行えます。192.168.1.15/24は CIDR 表記で、IPアドレスを192.168.1.15、 参加するネットワーク範囲を192.168.1.1~254 に指定しています。

CIDR 表記

static routers=192.168.1.1 がルーターのアドレスになりますので、お使いのルーターに合わせ、同じネットワーク内になるよう IP アドレスを調整して下さい。

HAL::ALLOWED_IP

HAL に接続できる IP アドレスを配列で記載して下さい。ここに記載された IP アドレスと、自分自身(HAL::HAL_ADDRESS)以外の IP アドレスからの接続要求は拒否されます。

IP アドレスには直接指定の他、CIDR 表記が利用できます。例えば次の設定の場合、192.168.1.3、及び 192.168.1.5と、HAL::HAL_ADDRESS からの接続のみが許可されます。

const ALLOWED_IP = array("192.168.1.3", "192.168.1.5");

次の設定の場合は、CIDR 表記により 192.168.1.0 から 192.168.1.3 までの 4 つのアドレスと、HAL::HAL_ADDRESS からの接続のみが許可されます。

const ALLOWED_IP = array("192.168.1.0/30");

HAL::ADMIN_IP

ソケットサーバー「HAL」のプロセスを終了できる IP アドレスを記述します。IP アドレスには直接指定の他、CIDR 表記が利用できます。

HAL::HAL_PORT

ソケットサーバー「HAL」での待受けを行うポート番号を指定します。ポートは他のプロセスが使用しないポートであれば何でも構いません。

HAL::JUILUS_PORT

Julius をモジュールモードで起動する際に利用するポート番号を指定します。例えば、Julius で 9002 番ポートを使用したいときはこの値を 9002 に設定し、

julius -C /home/pi/julius-kits/grammar-kit-v4.1/hmm_mono.jconf -input mic -gram /home/pi/kaden -module 9002

のように、-module オプションにポート番号を付加して起動します。

HAL::JULIUS_TRUST

Julius の音声認識結果を信用するしきい値を指定します。Julius は音声認識結果の信頼性を 0 から 1 までの実数で報告してくれます。この信頼度が HAL::JULIUS_TRUST 以上の場合に、HAL は音声認識結果を信頼し、juliusActions.php の JuliusActions::action() メソッドにメッセージを伝達して処理を行います。

デフォルトの 0.75 は、比較的甘めです。ご自身の声の解析のしやすさに合わせて値を調整して下さい。

HAL::SYSTEM_INTERVAL

HAL がソケット通信内容の検査やセンサーでの検知をする間隔を指定します。この数値を小さくするほど、HALは頻繁にそれらを行うため、CPU負荷が高くなります。

数値はマイクロ秒で指定します。1秒= 1000ミリ秒= 1,000,000マイクロ秒

MAX_READ_BYTES

HAL がソケット通信内容を読み込む時の最大バイト数です。この値を大きくするほど一度に沢山の情報を送れますが、処理に時間がかかるようになります。

JULIUS_MAX_READ_BYTES

voice_client.php が Julius からの送信内容を読み込む時の最大バイト数です。この値を大きくするほど一度に沢山の情報を取得できますが、処理に時間がかかるようになります。

KILLING_WORD

HAL を停止するためのパスワードです。このパスワードが送信されても、HAL::ADMIN_IP に記載のない IP アドレスからの命令は受け付けません。

プレーンテキスト、又は password_hash() で生成された PASSWORD_DEFAULT のパスワードハッシュが利用できます。

OUTPUT_LOG

HAL の処理にあたり、実行ログを標準出力に出力するか否かを boolean で指定します。出力しない場合は、false を指定して下さい。

MEMORY_LOG

HAL の処理にあたり、現在 HAL が使用しているメモリ容量を出力するか否かを boolean で指定します。出力しない場合は、false を指定して下さい。

HAL::INPUT, HAL::OUTPUT, HAL::PWM

Raspberry Pi の GPIO ピン動作モード定義です。

HAL::HIGH, HAL::LOW

Raspberry Pi の GPIO ピンに出力する値の定義です。

HAL::SPICS, HAL::SPIMISO, HAL::SPIMOSI, HAL::SPICLK

Raspberry Pi で SPI 通信を行うためのピン番号設定です。どのピンに該当するかはRaspberry Pi 付属の GPIO カードを参照してください。

記事リンク