Scratch で通信
久しぶりにScratchを取り上げます。今回はScratch以外のプログラムと通信をするテストをしました。Socketライブラリを使っていますので、どんな言語でも接続できます。
センサーや入力デバイスから取得した値により、プログラムを制御したり、他のアプリケーションとの連携ができます。
環境 : Scratch 1.4, Python 2.7.3 / Raspberry Pi2
参考 : http://scratched.gse.harvard.edu/discussions/computer-science-education/how-can-i-connect-scratch-using-python
まずはScratch側で受信します。
センサー値”value”は、プログラムを一度動かして送信してみてからでないと、選択肢に現れませんでした。
センサーブロックは、右クリックして「遠隔センサー接続を有効にする」を選択します。
プログラムを起動すると、吹き出しが1秒ごとに0から9変化します。
send.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from array import array import socket import time def sendData(cmd): n = len(cmd) a = array('c') a.append(chr((n >> 24) & 0xFF)) a.append(chr((n >> 16) & 0xFF)) a.append(chr((n >> 8) & 0xFF)) a.append(chr(n & 0xFF)) sock.send(a.tostring() + cmd) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('127.0.0.1', 42001)) for i in xrange(10): sendData('sensor-update value ' + str(i)) sendData('broadcast "msg"') print(i) time.sleep(1.0) sock.close() |
Pythonプログラムは起動してScratchからの送信を待ちます。
グリーンフラッグをクリックしてScratchプログラムを開始します。
Scratch上のマウスのX座標をプログラム側で1秒おきに受信します。
1 2 3 4 5 6 7 8 9 10 11 |
from array import array import socket import time sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('127.0.0.1', 42001)) while 1: time.sleep(0.01) data = sock.recv(1024) print(data) |
実行結果
まずはプログラム側から送信、そして受信とわけて実行しました。
外部とのデータのやりとりができると、また可能性が広がりますね。
Category: 未分類