マインクラフトとMabeeeでIoTクリスマスツリー

8674ae45-f83f-460b-ab1b-d733e142f19aさいきん雨の休日なんかに、7歳と4歳の子供たちとマインクラフトを一緒にやってます
レゴ好きなのでブロック自由に作るマインクラフトも楽しんでいるようです

そんな子供たちのために、マインクラフトの世界でクリスマスツリーを作り現実世界のツリーと連動させるプラグインを作りました

動画をご覧ください

  1. マインクラフト内でレバー操作
  2. レッドストーン回路がONになりレッドストーンランプが点灯
  3. 同時にプラグインのEventでレッドストーン回路ONを検知
  4. プラグインからMabeeeAPIをHTTP GETでたたく
  5. MabeeeアプリがBluetoothでMabeeeをON
  6. LEDイルミネーションにセットされたMabeeeが通電
  7. 現実世界のクリスマスツリーのLEDが点灯

■必要なもの

・マインクラフトPE版

PE版はWindows10/iOS/Androidとありますが、どれでもOK
レッドストーン回路を組むことになるのでwindows10がおススメ

minecraft_-windows-10-edition-beta-2016_12_18-20_59_30

・Mabeee

http://mabeee.mobi/
Bluetoothで単三乾電池をOn/Offできるデバイス
img_3515

・Mabeee MacApp

https://github.com/novars-jp/MaBeeeMacApp
MabeeeをMacから操作するアプリ
localhost ポート11111で起動するのでHTTP GETでリクエストを送る
早くまともなSDK出してほしい

・LEDイルミネーションライト

https://www.amazon.co.jp/gp/product/B01M4SCKSP
乾電池で動作するもの
71ws8l8leql-_sl1200_

・Mac OSX

Mabeee用のアプリが(2016年12月現在)Mac版しかないので必須
MabeeeSDKが対応すればlinuxやwindowsでも可能になるかも
マインクラフトサーバもMacで動かします

・PocketMine-MP ClearSky

https://github.com/ClearSkyTeam/ClearSky
LGPLで公開されてるマインクラフトPE版のサーバソフトウェア
いくつかの派生Forkがあるが、レッドストーン回路が使いたかったのでClearSky
PHP7で書かれているので興味ある人は隅々まで読むといいよ

・PHP7

pthreadsが必要です

・プラグイン

マインクラフトのレバーを操作するとMabeeeをONにして
クリスマスツリーのLEDを点灯させるプラグインを書きます

http://docs.pocketmine.net/

<?php
namespace MabeeePlugin;
use pocketmine\plugin\PluginBase;
use pocketmine\block\Block;
use pocketmine\event\block\RedstoneBlockUpdateEvent;
use pocketmine\event\Listener;
use pocketmine\utils\Utils;
class MabeeePlugin extends PluginBase implements Listener{
	// レッドストーン回路のアップデートイベント
	public function onRedstoneBlockUpdate(RedstoneBlockUpdateEvent $event){
	$block = $event->getBlock();
		if($block->getId() == BLOCK::LEVER ){//レバーだったら
			if($block->getPower() == BLOCK::REDSTONESOURCEPOWER){
				// レッドストーンがON
				// MabeeeMacAppはlocalhostのポート11111で起動している
				$url = 'http://localhost:11111/devices/1/set?pwm_duty=100';
			}else{
				$url = 'http://localhost:11111/devices/1/set?pwm_duty=0';
			}
			// URLにアクセス
			Utils::getUrl($url);
		}
	}

	public function onEnable(){
		// イベントの登録
		$this->getServer()->getPluginManager()->registerEvents($this,$this);
 	}
}

・レッドストーン回路

レバーでレッドストーンランプを点灯させるように作ればOKです
垂直方向にレッドストーン信号を伝えるために3×3の幹の中心をレッドストーントーチで延長しています

minecraft_-windows-10-edition-beta-2016_12_18-20_57_13この方法だとNOT回路になるので2つ合わせて使います
トーチ1つ挟むたびに1クロック遅延するのでレバー操作からランプ点灯まで遅延します
動画でランプが光るまで時間かかってるのはこれが原因