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

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

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

公開日時:2016/05/15 14:41 最終更新:2021/06/09 11:07   HAL

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秒= 1,000ミリ秒= 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 カードを参照してください。

    記事リンク