ソケットサーバー「HAL」の概要~ SOCKET SERVER 'HAL'

ソケットサーバー「HAL」は、Raspberry Pi で動作するカスタマイズ可能なサーバーです。簡単なPHPコードを記述するだけで、誰でも簡単に Raspberry Pi を離れた場所から操作することが出来るようになります。

導入もとても簡単で難しい知識は必要ありません。LEDをチカチカさせてみたけど、次は何をしたらいいの? と思っている方、あなたの Raspberry Pi をあなたの手であなた好みのサーバーに作り上げてみませんか?

ソケットサーバー「HAL」の概要 (version 1.4対応版)

※2016/08/10追記 緑色 の文字は、version 1.4 で追加・改変された機能です。

ソケットサーバー「HAL」は Raspberry Pi で動作する、カスタマイズ可能なサーバーアプリケーションフレームワークです。ソケットサーバー「HAL」をセットアップすれば、プログラムに関する難しい知識がない方でも簡単なPHPコードを書くだけで Raspberry Pi を制御することが出来るようになります。

Raspberry Pi を買ってひとしきり遊んだが「さて、これからどうしよう?」とお考えの方はいらっしゃいませんか? ソケットサーバー「HAL」を使えば、あなたの Raspberry Pi で効率的なIoT活用が出来ます。ソケットサーバー「HAL」で、あなたの Raspberry Pi をもっと便利で楽しいデバイスにしましょう!

ソケットサーバー「HAL」の概要

ソケットサーバー「HAL」の概要

ソケットサーバー「HAL」は PHP で構築された軽量なサーバーアプリケーションフレームワークです。BSDソケットを用いたテキストベースの通信によって、あなたのアプリケーションや音声クライアントからの指示を受け取り、あなたが定義した処理を行います。どのような処理をさせるかはあなた次第です。

音声クライアントは Julius から送信された音声認識結果を HAL に伝えるクライアントプログラムです。Julius は日本の大学やIPAによって開発されているオープンソースの音声認識システムです。ソケットサーバー「HAL」を利用するにあたって必須ではありませんが、Julius を導入する事で HAL をより高度に扱うことが出来るようになるでしょう。

また、同様にオープンソースで開発されている音声合成ライブラリ「Open JTalk」を併用することで、対話型の IoT システムを、とても簡単に構築できるようになるでしょう。

サーバーフレームワークってなぁに?

サーバーフレームワークというのは、あまり聞き慣れない言葉です。ソケットサーバー「HAL」がどんなものなのかを知るには、実際にどんなプログラムを書く必要があるのかを知るのが一番手っ取り早いでしょう。

HALのプログラム例 ※version 1.3 まで

HALのプログラム例(準備中) ※version 1.4 から

このリンクでは、HAL にあなたが望んだことをさせるために、どんなプログラムを書けば良いのかをご紹介しています。こちらを一読いただければきっと、ソケットサーバー「HAL」がどんなアプリケーションであるか、どれほど簡単に思っていることを実現できるのかを大体御理解いただけるのではないかと思います。

必須条項

  • Raspberry Pi 本体 ※1
  • PHP 5.4以上(5.6を推奨。最新の Raspbian Jessie から apt-get で入る PHP は 5.6.22 です。 PHP7 は Loader の対応が待たれます)
  • Raspberry Pi、及び HAL に接続するシステムの IPアドレスの固定化
  • ionCube Loader のインストール

※1 RPi Model B+、RPi 2 Model B、RPi 3 Model B で動作を確認しています※2が、本製品ご利用にあたっては、念のためお試し版でお望みの動作をするかテストを行ってください。

※2 RPi Model B+ は CPU パワーが貧弱なため、Julius の動作によりパフォーマンスが大きく低下します。音声認識をさせつつソフトウェア PWM 信号を送信するなどの処理には不向きです。高速な CPU を搭載した Pi 2 以上であれば問題ないと思われます。詳しくは Raspberry Pi のパフォーマンス比較~B+と2Bの比較です を参照してください。

推奨条項

  • WiringPi、及び WiringPi-PHP のインストール
  • Julius
  • Open JTalk
  • eSpeak text to speech
  • Apache2(Apache2.4を推奨)

WiringPi 及び WiringPi-PHP が無くともサーバーとして利用することは可能ですが、あなたがやりたい事の殆どはかなり大変になるでしょう。ぜひインストールをおすすめします。

※なお、上記すべてのインストール方法は、Raspberry Pi 簡単セットアップマニュアル として纏められ、随時更新・追加が行われています。

HALの構成(version 1.3 まで)

HALのプログラムファイル構成は以下のようになっています。

HALのファイル構成

これらのファイルのうち、あなたが編集する必要があるのは赤い字のファイルのみです。それ以外は暗号化されていて編集できないか、大抵の場合編集する必要はありません。

HALの構成(version 1.4 以降)

HAL version 1.4 からは、ユーザー定義ファイルとシステム・コアファイルの分離が行われました。HALのファイル・ディレクトリ構成(version 1.4 以降) をご参照下さい。

導入方法

2016/08/10追記 Raspberry Pi への OS のインストールから HAL 実行に必要な一通りのインストールを行うための覚書を Raspberry Pi 簡単セットアップマニュアル に纏めました。最短でセットアップを行いたい場合はご参照下さい。なお、将来的には半自動で実行できるシェルスクリプトをご提供する予定です。

ソケットサーバー「HAL」は PHP プログラムのため、PHP の実行環境が必要です。PHP の実行環境をインストールして下さい。

>> ApacheとPHPのインストール

あとは HAL をフォルダごとお好きな場所にアップロードしてください。HAL は コマンドラインプログラムとして起動させるため、多くの PHP プログラムのように公開ディレクトリに置く必要はありませんし、置くべきではありません。上記の Apache のインストールで公開ディレクトリが /var/www/html ディレクトリに設定されている場合、例えば、/var/www ディレクトリに HAL を配置すると良いかもしれません。

ソケットサーバー「HAL」のプログラムは暗号化されているため、導入にあたってはデコード用ライブラリを導入する必要があります。ionCube社(イギリス)のサイトにある ionCube Loader のページから Raspberry Pi 用の Loader をダウンロードし、Raspberry Pi にインストールする必要があります。

ionCubeローダー

RPi用ローダー

>> ionCube Loader の導入

また、Raspberry Pi で GPIO を簡単に操作するためのライブラリである Wiring Pi と、それを PHP から操作するためのライブラリである WiringPi-PHP もインストールするととても可能性が広がります。

>> WiringPiとWiringPi-PHPのインストール

いずれも、簡単なコマンドを実行するだけでインストールできます。

HAL の設定

HAL の設定はとても簡単です。

まず、HAL を搭載した Raspberry Pi の IPアドレスの固定化を行ってください。あとは、固定化したIP アドレスを /HAL/setting/HALSetting.php ファイルの HAL_ADDRESS に記述するだけです。必要に応じて、HAL 及び Julius で使用するポートを変更することができます。デフォルトではそれぞれ 9001(以前は9000番に設定されていました)、10500となっています。詳しくは、HALSetting.phpの詳細をご確認ください。

HAL の起動

HAL の起動は、以下のコマンドを実行して下さい。

sudo php -q (HALディレクトリまでのパス)/system/hal.php

例えば、/var/www ディレクトリに HAL ディレクトリを設置した場合、コマンドは

sudo php -q /var/www/HAL/system/hal.php

となります。

Raspberry Pi の GPIO を PHP から操作するには root 権限が必要なため、上記のように sudo をつけて実行するか、su - コマンドで root としてログインしてから実行を行ってください。

Julius を音声認識エンジンとして利用する場合は、

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

のように -module オプションを付加し、モジュールモードとして起動します。上記の kaden は音声認識に利用する文法ファイルの指定です。文法ファイルの作り方や Julius の使い方については、

>>Julius の導入

>>Juliusによる音声認識~国産オープンソースライブラリの活用

をご参照ください。

-nostrip と -nolog はそれぞれ、Warning と 動作ログの出力を抑制するオプションです。(2016/05/22 追記)

Julius を利用する場合、Julius の音声認識結果を解析して HAL に伝達するための voice_client.php を起動する必要があります。

sudo php -q (HALディレクトリまでのパス)/system/voice_client.php

voice_client を起動すると、voice_client はまず、HAL とのコネクション接続を試行します。HAL との接続が確立すると、次は Julius との接続を試みます。このため、voice_client は HAL と Julius を起動した後に起動するようにして下さい。

HAL の起動について、詳しくは HALの起動方法 を参照してください。

また、HAL の起動と終了に際して実行したい事がある場合については、セットアップとクリーンナップ を併せてご参照ください。

HALの名前の由来

HALの名前の由来は、スタンリー・キューブリックの「2001年宇宙の旅」の人工知能 HAL9000 です。HAL のデフォルトポートが 9000番に設定されているのもこれに由来します。2001年宇宙の旅で HAL9000 は電源を切られることを恐れ乗務員を殺害しますが、ソケットサーバー「HAL」があなたに危害を加えるかどうかはあなたの書いたコード次第です。

なお、講談社のコミック「ハルロック」(西餅著)に登場するハルちゃんでは決してありません。

※ 加えて、余談ですが、本来の「ソケットサーバー」という用語は TCP や UDP の通信を中継するプロキシサーバーのような物を指すようです。ですから『ソケットサーバー「HAL」』というネーミングはあまり適切ではないので、そのうちに名称変更するかもしれません。


ご購入

ソケットサーバー「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 の書き方


HALの起動でエラーが出てしまいます

お名前:62ki

2016-05-31 15:41:21

こんにちは。 HALの体験版をインストールさせて頂きました。 手順通り設定をしたつもりですが、HALを起動きると PHP Fatal error: Call to undefined function Feijoa\\HAL\\wiringPiSetupGpio() となってしまいます。 Raspi 2 (Raspbian Jessie Lite)です。 何が原因なのか分かりません。 教えて頂ければと思います。

お名前:管理者ウェブサイト

2016-05-31 19:40:29

こんにちは。インストール有難うございます。とてもうれしいです。 ``` PHP Fatal error: Call to undefined function Feijoa\HAL\wiringPiSetupGpio() ``` このエラーは wiringPiSetupGpio() メソッドが PHP で認識されていないエラーですので、WiringPi か WiringPi-PHP が正常にインストールされていないのだと思います。 ###WiringPi の確認は、ターミナルやシェル画面で ``` gpio -v ``` で確認できます。こんなメッセージが返ります。 ``` pio version: 2.32 Copyright (c) 2012-2015 Gordon Henderson This is free software with ABSOLUTELY NO WARRANTY. For details type: gpio -warranty ``` ###WiringPi-PHP の確認は、ターミナルやシェル画面で ``` php -r 'phpinfo();' > check.txt ``` と入力すると、PHP で読み込まれているライブラリ情報を現在のディレクトリに check.txt というファイルで書き出してくれます。 そのファイルの中に、wiringpi の記述があるか確認して下さい。 恐らくですが、HAL の起動でエラーが出ているので CLI( コマンドラインモード) の方の WiringPi-PHP のインストールが正常に行われていないのかと思います。 もし上記を確認して問題ないようであれば、ぜひまたご連絡下さい。同じ問題が他の方でも発生するかもしれませんので、大変参考になります。 大変お手数ですが、何卒よろしくお願いいたします。

お名前:62ki

2016-05-31 22:07:01

返信ありがとうございます。 check.txtを確認したところ、wiringpiの記述がありませんでした。 再度WiringPi-PHPのインストールを試しましたが改善できませんでした。 私の知識ではどこで失敗しているのかは分かりませんので、OSのインストールからやり直してみたいと思います。ちなみにRaspbian Jessie Liteで問題ないのでしょうか?

お名前:62ki

2016-06-01 12:46:05

こんにちは。やはりどうしても同じエラーになってしまいます。Raspbian Jessie (通常版)でも試しましたが、エラーになってしまいます。

お名前:管理者ウェブサイト

2016-06-01 19:03:29

62kiさん おかしいですね。Lite での動作は確認していないので、ひょっとしたら bulid に必要なプログラムが Lite には入っていないのかとも思いましたが。 今週の土日にこちらでもOSの再インストールを行って確認してみます。 参考にされた WiringPi-PHP のインストールのページは [WiringPiとWiringPi-PHPのインストール](/work/hal/wiringPi/) こちらでよろしいでしょうか?

お名前:62ki

2016-06-01 20:24:24

こんばんは。返信ありがとうございます。 参考にさせて頂きましたページは間違いないです。 よろしくお願い致します。

お名前:62ki

2016-06-03 12:50:52

こんにちは。 もう一度WiringPi-PHPのページを確認しましたらシンボリックリンクの設定で手順では /etc/php5/cli/conf.d/mods-available/wiringpi.ini ですが、私の環境では /etc/php5/mods-available/wiringpi.ini となっていました。ここを修正してリンクを再設定しましたらHALが無事起動できました。これで良いのか分かりませんので、ご確認下さい。よろしくお願い致します。

お名前:管理者ウェブサイト

2016-06-03 19:38:45

62kiさん ご連絡ありがとうございます。  申し訳ありません。私の記述間違いですね。シンボリックリンクの記述の上の方で ``` sudo vi /etc/php5/mods-available/wiringpi.ini ``` として作成していますから、正しくは ``` sudo ln -s /etc/php5/mods-available/wiringpi.ini /etc/php5/cli/conf.d/30-wiringpi.ini sudo ln -s /etc/php5/mods-available/wiringpi.ini /etc/php5/apache2/conf.d/30-wiringpi.ini ``` こうですね。本当に申し訳ありません。 シンボリックリンクは実際にある wiringpi.ini へのパスを通すことが目的ですので、それで間違いないはずです。 明日か明後日に再確認します。 ご負担おかけして申し訳ありませんでした。

お名前:管理者ウェブサイト

2016-06-04 09:50:21

62kiさん やはり、私の記述間違いです。申し訳ありませんでした。 記事の方も修正致しました。

お名前:62ki

2016-06-04 15:55:22

ありがとうございます。HAL、面白そうですね。もう少し体験版で遊んでから製品版をダウンロードしたいと思います。

お名前:管理者ウェブサイト

2016-06-05 13:37:01

62kiさん コメントありがとうございます。ご迷惑をおかけして本当に申し訳ありませんでした。 記事の方ももっと精度を上げて書きたいこともたくさんあったのですがいままではなかなか時間がとれず、すいませんでした。 今月を超えれば時間がゆっくりとれるはずなので、どんどん記事を書きます。 [ラズベリーパイで作る省電力ライブカメラ(前編)](/laboratory/raspberrypi/cameraPrequel/) 前編は HAL なしでつくれる省電力ライブカメラです。後編では HAL を使ったライブカメラの記事にします。 それをつかって当サイトの配信を行うライブカメラを設置したら、次は温度計をつかって、日々の温度変化をDBに記録する方法の記事を書こうと思っています。 まだまだ書きたい記事ややりたい事たくさんありますので、楽しみにしていてくださいね。

この記事に返信

このコメントに返信