HALの設定~ SOCKET SERVER 'HAL'

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

ソケットサーバー「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/32
static routers=192.168.1.1
static domain_name_servers=192.168.1.1

のように記述することで行えます。192.168.1.15/32 は CIDR 表記で 192.168.1.15 のみを指定することになり、そこに固定されます。

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 カードを参照してください。


ご購入

ソケットサーバー「HAL」は以下のオンラインショップでご購入いただけます。ご購入に先立っては、ぜひ、体験版で動作の確認をお願いいたします。

体験版

ソケットサーバー「HAL」の体験版をダウンロード
hal_trial version 1.5
試用期限 2016/11/30 まで
※ sudo wget -O hal_trial_1_5.tar.gz 'http://feijoa.jp/getFile/?place=products&filename=hal_trial_1_5.tar.gz' でもダウンロードできます。
HAL の IP アドレス制限を解除してライセンス制に変更しました。お好きな IP アドレスで HAL をお試しいただけます。なお、ライセンスされていない製品では起動から 40 時間後に HAL は自動終了します。

この記事へのコメント

※現在コメントはMarkdown記法が強制です。>>Markdown の書き方


この記事に返信

このコメントに返信