Minecraft Java版 に MCreator Link を入れて Raspberry Pi とやりとりしてkintoneにPOSTする


Minecraft Java版 と Raspberry Pi に MCreator Link を入れて、 Minecraft と Raspberry Pi で通信できるようにする方法です。
(最後におまけで、Minecraftの操作でkintoneにPOSTできるようなコードもあるよ。)

MCreator Link の環境構築の手順としてはコチラに書いてある通りに進めます。

Minecraft (Java版) 側の設定

PC側の設定からやっていきましょう👀

MCreator Link をダウンロードする

↓コチラからお好みのMinecraft Java版のバージョンに合った MCreator Linkをダウンロードします。

バージョン1.16.5 ならこのDownloadボタン

Forgeをインストールする

↓コチラの手順通りにインストールしました。

MCreator Link(MCreator Link 1.3 [1.16.5].jar) を mods フォルダに移動する

↓ダウンロードしたMCreator Link 1.3 [1.16.5].jarをコチラを参考に移動させました。

Raspberry Pi の設定

MCreator Link のインストール

Java8がインストールされていない場合は、こちらでのコマンドでJava8をインストールします。
$ sudo apt-get install openjdk-8-jdk

Rassberry Pi に ssh接続して下記のコマンドを実行します。
$ curl -sL https://mcreator.net/linkpi | sudo bash

しばらく待つとMCreator Linkがインストールされます。
インストールが終わったら、Ctrl + Cなどを押してbashに戻ります。

Python

RPi.GPIOパッケージをインストールします。

$sudo pip install rpi.gpio

コードを書きます。
1秒ごとに Raspberry Pi の18番ピン(Minecraftからは1番ピンのことを指しているみたい)を読み取って
1だったら0に書き換えるだけのプログラムです。test.pyというファイル名で保存しておきます。

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
for i in range(0, 60):
    print GPIO.input(18)
    if GPIO.input(18) == 1:
        GPIO.output(18, 0)
    time.sleep(1)
GPIO.cleanup()

Minecraft の操作

先程のMod導入済みの起動構成で立ち上げ、
タイトル画面が表示されたら「L」キーを押します。

するとMCreator Link のdevice設定画面が表示されます
IP Connect ボタンをクリックします。

Raspberry Pi のIPアドレスを入力して、Connect ボタンをクリックします

完了ボタンをクリックします

コマンドを入力

Minecraft 側と Raspberry Pi 側でコマンドを入力します。

Minecraftの準備

接続デバイスの確認
/link device

pinmode を output にします。
/link pinmode output

ここまでできたら、Raspberry Pi で先程のPythonのコードを実行します。
python test.py

Pythonが動いている間に

Minecraft側のコマンドで1ピンに1を書き込みます
/link digitalwrite 1 1

Minecraft側で1を立てたらRaspberry Pi側で0に戻しているのが分かるかと思います。

kintone に応用してみる

さきほどのコードですが、下記のように書き換えると
Minecraftで1ピンに1を立てたらkintoneにPOSTするという仕組みが作れたので紹介しておきます。

kintoneとRaspberry Piの連携については↓まずはこちらご参照ください。

コマンドブロックやレッドストーン回路を組み合わせて
出退勤システムなどが作れそうです。(はたして需要はあるのか)

import RPi.GPIO as GPIO
import time
import requests
import json

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
for i in range(0, 60):
    print GPIO.input(18)
    if GPIO.input(18) == 1:
        GPIO.output(18, 0)
        url = 'https://【kintoneのサブドメイン】.cybozu.com/k/v1/record.json'
        payload = {'app':'【アプリID】', 'record':{'test':{'value':'from_RaspberryPi'}}}
        headers = {'content-type': 'application/json', 'X-Cybozu-API-Token':'【APIトークン】'}
        r = requests.post(url, data=json.dumps(payload), headers=headers)
        print r.text
    time.sleep(1)
GPIO.cleanup()

参考リンク集