センサー値をゲートウェイが受信し、クラウドサーバーへ送信する様なIoTのシステムとしては、センサーとゲートウェイの他にサーバーも必要です。
ただし、デモ等を行う場所によってはインターネットへ接続できないこともあり、センサー・ゲートウェイ・サーバーがすべてローカルで完結していると便利です。
ここでは、センサーとしてArmadillo-IoT G3のCPUの温度センサーを使用し、サーバーとしてArmadillo-IoT G3Lを使用するデモの作り方を紹介します。
システム構成
システム構成は下図の通りです。
セットアップ手順
サーバー側のArmadillo-IoT G3Lと、センサー・ゲートウェイ側のArmadillo-IoT G3それぞれのセットアップ手順を紹介します。
1. サーバー(Armadillo-IoT G3L)
1.1. ネットワーク設定
パッケージ管理コマンド(apt-get)を使用していくつかのパッケージをインストールする必要があります。
下記マニュアルを参考にネットワーク設定を行ってください。
1.2. PHPのインストール
ここではPOSTで受け取ったデータを処理するためにPHPのインストールを行います。
(Webサーバーは標準でlighttpdがインストール済みです。)
[armadillo]# apt-get install php5-cgi
1.3. PHPの設定
インストール後、lighttpd側でPHPの設定を行います。設定ファイルは /etc/lighttpd/lighttpd.conf です。
server.modules = ( "mod_access", "mod_alias", "mod_compress", "mod_redirect", "mod_fastcgi", <== 追加 # "mod_rewrite", ) ・・・省略・・・ # default listening port for IPv6 falls back to the IPv4 port include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port include_shell "/usr/share/lighttpd/create-mime.assign.pl" include_shell "/usr/share/lighttpd/include-conf-enabled.pl" # 追加(ここから) fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/bin/php-cgi", ) ) ) # 追加(ここまで)
設定ファイルを書き換えた後、Webサーバー(lighttpd)を再起動します。
[armadillo]# systemctl restart lighttpd
1.4. PHPの動作確認
設定を行ったら動作確認を行います。
下記のスクリプトを /var/www/html/info.php へ配置してください。
<?php phpinfo();
そして、PCをArmadillo-IoT G3Lと同じネットワークへ接続してください。
PCからアクセスするためにArmadillo-IoT G3LのIPアドレスを確認します。
[armadillo]# ip addr show ・・・省略・・・ 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:11:0c:1d:01:90 brd ff:ff:ff:ff:ff:ff inet 192.168.11.130/24 brd 192.168.11.255 scope global dynamic eth0 valid_lft 27372sec preferred_lft 27372sec inet6 fe80::211:cff:fe1d:190/64 scope link valid_lft forever preferred_lft forever ・・・省略・・・
ここでは有線LANで接続しているため、eth0の項目のIPアドレスが"192.168.11.130"であることを確認しました。
PCのブラウザで http://確認したIPアドレス/info.php へアクセスし、下図の様に表示されれば成功です。
1.3. POSTデータ受信用スクリプト作成
以下を行うPHPスクリプトを作成します。
- POSTでセンサ値を受け取る
- 受け取ったセンサ値を出力用HTMLファイルへ追記
PHPスクリプトの内容は以下の通りです。
/var/www/html/temp.php というファイル名で配置します。
<?php /* POSTのデータが無ければ終了 */ if (!isset($_POST)) exit; /* POSTで受け取った"user"データと"temp"データを showtemp.html へ追記 */ file_put_contents("/var/www/html/showtemp.html", $_POST['user'].','.$_POST['temp'].'<br>', FILE_APPEND);
上記のスクリプトでは、POSTで受け取ったデータを /var/www/html/showtemp.html へ追記します。
POSTで受け取る各パラメータについては後述の"センサー・ゲートウェイ(Armadillo-IoT G3)"で説明します。
showtemp.html はあらかじめ、以下の内容を記載しておきます。
<html> <head> <title>showtemp.html</title> <script type="text/javascript" language="javascript"> <!-- setTimeout("location.reload()",5000); // --> </script> </head> <body>
なお、showtemp.htmlには書き込み権限を付加しておいてください。
[armadillo]# chmod a+w /var/www/html/showtemp.html
setTimeout()で5秒ごとにページのリロードをしているので、showtemp.htmlへ追記された内容が5秒の頻度で確認できる仕組みです。
ただし、画面の自動スクロールまでは入っていないので、ブラウザのウィンドウ縦幅よりも下に伸びると手動でスクロールする必要があります。
2. センサー・ゲートウェイ(Armadillo-IoT G3)
Armadillo-IoT G3をセンサーとゲートウェイとして使用します。
ちなみに、設定方法は[コースD] Armadillo-IoT G3/G3L、Armadillo-X1開発体験セミナーの内容と同じです。
設定方法としては、以下のRubyスクリプトを作成し、実行するだけです。
2.1. Rubyスクリプトの作成
sendtemp.rb というファイル名で以下の内容のファイルを作成します。
require "net/http" require "uri" uri = "http://1.4で確認したIPアドレス/temp.php" loop do mtemp = `cat /sys/class/thermal/thermal_zone1/temp` temp = mtemp.to_f / 1000 res = Net::HTTP.post_form(URI.parse(uri), {'user'=>'sample', 'temp'=>temp}) print temp, "\n" sleep 5 end
CPU内蔵の温度センサの値は /sys/class/thermal/thermal_zone1/temp から取得できます(値はミリ℃)。
上記のスクリプトではNet::HTTP.post_form()を使用してPOSTでデータを送信しています。
送信するデータを第2引数で指定しており、
"user"パラメータには文字列"sample"を、
"temp"パラメータには温度センサ値(temp変数)を指定しています。
2.2. Rubyスクリプトの実行
下記のように実行します。
[armadillo]# ruby sendtemp.rb
3. 実行
あらかじめ、PCでサーバー(Armadillo-IoT G3L)のWebサーバーのshowtemp.htmlを開いておいてください。
URLとしては http://1.4.で確認したIPアドレス/showtemp.html となります。
そして、Armadillo-IoT G3側でsendtemp.rbを実行すると以下のように確認できます。