2012年11月21日

Arduino WOL マジックパケット リピータ「新開発環境に対応したスケッチを公開」

※なんだかよく分からないけど、arduino WOLリピーターを作りたい方は、こちらの初心者用の説明をどうぞ

震災後、引っ越しやらなんやらで、行方不明になっていたArduinoを先日ダンボールから無事に保護。

メインマシンをWindowsのデスクトップマシンから、2年前に購入したMACBOOKホワイトをSSD化+メモリ8GBにしたことから、思い切って変更しました。

ArduinoをMACBOOKに接続しWOL リピーターのスケッチを当サイトからコピペ。

コンパイルできん。

最新の開発環境は、仕様が変更されていてUDPモジュールを内包していることがわかりました。
取り急ぎ、情報収集の後に最新の開発環境に合わせて、スケッチを修正変更しました。

※パケットアナライザでの動作は確認していますが、外部からマジックパケットを投げてターゲットマシンの電源が入ることまでは確認していません。
動いたら、コメントで報告いただけるとありがたいです。
※このスケッチの動作確認は、MACBOOKのMAC OS Xで動いているVMware Fusion上のWindows8Proでローカルテストのみを行っています。



// Wake On Lan リピーター
// http://yutakalife.net/article/303195021.html
// 販売などの商用利用はご遠慮ください
// Copyright love4nature All Rights Reserved.

#include <SPI.h>

#include <Ethernet.h>
#include <EthernetUdp.h>


// イーサネットの設定
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Arduino のMAC address
IPAddress ip(192, 168, 0, 200); // Arduino のIP address
unsigned int localPort = 9; // Arduino の受信ポート

IPAddress targetIp(192, 168, 0, 255); // ターゲットのブロードキャストアドレスを設定
unsigned int targetPort = 8000; // ターゲットのポート番号を設定

// パケットサイズの最大値を設定
#define MAX_SIZE 192

byte packetBuffer[MAX_SIZE]; // マジックパケット用のパケットバッファ

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

void setup() {
// start the Ethernet and UDP:
Ethernet.begin(mac,ip);
Udp.begin(localPort);

Serial.begin(115200);
Serial.print("Start ");
}

void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if(packetSize)
{
Serial.print("Received packet of size ");
Serial.println(packetSize);
Serial.print("From ");
IPAddress remote = Udp.remoteIP();
for (int i =0; i < 4; i++)
{
Serial.print(remote[i], DEC);
if (i < 3)
{
Serial.print(".");
}
}
Serial.print(", port ");
Serial.println(Udp.remotePort());

// read the packet into packetBufffer
Udp.read(packetBuffer,MAX_SIZE);
Serial.println("Contents:");
for(int j=0; j<min(MAX_SIZE,abs(packetSize)); j++) {
Serial.print(packetBuffer[j],HEX);
Serial.print(" ");
}
Serial.println("");

// 受信したマジックパケットをリピート送信する
Udp.beginPacket(targetIp, targetPort);
Udp.write(packetBuffer,min(MAX_SIZE,abs(packetSize)));
Udp.endPacket();
}
delay(10);
}



posted by love4nature at 21:55| Comment(3) | TrackBack(0) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。