小型Linuxサーバ / GuruPlug Server

この記事は2012年8月8日から2013年7月1日の間に「GuruPlugServer Facebook」で紹介したものです。

#2 初級編 いろいろなものをつないでみよう

#2-1 USBメモリを利用してみよう

今回の記事は「USBメモリを利用してみよう」です。

GuruPlugの初期の空き容量は「そもそもguruplugって?」にも記載のある通り、259MB程度です。
ご利用用途にもよりますが、画像ファイルや音楽ファイル・動画ファイルなど容量の多いファイルを保存するには少しこころもとないですね。

そんな時はUSBメモリを使ってみましょう!
最近ではUSBメモリも容量の大きな物もかなりお手頃な価格で購入することができます。
ではさっそくGuruPlugにUSBメモリを差してみましょう。

差してみると、どうやらすぐにUSBメモリを認識してくれたようです。

USBメモリの容量やマウントされた位置を確認してみましょう。
※マウントとはコンピュータに接続した周辺機器や外部記憶装置をOSに認識させ、利用可能な状態とすることです。

ディスクの情報は【df】コマンドで確認することができます。それにオプションで「-h」をつけると人間が見やすい形式で結果を出力してくれます。
では、さっそく【df -h】を実行してみましょう。

すると、どうやら【/media/usb0】の位置にマウントされているようです。容量は1.9ギガバイトで使用している容量は0バイトのようです。
せっかく認識してくれたので、中に移動してみましょう。【cd /media/usb】で中に移動することができます。
いつものごとく【ls】コマンドで中身をチェックしましょう。
当然新しいUSBメモリを利用しているので中身は空です。
何かファイルを入れないとUSBメモリの意味がないので、少し容量の大きめな音楽ファイルなど入れてみましょう。
WindowsPCを使ってファイルを入れてみようと思うので、USBメモリを抜いてみましょう。

JTAGを利用していると抜いたときにも知らせてくれるようですね。
WindowsPCでファイルを入れて、GuruPlugに差し直してみます。
先ほどと同じ場所にマウントされるので、同様の手順で中身を確認してみましょう。

無事にファイルが中に入っているのが確認できます!
しかし、このファイルはroot以外のユーザには書き込みの権限がないようです。
場合によっては不便なこともあるかもしれません。
ファイルの権限を変更してみましょう。
権限を変更するコマンドは【chmod】です。

【chmod 777 orgel.mp3】を実行してみましょう。
※ファイル名は適宜読み替えてください。

コマンドを実行しても、ファイルの権限が変わりませんね。

どうやら、調査してみるとGuruPlugでは"usbmount"というパッケージを利用してusbの自動認識をしているようです。
その設定があやしい、ということで確認してみました。

確認してみると、やはり"usbmount"の設定でマウント時に権限が決まるようです。

それならば、設定を変更してみましょう!
設定ファイルは"/etc/usbmount"内にある"usbmount.conf"というファイルです。
さっそく開いてみましょう。
【vi /etc/usbmount/usbmount.conf】で開くことができます。

設定ファイル内の「FS_MOUNTOPTIONS」という設定を変更する必要があるようなので、「FS_MOUNTOPTIONS」を検索してみます。
【/FS_MOUNTOPTIONS】をviエディタのコマンドモードで実行すると、設定個所が見つかります。
初期状態では何も設定がなされていないので、そこに設定を書き加えましょう。
書き加える設定は「-fstype=vfat,dmask=0000,fmask=0000」です。

ファイルを書き加えると、書き加えた設定ファイルはこんな感じになります。

では、設定ファイルを保存して、USBメモリを差し直してみましょう。先ほどと同様の手順でファイルの権限を確認してみると…

無事にファイルの権限が変更されています。
これでファイルの共有なども便利に使えるかもしれませんね。

【まとめ】
USBメモリは無事に利用できるようになったでしょうか?
今回の様にUSBメモリを利用すれば容量をかなり大きくすることができます。
USBメモリの利用によって、GuruPlugができることもかなり増えるかもしれませんね。

#2-2 WEBカメラをつなげてみよう

今回はGuruPlugとWEBカメラをつなげて、ブラウザで動画を見る方法をご紹介します!

早速WEBカメラとGuruPlugをつなげてみましょう。
*WEBカメラはUVC対応のものにしましょう。

すぐに認識してくれました。

【cd /dev】の下に「video0」ができていることを確認して下さい。
LinuxでWebカメラを使うには「motion」か「mjpg-streamer」というアプリケーションが便利なようです。
「motion」の場合は、動体検知をして動きがあった場合にだけ録画をすることもできます。
また、一定時間ごとに画像をキャプチャすることもでき、インターバル撮影もできます!
「mjpg-streamer」の場合、コンパイルの必要がありますがアンドロイド端末で動画を見ることも可能です。

今回は「motion」を利用したいと思います。

まずは「motion」のインストールからです。
下記のコマンドを実行して、
apt を使って動体検知ソフトの Motion 、
動画を配信するウェブサーバー(apache2)と PHP、
動画変換を行うマルチメディアコンバータ ffmpeg の
インストールを行います。

【sudo apt-get -y install motion apache2 php5 ffmpeg】

「いくつかのアーカイブが取得できません。apt -get updateを実行するか」と出てしまったので、
【apt -get update】を実行してみましょう。

「ダウンロードに失敗しました」と出てきてしまいました…
どうすればいいんでしょう。

調べてみると、
パッケージのインストール・アンインストールを行うには下記のコマンドを打つ必要がありました。
【dpkg --configure -a】

そして再度「Motion」のインストールを行って下さい。
【sudo apt-get -y install motion apache2 php5 ffmpeg】

これで大丈夫そうです!
早速「motion」を実行してみましょう。
「motion」実行コマンド【motion】を打つと、

「Started stream web cam server in port 8081」
と出てきます。
この「8081」ポートにアクセスして、ブラウザで動画を見てみましょう。
「192.168.1.1:8081」に接続します。

何も写っていません…
「motion」の設定ファイルを変更しましょう。

【cd /etc/motion】の下にいき、「motion.conf」を開いて下さい。

ブラウザで動画を観る場合、「webcam_localhost on」にする必要がありました。
もし、「webcam_localhost」が探し出せなかったら
「motion.conf」内で「/webcam_localhost」で発見して下さい。

再度、「192.168.1.1:8081」に接続すると

あ、写っていますー!

画質はあまり良くないですね。
また、画像が何枚も保存されていてこのままでは容量がなくなってしまいます。

少しmotionの設定を変えてみましょう。

【cd /etc/motion】の下にいき、「motion.conf」を開いて下さい。
画像ファイルを保存しない設定は、「output_normal off」にしましょう。

また、画質も悪かったのでライブ画像の画質設定も変更しましょう。
画質設定は「webcam_quality 150」にします。

100から150にした結果、少し見やすくなった気がしますね。

【まとめ】
皆さんGuruPlugとWEBカメラはつなげられましたか。
WEBカメラを利用できれば、応用が効きそうですね!
外出中ペットを監視したり、旅行などで家を空ける場合の防犯対策として利用したり、
植物の観察日記をつけたりもできそうです!
ぜひ挑戦してみて下さい^^

#2-3 カードリーダを使ってみよう

今回は、「カードリーダを使ってみよう」です。
GuruPlugとカードリーダをつなげて、GuruPlugがカードリーダを認識してくれるまでの工程をご紹介いたします。

今回使用するカードリーダは、東京駅八重洲口近くにある「RFID/NFC Real Touch Shop」で購入できます。
「RFID/NFC Real Touch Shop」ではRFID/NFCの色々なタグやリーダの実機がひととおり揃っているようです。

今では、シールタイプのRFIDのICタグがありますね。(SuicaやPasmoに相当します)
最近発売された携帯にはNFCというカードリーダ機能が付いたものが多くあります。
なので、RFIDのICタグにAndroid携帯をかざすとAndroid携帯がカードリーダに様変わりし、
IDを取り込むことができるようです。

また、外にあるポスターには、シールタイプのRFIDのICタグが貼ってあり、
スマホをかざせば、クーポンがゲットできるポスターもあるそうです。
企業様もいろいろと工夫をされていますね。

こちらのショールームには、弊社のGuruPlugも展示しておりますので、
東京駅に行く際は、ぜひお立ち寄りください^^
http://www.facebook.com/RealTouchShop

今回GuruPlugにつなげるカードリーダは「ACR122」というUSB接続するタイプのカードリーダです。

さて早速、GuruPlugにカードリーダをつなげてみましょう!

やっぱり、カードリーダの電源は点かず、認識してくれていないようですね。

カードリーダの認識に必要なドライバやライブラリのインストールをしなくちゃいけませんね。

下記のドライバやライブラリのインストールをします。
【apt-get install libftdi1 libftdi-dev】
【apt-get install libusb-0.1-4 libusb-dev】
【apt-get install pcscd libccid】
【apt-get install libpcsclite-dev libpcsclite1】

すると…GuruPlugがカードリーダを認識して、カードリーダの電源が点きましたね^^

せっかくカードリーダがつながったので、SuicaやPasmoのカードIDを読み取ってみたいですね!

今の段階では、もちろんカードリーダにSuicaやPasmoをかざしても、
GuruPlugがIDを取得することはできません。
なので、GuruPlugにIDを取得するプログラムを組み込む必要がありますね。

#2-4 SuicaやPasmoのIDを読み取ろう」につづく^^/

#2-4 SuicaやPasmoのIDを読み取ろう

#2-3にて、「カードリーダを使ってみよう」の記事を掲載しました。
せっかくGuruPlugとカードリーダがつながったので、
本日はカードリーダを使用してSuicaやPasmoのカードIDを読み取ってみましょう。

下準備として「#2-3 カードリーダを使ってみよう」でご紹介した、
カードリーダの認識に必要なドライバやライブラリがインストールされているものとします。

さて早速始めましょう!

今回はカードIDを読み取るサンプルプログラムを作成してみました。
サンプルプログラムはC言語で出来ていますので、ご興味ある方は内容をご覧下さい。

サンプルプログラムのリンクはこちら↓
www.jspnet.co.jp/guruplug/download/cardreader_sample.tar.gz

こちらの解凍ファイルをFTPでGuruPlugに転送します。

続いて、GuruPlugの中に入り、転送したファイルを解凍しちゃいましょう^^

tar zxvf ./cardreader_sample.tar.gz

解凍すると、【rfid】というディレクトリが作成されていますね。

続いてはコンパイル作業に入ります。
C言語のコンパイラは【gcc】コマンドで行います。
【gcc】コマンドはもともとGuruPlugの中にインストールされていませんので、インストールが必要です。

apt-get install gcc

これでコンパイルできる環境は整いましたね。
コンパイルは、サンプルプログラムのバッチファイル(make.bat)を実行してください。
珍しく順調に進んでいますね^^

少し、バッチファイルの中身を見てみましょう。

一行目:./idgetがあれば削除します。
二行目:【gcc】コマンドでコンパイルして、オブジェクトファイルを生成します。
四行目:【gcc】コマンドでオブジェクトファイルをリンクして実行ファイルを生成します。
七行目:【chmod】でidgetの権限を「777」にして、読み取り・書き込み・実行の権限を付与しています。

さてコンパイルです。

cd rfid

./make.bat

でコンパイルできました!

【ls】で【idget】があることを確かめて下さい。
では、さっそくコンパイルして出来た【idget】を実行してみましょう。

./idget

そして私のPasmoをかざすと…

ちゃんとIDが出てきましたー
成功ですね^^

私はiPhoneを使用しているので、弊社社員のAndoroidを貸してもらいかざしてみると…

ちゃんとIDがでますねー
読み取りが早いですね!!

このC言語で作成したサンプルプログラムを上手く利用すれば、ICカードを使ったユーザ管理が出来そうですね!

例えば、このユーザ管理機能を利用して出勤退勤管理をGuruPlugとカードリーダを使って実現できますね!!

今回使用したカードリーダは、「#2-3 カードリーダを使ってみよう」でご紹介した
東京駅の八重洲口近くにある「RFID/NFC Real Touch Shop」で購入できます。
Guruplugと今回使用したカードリーダで開発した、
タイムカードのシステムも展示していただいています。

東京駅に行く際は、ぜひ「RFID/NFC Real Touch Shop」までお立ち寄り下さい^^
http://www.facebook.com/RealTouchShop

#2-5 Relayを動かしてみよう

今回はUSB Relay Controllerを使ってリレーを動かしてみたいと思います。
リレーとは、簡単にいうと 電源のON-OFFを制御できるスイッチです。

リレーは断電器ともいい、 電磁石と接点機構で構成されています。
仕組みはコイルに電流が流れた時に生じ 電磁石の電磁吸引力を利用して、接点機構の作動を行います。
接点機構の動作で電源のON-OFFを制御しています。

USB Relay ControlleはUSBになっているのでGuruPlugとつなげて何かできそうですね^^

さて早速GuruPlugとUSB Relay Controllerをつなげてみましょう。
GuruPlugがちゃんと認識してくれましたね。
もともとGuruPlugにはUSBのドライバーが入っているのでインストールする必要はありません。

cd /dev

の下に行き

ttyUSB0

が表示されていることを確認して下さい。

ttyUSB0

が表示されていれば、ちゃんとUSB Relay Controllerが認識されています。

続いて【lsusb】コマンドを実行します。
【lsusb】コマンドはUSBに接続されているデバイスを簡単に調べることができるコマンドです。

lsusb

実行すると、USB Relay Controllerの情報が出てきました。
IDに注目して下さい。USBにはベンダーIDとプロダクトIDというコードあります。

最初の【0403】がベンダーIDです。
次の【6001】がプロダクトIDになります。

このベンダーIDとプロダクトIDはUSB機器をパソコンに接続した際に接続された機器を特定するために使用されます。
ベンダーIDは、各企業や会社毎にUSBインプリメンターズ・フォーラムから発行され、
プロダクトIDは、ベンダーIDを持つ企業や会社が各製品や機種毎に重複しないよう割り振るコードのようです。

もしGuruPlugのように複数のUSBポートがあったら、識別するのにベンダーIDとプロダクトIDは使えそうですね。

さて早速リレー装置のon/offスイッチを制御してみましょう。
まずはスイッチのonスイッチです。

echo -e '\xff\x01\x01' > /dev/ttyUSB0

【echo】コマンドで0xff,0x01,0x01という3byteのコードを
【/dev/ttyUSB0】というデバイス(ここでは、USB Relay Controllerのこと)に送っています。
*【/dev/ttyUSB0】はフルパスを指定して下さい。

みなさんスイッチはonになりましたか?

続いてはoffの制御です。

echo -e '\xff\x01\x00' > /dev/ttyUSB0

上記を実行していただくとoffになりますね。
Onと違う箇所は、【'\xff\x01\x00'】の末尾が0か1かの違いです。0だとoffで1だとonになります。

どうでしたか?結構簡単にリレーの制御が出来ましたね。

もともとリレーは、弊社の自社開発の見守り製品で活躍してくれています。
見守り製品は、見守りを開始して何か異常があった場合にお知らせする機能があります。
アラートが鳴るような設定ができます。アラートは見守るクライアントPCから鳴ります。

リレーとナースコールをつなげて、
アラートが鳴ったら異常が発生したらリレーをonにしてナースコールを鳴らすようにしています。

便利ですね!

ぜひGuruPlugとリレーをつなげて何かやってみて下さい^^

#2-6 GuruPlugにBluetooth機器を接続してみよう

今回は、GuruPlugにBluetooth機器を接続してみたいと思います。

GuruPlugはBluetoothに対応しているので、
Bluetooth対応ヘッドセットなどが接続できるはずです。

さぁ、やってみましょう!

と、言っても、、、、
わたくし、LinuxでBluetoothをあつかったことがないので、、
簡単な操作を学びながら作業を進めていきたいと思います。

今回の記事では、、
GuruPlug上でコマンド操作をして、Bluetooth機器のペアリングを行いたいと思います。
ペアリングとは、2台のBluetooth機器の接続設定を行なうことです。
1台はGuruPlugで、もう1台は適当なBluetooth機器です。
GuruPlugからBluetooth機器を使えるようにするということですね。

手順は次のとおりです、
【手順1】 GuruPlugの近くにあるBluetooth機器を探す。
【手順2】 GuruPlugとペアリングする。

ハードウェアとして次の方々が登場します。
・GuruPlug、
・作業用パソコン、
・Bluetooth機器

Bluetooth機器は、音声会議用マイク・スピーカー「R-Talk 800EX」を使います。

「R-Talk 800EX」は、NTT-AT製のBluetooth対応の音声会議用マイク・スピーカーです。
弊社は「R-Talk 800EX」の販売代理店をさせていただいております。
!(^o^)!

機材が揃いました。やってみよう!

【手順1】GuruPlugの近くにあるBluetooth機器を探す。
まずは、GuruPlugが搭載しているbluetoothの情報を確認してみましょう。
「hciconfig」というコマンドを実行して確認してみます。

# hciconfig

何か出力されましたね。

=======================================
hci0: Type: BR/EDR Bus: SDIO
     BD Address: 00:90:A2:4A:BC:07 ACL MTU: 1021:7 SCO MTU: 120:6
     UP RUNNING PSCAN
     RX bytes:24571 acl:79 sco:0 events:613 errors:0
     TX bytes:350567 acl:466 sco:0 commands:57 errors:0
=======================================

Bluetoothインタフェースの状態やBluetooth機器のBDアドレスが出力されています。
「UP RUNNING PSCAN」と出力されていますね。起動状態のようです。
また、「BD Address: 00:90:A2:4A:BC:07」と出力されていますね。

これがBDアドレスです。
BDアドレスとは、Bluetooth機器を識別するためのアドレスです。

「ふぅ~ん・・・」という感じですが、
GuruPlugでBluetoothインタフェースが使えそうな雰囲気です!
きっといけます!(^^;)

では、Bluetooth機器を探してみましょう。
先に登場した「R-Talk 800EX」の電源を入れて、
GuruPlugの近くに置いて、GuruPlugが探し出してくれるか試してみましょう。

Bluetooth機器を探す際は「hcitool」というコマンドを使います。
「hcitool」コマンド実行時の引数に「scan」と指定して実行することで、
Bluetooth機器が探せます。

# hcitool scan

何か出力されましたね。

=======================================
Scanning ..    64:27:37:F7:FB:2E    JSP101
=======================================

なんだろう・・・。
BDアドレスらしきものと「JSP101」という文字が。
あ、これ、Bluetooth対応のPCだ!
「R-Talk 800EX」が見つからないじゃないですか・・・。
「R-Talk 800EX」の電源は入っているのに。
もしかしたら、ペアリングの準備をしておかないと見つからないのかも。

「R-Talk 800EX」の説明書を読んでみました。
Bluetoothを使うときは、前面のパネルの「Bluetooth」というボタンを
押さなければならないようです。

あはは(^^;)

「ポチ」っとなぁ!

「Bluetooth」ボタンが点滅しだしました。
今度こそ・・・。
気を取り直して、再度探してみましょう!

=======================================
Scanning ...
    00:01:90:EF:A4:85    R-Talk
    64:27:37:F7:FB:2E    JSP101
=======================================

おぉ!「R-Talk」という文字が!
GuruPlugが、「R-Talk 800EX」を見つけたのですね!
「R-Talk 800EX」のBDアドレスは「00:01:90:EF:A4:85」ってことか。

あれ、「Bluetooth」ボタンの点滅が消えた・・・。
なるほど、見つけるだけじゃダメなんですね。
ペアリングをしなければ。

【手順2】GuruPlugとペアリングする。
さぁ、ペアリングです。
先に記した通り、
「わたくし、LinuxでBluetoothをあつかったことがない・・・」
ので、いろいろ調べてみました。

調べてみたところ、先に登場した「hcitool」コマンドを使えば、
ペアリングが出来るようでした。
なので、いろいろ試したのですが、出来ませんでした。。。

行き着いたのが、pythonのプログラムを使用したペアリング。
python-bluezパッケージに含まれるライブラリを使用して
pythonのプログラムを書くと、Bluetooth機器の制御が
できるのです。(できました。)

今回はpythonのプログラムを実行してペアリングをします。
作ったプログラムファイルはbluetooth_pairing.pyです。

下記のURLからダウンロードできます。
https://www.jspnet.co.jp/guruplug/download/bluetooth_pairing.py

GuruPlugがインターネットにつながっているのであれば、
wgetコマンドを使って直接ダウンロードしても良いですね。

例)
# wget https://www.jspnet.co.jp/guruplug/download/bluetooth_pairing.py

このpythonスクリプトですが、動作には下記のパッケージが必要です。
・python-bluez
・python-dbus
dpkgコマンドでパッケージのインストール有無を確認して、
インストールされていない場合は、apt-getコマンドを使用してインストールしてください。

使い方は、下記の通りです。

# python bluetooth_pairing.py 【ペアリング対象機器のBRアドレス】 【エイリアス名】

【ペアリング対象機器のBRアドレス】には、
「R-Talk 800EX」のBDアドレス「00:01:90:EF:A4:85」を入力します。
【エイリアス名】には任意の文字列を入力します。
ここで入力した文字列がデバイス名として認識されます。
例えば「音声ファイルをFooデバイスで再生。」といった使い方ができるようになります。
今回は、エイリアス名に「r-talk」を指定して実行することにしました。

では、pythonプログラムを実行して、「R-Talk 800EX」とペアリングしてみましょう。

# python bluetooth_pairing.py 00:01:90:EF:A4:85 r-talk

=======================================
bluetoothdevice
Deleting older device /org/bluez/1717/hci0/dev_00_01_90_EF_A4_85
Device removed
Creating new deviceRequestPinCode: Using default 0000
Connection Established
=======================================

「Connection Established」と出力されています。
これは、正常にペアリングが完了したときに出力されるメッセージです。
ペアリングが出来たようですね。
(^o^)b

これでGuruPlugは「R-Talk 800EX」とペアリングができており、
「R-Talk 800EX」がBluetooth対応の音声出力機器として使える状態になったはずです。

適当な音声ファイルを「R-Talk 800EX」で再生してみましょう!

「aplay」コマンドを使用して音声ファイルを再生します。
先ほど指定したエイリアス名と音声ファイルを指定して「aplay」コマンドを
実行してみましょう!

# aplay -D r-talk /usr/share/sounds/alsa/Rear_Right.wav

「R-Talk 800EX」から音が聞こえました!!

(読者)「動作確認の動画も何もないから、本当に聞こえてるのか、わからん!」

そうですよね、、、
そんな読者の方々は、是非試してみてください!!

(補足)
ペアリングする際は、PINコードが必要な場合があります。
「R-Talk 800EX」とのペアリングにもPINコードは必要だったのですが、
PINコードが「0000」で、デフォルトのPINコードと合致したため、
すんなりとペアリングができました。
PINコードが「0000」でない場合は、設定が必要です。