Arduino(Arduino ETHERNET)からScratchを制御できたお話。
ここに至るまでには、「message too big;bad size field?」なんていうピンク色のエラー表示が出てきたりして。
client.writeの使い方がイマイチ分からず、検索していると、Arduinoのフォーラムに辿り着き、それを参照してやっとできた次第。
スケッチは、下記を参照くださいな。
Tera Termなどを起動して、Arduinoとシリアル接続すると、イーサネットで通信を始め、コマンド待機状態に。
「a」と入力すると、broadcast “a”と送信する仕組み。
Scratch側は、「aを受けたら」何々をするというアクションを記述する。
「こんにちはという」と記述すれば、コマンドを受けたと同時に、猫が「こんにちは」という。
Scratchは、「broadcast〇〇」「sensor-update〇〇」の2パターンあり、それ以外は受け付けない。
データの送り方も独特で、送る文字の文字数を初めの4バイトに記すお約束になっている。
Asciiコードで送信するとうまくいくみたい。
#include < SPI.h>
#include < Ethernet.h>
byte mac[] = { イーサネットシールドなどのMACアドレス};
byte ip[] = {イーサネットシールドのIPアドレス(任意のものを入れる)};
byte server[] = {ScratchがインストールされているPCのIPアドレス };
byte moji[] = { 0x00, 0x00, 0x00, 0x0d, 0x62, 0x72, 0x6f, 0x61, 0x64, 0x63, 0x61, 0x73, 0x74, 0x20, 0x22, 0x61, 0x22 }; //broadcast “a”と送信
EthernetClient client;
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip);
delay(1000);
Serial.println(“connecting…”);
if (client.connect(server, 42001)) {//Scratchとはポート42001で通信する。
Serial.println(“connected”);
delay(1000);
} else {
Serial.println(“connection failed”);
}
}
void loop() {
if (Serial.available()){
if (Serial.read() == ‘a’){
client.write(moji, sizeof(moji));
}
}
}