【Raspberry Pi】GPIOで操作するMinecraft Pi EditionをCoderDojo用に試してみた話
はじめに
こんにちは、がんがんです。
GW1日目にこちらの勉強会に参加してきました。
coderdojo-kagoshima.connpass.com
CoderDojoとは小学生や中学生向けに行われているプログラムの勉強会です。
今回はメンターとして参加してきました。
何か見せれるものがあったほうがいいかなと思って、GPIOからマイクラを操作してみました。
今回はそのときの備忘録です。
参考記事
Minecraft Pi Editionのブロックに関する記事
Scratch2MCPIでMinecraft Piを焼き上げよう | Think IT(シンクイット)
実験
今回はRaspberry Piの特徴であるGPIOとMinecraft Pi Editionを接続できないかなと模索しました。
物理ボタンの作用が画面上に反映されたら、ちびっこの自分ならワクワクしますから。
内容としては以下の通りです。
- タクトスイッチを押す
- Minecraft上でブロックを置く
- LEDが光る
回路はこんな感じです。
STEP1 まずはスイッチを押したらLEDが光るようにする
Minecraftと接続する前に、まずはタクトスイッチを押したらLEDが光るようにします。
コードはGitHubにも挙げています。
# coding: utf-8 # ===== ボタンが押されたらLEDを点灯させる ===== import RPi.GPIO as GPIO import time as t # 設定値 LED = 15 BUTTON = 18 # ボタンを押したときの関数 def button_pushed(channel): print("Pushed!!") flag = GPIO.input(BUTTON) if flag: GPIO.output(LED, 1) else: GPIO.output(LED, 0) t.sleep(0.5) GPIO.setmode(GPIO.BCM ) # Ledの設定 GPIO.setup(LED, GPIO.OUT, initial=GPIO.LOW ) # Buttonの設定 GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_DOWN ) GPIO.add_event_detect( BUTTON, GPIO.BOTH, callback = button_pushed, bouncetime = 200 ) try: while True: print("Please push the button.") t.sleep(1 ) except KeyboardInterrupt: # Ctrl + Cの入力時 print("STOP") GPIO.remove_event_detect( BUTTON ) GPIO.cleanup()
STEP2 スイッチ押したらマイクラでブロックを置く
次にスイッチ押したらTNTブロックが画面上に現れLEDを光らせてみます。
コードの変更はbutton_pushed()
関数のみです。
全体のコードはこちらにあります。
from mcpi.minecraft import Minecraft # ボタンを押したときの関数 def button_pushed(channel): print("Pushed!!") mc = Minecraft.create() mc.postToChat("Hello world") flag = GPIO.input(BUTTON) if flag: GPIO.output(LED, 1) x, y, z = mc.player.getPos() mc.setBlock( x+1, y, z+1, 46, 1) mc.setBlock( x+1, y+1, z+1, 50) else: GPIO.output(LED, 0) t.sleep(0.5)
画面の結果はこんな感じです。ちゃんと動いてますね。