翰文名人 专家一览 点评达人 翰文之星 原文库 译文库 全部项目 翰文网事 译者培养招募 年度奖励计划
"输出型"翻译学习的倡导者 每个人都可以成为翻译家!

原文

  • 潘琳 推荐于 2015-10-22 23:01
  • 原文语言:日文
  • 所属分类:科学
   今回はセンサーとBluemixのNode-REDを使用して作るIoTアプリケーションの例として、容易に電子工作ができるPCボードのIntel Edisonを利用した簡単なゲームを作ってみました。

全体の構成

※音が出ます


ゲーム操作の様子(左)とゲーム画面の様子(右)

   センサーの上で手を動かすとゲーム内の黒丸が連動して動くようになっています。後ほど詳しく説明しますが、これはセンサーで取得した手との距離がインターネットの中継サーバを経由してNode-REDに送られ、ゲームに反映されています。このようにセンサーなどのデータがクラウドを通じて他の機器に作用する仕組みをモノのインターネット(Internet of Things、IoT)と呼びます。

   さて、このゲームは以下のような物で構成されています。

?HC-SR04
   超音波距離センサー(以下、距離センサー)です。二つの発生装置から超音波を発し、反響から前方4.5m以内に物が置かれていた場合にその物との距離を測ります。

?Intel Edison
   PCボードです。マウスやモニターに繋ぐことでLinuxマシンとして動作するほか、端子からブレッドボードと呼ばれる基盤に繋げれば電子工作も可能です。今回はAduino対応のIntel Edison Board for Aduinoを使いました。

?MQTTブローカー/クライアント
   MQTTは通信規格の1つです。送信時にブローカーと呼ばれる中継サーバーにトピックと呼ばれる文字列を送信するデータに付加する仕組みになっており、受け取り側はブローカーに同じトピックを要求することでデータが送られます。非常に軽量で実装でき、頻繁に通信が必要なIoTに適した規格です。

?Node-RED
   Node-REDはBluemix上で提供されている開発環境です。機能を持ったノード繋げることで速やかな開発が可能になっています。

   構成はこのようになっています。


   Intel Edison 上で動作するセンサーが計測したデータをMQTTのクライアント、paho-mqttからmqttのブローカー、test.mosquitto.orgに送ります。その後Node-REDのMQTTクライアントノードでそのデータを受け取り、WebSocketでゲームのプログラムに渡し反映されます。

   ではここから、作成の手順を紹介します。

作成手順1:Intel Edisonの構成

   まずIntel Edisonに距離センサーを繋ぎます。必要な電子部品は以下の通りです。
?超音波距離センサー HC-SR04 x1
?Intel Edison Kit for Arduino x1
?ブレッドボードx1
?ジャンパー線(オス-オス)x4
   その他、Intel EdisonをPCから動かすためにmicroUSBケーブルが必要です。

   続いて上記の部品でブレッドボード上に電子回路を構築し、Intel Edisonとつなぎます。まず距離センサーの各足がどの役割なのか調べてください。

   簡単に説明しますと、Vccが(センサーが作動するための)電源、TrigがIntel Edisonからの入力を受付、EchoがIntel Edisonへ取得したデータを出力、GNDが接地を担当しています。

   続いて、そのセンサーをブレッドボードに挿して、ジャンパー線でIntel Edisonとつなぎます。ブレッドボードは穴の下で下記のように導線がつながっています。

   そこで下記のようにa行の端にセンサーの端子が刺さる様に取り付け、端子同士が接続されないように下記のように配線します。

   最後にIntel Edisonでそれぞれ下記のソケットにジャンパー線を挿して物理的な準備は完成です。
<センサー → Intel Edison>
?Vcc → 5V
?Trig → 13番
?Echo → 11番
?GND → GND

   続いて Intel Edisonを初期化します。こちらの手順は Edison Labのそれぞれのはじめ方をご覧下さい。

Edison Lab:スタートガイド(Arduino用)
http://edison-lab.jp/gettingstarted/edison-arduino/windows/

作成手順2:MQTTでデータをBluemixに送る

   初期化が終わったIntel Edisonでセンサーのデータの取得とmqttを介してのデータ送信ができるようにプログラムを作成します。プログラムには以下のようなパッケージが必要です。
?mraa:EdisonのGPIO(入出力)を管理するパッケージ
?paho-mqtt:mqttのクライアント
   なお、導入に使っているopkgはEdisonで採用されたOS Yocto Linux のパッケージ管理システム、pip は pythonのパッケージ管理システムです。

   ではまずmraaを導入します。Edisonにログインし、 /etc/opkg/mraa-upm.confというファイルを作成してください。そして中に“src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic "と記述し、opkgをアップデートしてください。その後opkg installで導入が可能です。(下記のコマンドを上から1行ずつ実行してください。)
echo "src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/mraa-upm.conf
# opkg update
opkg install libmraa0

   続いてpipを導入し、それを利用してpaho-mqttをインストールします。上から1行ずつ実行してください。
# wget https://bootstrap.pypa.io/ez_setup.py --no-check-certificate -O - | python
# easy_install pip
# pip install paho-mqtt

   これでデータ転送に必要なMQTTクライアントがIntel Edisonに入りました。今度はデータを送る中継をするブローカーを用意します。ブローカーはMosquittoなどIntel Edison にインストールするものを利用してもよいのですが、今回はそのMosquittoがホストされている test.mosquitto.org を利用します。

test.mosquitto.org
http://test.mosquitto.org/

   それでは以下のプログラムを実行してみてください。

import mraa
import time
import paho.mqtt.client as mqtt

def reading_sensor():
    trigPin = mraa.Gpio(13)
    trigPin.dir(mraa.DIR_OUT)
    trigPin.write(0);

    echoPin = mraa.Gpio(11)
    echoPin.dir(mraa.DIR_IN)

    time.sleep(0.3)
    trigPin.write(1)
    time.sleep(0.00001)
    trigPin.write(0)

    while echoPin.read() == 0:
        pulseOff = time.time()

    while echoPin.read() == 1:
        pulseOn = time.time()

    timeDifference = pulseOn - pulseOff
    centimeters = timeDifference * 17000

    return centimeters

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("edison_copter")

def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("test.mosquitto.org", 1883)
while client.loop() == 0:
    msg = reading_sensor();
    print msg;
    client.publish("edison_copter", msg, 0, True)
    time.sleep(0.1)
    pass

   簡単に解説します。

import mraa
import time
import paho.mqtt.client as mqtt
   こちらは必要なパッケージを読み込んでいます。

def reading_sensor():
    trigPin = mraa.Gpio(13)
    trigPin.dir(mraa.DIR_OUT)
    trigPin.write(0);

    echoPin = mraa.Gpio(11)
    echoPin.dir(mraa.DIR_IN)

    time.sleep(0.3)
    trigPin.write(1)
    time.sleep(0.00001)
    trigPin.write(0)

    while echoPin.read() == 0:
        pulseOff = time.time()

    while echoPin.read() == 1:
        pulseOn = time.time()

    timeDifference = pulseOn - pulseOff
    centimeters = timeDifference * 17000

    return centimeters
   この関数を呼び出すとセンサーが計測を開始し、翳した手との距離を出力します。trigPinとechoPinの番号はmraa.Gpioで定義されていますので設定に合わせて変更してください。

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("edison_copter")

def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("test.mosquitto.org", 1883)
while client.loop() == 0:
    msg = reading_sensor();
    print msg;
    client.publish("edison_copter", msg, 0, True)
    time.sleep(0.1)
    pass
   mqttのクライアントを作成し、test.mosquitto.org の 1883番ポートに接続を試みます。成功した場合 on_connect が実行され、edison_copterトピックからデータを持ってくる処理(持ってきた場合on_messageにより表示される)とedison_copterトピックに測定データを逐次送信するようになります。

作成手順3:Node-REDでデータを取得し、ゲームへ反映する

   これでセンサーのデータを配信することができました。続いてBluemixのNode-REDでそのデータを受け取る側の仕組みを作成しましょう。

   まずBluemixにログインしてください。ダッシュボードのカタログを選びます。

   次の画面で名前を入力して作成をクリックしてください。

   しばらくすると開発環境が作成されますのでリンクをクリック。

   できたプロジェクトを開くとNode-REDの起動画面になりますので赤いボタンをクリック

   Node-REDの画面になったら右上のハンバーガーボタンからImport→Clipboardを選び、出てきたテキストエリアに次のコードを書きこんでください。

Node-Red インポート用コード

   すると次のようなノードが現れるはずです。右上のDeployボタンを押してうまく行ったら別のウィンドウでNode-RED編集画面のURLの最後の /red/ を /game/ に変えたURLにアクセスしてみてください。ゲーム画面が表示されます。

   各ノードの説明と設定の解説を行います。
   (1)MQTTからデータを受け取るノードです。トピックからデータを受信します。

   (2)Websocketにデータを格納しています。

   (3)httpの入力ノードです。(5)の出力ノードとの間にHTMLの書かれたテンプレートを挟むと、設定したURL(この場合はhttp://(プロジェクト名).mybluemix.net/game/)でそのHTMLが表示されます。

   (4)HTMLが書かれたテンプレート。canvasを扱えるcreate.jsでゲームにWebsocketに格納されたデータを逐次反映しています。
   (5)httpの出力ノード

まとめ

   以上の流れでセンサーとBluemixでゲームを作成しました。この技術はゲームだけでなく実用的なアプリやデータの可視化サービスなどの制作にも応用できます。また今回使用したのは1つのセンサーだけでしたが、他のセンサーやプッシュボタンを増やすことでより本格的なコントローラーで遊べたり、他の種類のゲームを作ることができると思います。

   今回初めてPCボードやMQTTを利用したシステム作りを行いましたが、構成に必要な物も安価に集められ、簡単に作成できました。このことから例えば複数のお店の在庫を監視させ、地域で購入できるものをリアルタイムで把握したり、盛況具合や天候など刻々と変わる状況に応じてシステムやサイトを変化させるなど今まで実現が難しかった事柄が安価で速やかに実装できる非常に面白い技術だと感じました。今後のIoTの普及を楽しみにしつつ、私も更に面白い物を作成できるよう、学習を続けていきたいと思います。

参考文献

   最後に参考にしたページを載せます。

ブレッドボードの使い方
http://nakayasu.com/lecture/arduino%E5%9F%BA%E7%A4%8E/5666

Edisonで参考になったサイトとかTips
http://qiita.com/yohawing/items/b52593b4f549a1ea65c4

USING PYTHON WITH ARDUINO
http://www.toptechboy.com/using-python-with-arduino-lessons/

IoT時代を支えるプロトコル「MQTT」(前編) 
http://codezine.jp/article/detail/8000

Python HC-SR04 Sonar Setup
https://communities.intel.com/message/264923

Node-RED を使用してリアルタイムのチャット?アプリケーションを 5 分で作成する
http://www.ibm.com/developerworks/jp/cloud/library/cl-rtchat-app/

本文还没有人翻译

 

关于我们|招聘英才|本站声明|隐私权保护规则|帮助中心|翰译欣翻译

Copyright@ 2013 www.cnposts.com 京ICP备09086341号 京公网安备110107000042

本站保留所有权利未经许可不得转载 本站刊载的所有文章仅代表作者(译者)本人观点 不代表本站立场

"输出型"翻译学习的倡导者---每个人都可以成为翻译家

北京翰译欣翻译有限公司 | Email: info#cnposts.com

我要啦免费统计 技术支持:汉虎网 合作译者群:QQ199194583