2016の15日目の記事です。最近、社内に導入されているSlackの絵文字を追加することが小さな楽しみになっています。前回の記事で懸念していた健康診断は血圧が高めになりそうだということをこの場を借りてご報告させていただきます。IoT」の補足記事を書いていきます。発表を見ていない方はSlideShareにて資料を共有していますので一読していただけると幸いです。IoTを駆使してゲームの世界と現実の世界を組み合わせた新しいMinecraftの遊び方を紹介していきたいと思います。使うものさっそく新しい遊び方を実現するために必要なものたちを紹介します。上記の「使うもの」を以下の図のように構成します。Minecraftサンドボックス型ゲームでYouTubeでのプレイ動画もよく公開されています。そのため、遊んだことがない方でも、どこかしらで見たことがあるかもしれません。今回はMOD(Modification)を利用するためにPC版を使用します。MODとは拡張機能でゲーム内に新しい機能を追加することを可能にする機能です。このMODを使ってJavaで外部と通信をする機能を実装し、IoTデバイスとゲーム内の処理をやり取りできるようにします。Studio製の小型なIoTデバイスです。コネクタに様々なセンサを接続することが可能で、たくさんのセンサがモジュール化されているため、簡単にセンサを繋ぐことが可能です。設定もスマホアプリで簡単に行うことができ、どのコネクタにどのモジュールを接続したのかをスマホアプリ上で視覚的に設定を行うだけで、難しい回路設計などは不要です。POSTやGETメソッドでアクセスすることでセンサデータの取得や出力の設定ができます。誰でも非常にお手軽に使うことができるため、Webエンジニアやデザイナーの方など組込の世界がわからないけどもIoTやってみたい!という方におすすめです。スペックWikiに載っているスペックをまとめると以下のとおりです。ESP-WROOM-02(only)凄く小さくて500円玉ぐらいの大きさです。小さすぎてWioNodeを何処かに固定するための穴が開いていません。そのため作業環境は十分に広くて物が散乱していない場所を確保しましょう。Minecraftと繋ぐそれでは作り方の前に、実際にIoTの技術を利用したゲーム動画を紹介します。レバーのON/OFFに合わせてLEDが点灯するゲーム内のレバーを操作することで現実世界のLEDの点灯・消灯を操作できます。来客でもちゃんと対応できるようにしておきましょう。STONEを組み合わせることでクロック回路(周期的にON/OFFを繰り返す装置)を作成し、現実世界のLEDを制御します。爆破スイッチ現実世界のスイッチを押すとゲーム内のTNT爆弾が爆発します。作り方ハードウェアハードウェアといってもそんなに複雑な回路を作るというわけではありません。LEDとボタンを接続します。回路図LEDと抵抗(1kΩ、4.7kΩ)、タクトスイッチを使用します。ブレッドボード上で配線をした図です。LEDをバッテリコネクタに対して左側へ、タクトスイッチを反対側の端子に接続します。実際に配線した写真です。LEDやタクトスイッチが無い場合は、既に回路が実装済みのモジュールが市販されていますので、そちらを利用してください。Output」を配置します。Firmware」でWioNodeのファームウェアを更新します。Nodeは使用することができる状態になりました。APIのURLを確認します。このURLがMODがアクセスするURLになりますのでメモをしておきましょう。ソフトウェアMODを実装していきます。1.10を利用します。MODの開発の大まかな流れとしては以下のとおりです。動作確認HTTPS通信機能の実装HTTPS通信に今回はAndroidでもおなじみのRetrofit2を利用します。'com.squareup.retrofit2:converter-gson:2.1.0'を追加して以下の様に変更します。APIを実行するためのServiceを定義します。}}HTTP通信を行う実体を作成します。上記で作ったHTTP通信を行うクラスを利用して、デジタル入力用とデジタル出力用のMinecraftのブロックを2個実装します。デジタル出力用のブロックの実装は以下のとおりです。APIを呼び出しています。Nodeに対して出力をONにするように、レッドストーン入力がなければOFFにするような処理を行っています。}}デジタル入力のブロックの実装は以下です。APIをポーリングするようにしています。APIの結果に応じて周辺状況を次回Tick更新時に変更を行うようにします。}}ブロックの登録MOD上に実装したブロックを登録します。Creativeモードで表示されるタブの指定などを行います。Nodeの設定時に取得したトークンを設定しています。Nodeとだけ通信を行うようになっています。Nodeと通信を行うようにする場合は、さらなる工夫が必要です。カンバン用にゲーム内でテキスト入力をさせてトークン設定をできるようにするなどといった具合です。}}動作確認コードの実装が終われば、実際に動かして動作を確認します。Clientに変更して実行ボタンを押します。待つといつもどおりにゲームが起動します。今回はCreativeモード+スーパーフラットでワールドを作成します。ワールドに入ったらインベントリを確認してみましょう。テクスチャの設定を行っていないので紫チェックの謎のブロックがあると思います。Nodeと通信を行えるブロックです!これを配置することで冒頭で紹介したような機能を実現することができるようになりました。Nodeはコンパクトなサイズのためどこかに固定できるような穴が開いていません。そのため、通電中にどこか金属部品などに接触してショートをしてしまう可能性があります。十分に作業環境に注意して作業を進めましょう。2.クロック回路内に高速でON/OFFを繰り返すようなリクエストを行うブロックを追加してしまうと、処理がなかなか終わりません。Nodeとの通信に遅延が発生するためです。3.デジタル入力用のブロックは200ms周期でWebAPIをポーリングしているため、スイッチを高速で切り替えると処理の取りこぼしが発生することがあります。おわりにIoTの技術を活用して仮想現実と現実世界とをつなぎ、今話題の映像を利用したVR(仮想現実)とは違う形でVRを実現してみました。Node自体はかなり汎用的に使えるので今後は利用しているCIツールでエラーを検知したら回転灯が点灯するといったことも実現してみたいと思っています。ぐるなびではエンジニアを募集しています。ビールとIoTをこよなく愛するエンジニアの方は一度お話しましょう!岩田直樹ボルダリングとロードバイクが好きなエンジニアっぽいヘンジニア。三度の飯とビールが好き。IoT界隈やフロントエンド、アプリの勉強会と幅広く出没してます。好きなエディタはVimです。google.setOnLoadCallback(initialize);スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。