ArduinoからScratchを制御できたっ!

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));
}
}
}

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次