chibi:bit(micro:bit)をScratch(Raspberry PiのScratch1.4)のコントローラーにするという公式サイトの作例にチャレンジしてみました。chibi:bitとScratchは直接やりとりできないので、間にPythonプログラミングを挟むことで実現しています
必要なハード
- chibi:bit(micro:bit)
- USBケーブル(USB-A と マイクロUSB-B) データ転送できるタイプ
ソフトウェアの準備
以下の2つをインストールします
- mu(micro python editor)
- Python Scratch library
まずパッケージリストを更新します
sudo apt-get update
muをインストール
chibi:bit向けのPython IDEのmuをインストールします
sudo apt-get install mu -y
Python Scratch library
Scratchと遠隔センサーで通信するためのPythonのライブラリーをインストールします
sudo pip3 install --pre scratch
chibi:bitが接続されているUSBポートを調べる
まずRaspberry Piにchibi:bitを接続していない状態で、以下のコマンドを実行します
ls /dev/ttyA*
次にchibi:bitをUSB接続した状態で同じコマンドを実行します
ls /dev/ttyA*
2回目の実行で、新たに追加されたものがchibi:bitのデバイスファイル名です
例)dev/ttyACM1
僕の環境では「dev/ttyACM0」でした
Pythonプログラムを実行する
メニュー –> プログラム –> Python 3(IDLE)を起動し、File -> New Fileを選んで新しいファイルを作成して、以下のコードを貼り付けて「rpi.py」という名前で保存します。(保存する場所はどこでもいいです)
import serial from time import sleep import scratch scr = scratch.Scratch() ## THE NEXT LINE MIGHT NEED TO BE CHANGED - TYPE ls /dev/ttyA* into the terminal to see which port is needed. PORT = "/dev/ttyACM1" ## BAUD = 115200 s = serial.Serial(PORT) s.baudrate = BAUD s.parity = serial.PARITY_NONE s.databits = serial.EIGHTBITS s.stopbits = serial.STOPBITS_ONE while True: data = s.readline().decode('UTF-8') data_list = data.rstrip().split(' ') try: x, y, z, a, b = data_list scr.sensorupdate({'x' : x}) scr.sensorupdate({'y' : y}) scr.sensorupdate({'z' : z}) scr.sensorupdate({'a' : a}) scr.sensorupdate({'b' : b}) except: pass s.close()
7行目の
PORT = "/dev/ttyACM1"
を先ほど調べたchibi:bitのデバイスファイル名に変更してください
このプログラムではchibi:bitからのデータを待ち続けて、受け取ったデータをScratchに渡す役目を果たします。プログラムの実行はもう少し後で行います
chibi:bitのプログラムを作成
次にchibi:bitのプログラムを作成します
メニュー –> プログラム –> muを起動し、エディタに以下のプログラムを貼り付けます
from microbit import * def get_sensor_data(): x, y, z = accelerometer.get_x(), accelerometer.get_y(), accelerometer.get_z() a, b = button_a.was_pressed(), button_b.was_pressed() print(x, y, z, a, b) while True: sleep(100) get_sensor_data()
Flashボタンを押します
マウントされたchibi:bitを選んプログラムを書き込みます
最後にchibi:bitのリセットボタンを押せばchibi:bitの準備は完了です
Scratchの設定
Scratch 1.4を起動します。
「調べる」カテゴリにある「(スライダー)センサーの値」ブロックを右クリックして「遠隔センサー接続を有効にする」を選びます
Python IDEに戻って、先ほど作成したrpi.pyを実行します。Run –> Run ModuleかF5を押すと実行されます
「(スライダー)センサーの値」のメニューに「a、b、x、y、z」の値が追加されます
ブロックの左のチェックをクリックすれば、ステージに値が表示されます
ゲームを作成する
追いかけてくるUFOにぶつからないようにロケットをコントロールするゲームを作成します。Aボタンでミサイルを発射できるので、UFOを撃退することができます
素材を追加する
ロケット、ミサイル、UFOの画像からスプライトを作成します
ロケットとUFOはコスチュームの編集画面で90度回転させます
サイズを調整します。大きすぎるとすぐにぶつかるので小さめに
ロケットのプログラム
緑の旗が押されたら、Scoreを0にして「start」メッセージを送信します
ロケットの位置と方向の初期化をします。次に、xセンサーの値を元にロケットを回転させるループを作成します。xはだいたい-1000〜1000の数値なので、250で割って数値を小さくします
ここまで出来たら一度動作確認。chibi:bitを左右に動かすとロケットが回転すればOKです
次はyセンサー。こちらは-500で割ります
chibi:bitを前後左右に動かしてテストします。ちゃんとロケットが動けばOKです
UFOのプログラム
UFOはランダムな場所に登場して、ずっとロケットを追いかけるようにします
ミサイルに当たるとScoreをプラス、ロケットに当たるとゲーム終了です
ミサイルのプログラム
ミサイルはロケットと全く同じ動きをするようにします
Aボタンを押すとUFOに向けてミサイル発射、画面の端かUFOに当たるまで動かします
これで完成です!
この 作品 は クリエイティブ・コモンズ 表示 – 継承 4.0 国際 ライセンスの下に提供されています。