2009年11月30日

WOL未対応パソコンの電源をマジックパケットでオン解決編

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

WOL未対応のパソコンでもマジックパケットで外部ネットワークから電源を入れる。「arduino+ethernet shield」なら簡単です。

必要なものは、「arduino」「イーサネット・シールド」小型リレーダイオード、半田と半田コテ、そして多少の線材です。

あと、必要に応じて、ブレッドボードなどです。

まずは回路図

WOL未対応のパソコンでもマジックパケットで外部ネットワークから電源オン

WOLrepSw.jpg実際は、こんな感じのたいへんシンプルなもの。
←クリックで拡大です。


使い方は、対象パソコンがWOLに対応している場合、たとえば自宅のPCから、職場のグローバルIPのポート7番にマジックパケットを飛ばします。この際、対象PCのMACアドレス宛てに送れば、「arduino Wake On LAN リピーター」として動作するので、問題なく対象PCの電源が入ります。

対象パソコンがWOLに対応していない場合、リレーの出力をマザーボード(実際の電源スイッチと並列につないでも可)につなぎます。これはWOL未対応でも直接電源ボタンを手で操作するのと同じ効果なので電源のオン/オフはもちろん、電源ボタン長押しによる強制切断にも対応します。

下記のスケッチ上の「Target PCのMAC addressをセット」の部分にWOL未対応PCのMACアドレスを入れてスケッチをarduinoに転送します。回路図通り接続が完了している事が前提で、WOL対応PCの場合と同じく外部ネットワークからマジックパケットを飛ばせばリレーが1秒オンになりPCの電源が入ります。

外部ネットワークからMACアドレスの1バイト目(一番左のバイト)を「FF」に変更してマジックパケットを飛ばせばリレーが10秒オンになり、PCの電源がオンであったなら、強制的に電源オフになります。

以下、スケッチ


// Wake On Lan リピーター (WOL未対応パソコン対応版)

// 遠隔でパソコンの電源ボタンを直接操作します

// 遠隔でパソコンの電源ボタン長押し(電源強制切断)にも対応


// http://yutakalife.net/article/134256657.html

// 販売などの商用利用はご遠慮ください
// Copyright love4nature All Rights Reserved.
#include <WString.h>
#include <Ethernet.h>
#include <UdpRaw.h>

byte TargetMac[] = { 0x00,0x00,0x00,0x00,0x00,0x00 }; // Target PCのMAC addressをセット

// イーサネットの設定
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC address
byte ip[] = { 192, 168, 1, 200 }; // Arduino のIP address
byte gw[] = { 192, 168, 1, 1 }; // Gateway IP address
int localPort = 7; //local port to listen on

// ターゲットのブロードキャストアドレスを指定
byte targetIp[] = { 192, 168, 1, 255};
int targetPort = 8000;

#define MAX_SIZE 192
// パケットサイズの最大値を設定
byte packetBuffer[MAX_SIZE]; // 受信パケット用バッファ
int packetSize; // 受信パケットのサイズが格納される
byte remoteIp[4]; // 送信元のIPアドレスを格納
unsigned int remotePort; // 送信元のポート番号を格納

int i;
int verification;

void setup() {
Ethernet.begin(mac,ip,gw);
UdpRaw.begin(localPort);
pinMode(2, OUTPUT); // 2番ピンを出力に設定
Serial.begin(9600);
}

void loop() {

// 受信データがあれば実行
if(UdpRaw.available()) {
packetSize = UdpRaw.readPacket(packetBuffer,MAX_SIZE,remoteIp,(uint16_t *)&remotePort);

Serial.print("Received packet of size ");
Serial.println(abs(packetSize));

Serial.print("From IP ");

for(i=0; i<3; i++) {
Serial.print(remoteIp[i],DEC);
Serial.print(".");
}
Serial.print(remoteIp[3],DEC);

Serial.print(" Port ");
Serial.println(remotePort);

if(packetSize < 0) {
// if return value <0 the packet was truncated to fit into our buffer
Serial.print("ERROR: Packet was truncated from ");
Serial.print(packetSize*-1);
Serial.print(" to ");
Serial.print(MAX_SIZE);
Serial.println(" bytes.");
}

Serial.println("Contents:");

for(i=0; i<min(MAX_SIZE,abs(packetSize)); i++) {
Serial.print(packetBuffer[i],HEX);
Serial.print(" ");
}
Serial.println("");

// Target PCのMAC当てMagicPacketを受信でリレーをオン
for(i=6; i<102; i++) {
int j = abs((102 - i) % 6 - 6);
if ( j == 6 ) j = 0;
if (TargetMac[j] == packetBuffer[i]) verification++;
if (j == 0) {
if(packetBuffer[i] == 0xFF) verification += 2;
}
}

// 受信したMagicPacketの宛先が、Target PCのMACアドレス1バイト目が0xFFで
// 他の5バイトが完全に一致ならリレーオン時間が10秒(パソコンの強制電源オフ)
if(verification>=112){
Serial.println("RELAY ON for 10000ms");
digitalWrite(2, HIGH); // リレーオン
delay(10000); // 10000ミリ秒待つ
digitalWrite(2, LOW);
}else{
// 受信したMagicPacketの宛先が、Target PCのMACアドレスと完全に一致なら
// リレーオン時間が1秒(パソコンの通常電源オフ/オン)
if(verification>=96){
Serial.println("RELAY ON for 1000ms");
digitalWrite(2, HIGH); // リレーオン
delay(1000); // 1000ミリ秒待つ
digitalWrite(2, LOW);
}
}

// マジックパケットを送信
UdpRaw.sendPacket(packetBuffer,packetSize,targetIp,targetPort);
Serial.println("Start port forwarding to broadcast address:");
for(i=0; i<3; i++) {
Serial.print(targetIp[i],DEC);
Serial.print(".");
}
Serial.print(targetIp[3],DEC);
Serial.println("");
Serial.println("Done!");
}
verification = 0;
//wait a bit
delay(10);
}

arduinoは、ピンのシンク、ソース電流ともに40mAまで流せます。秋月で購入のこの小型リレーなら25mA程度しか流れないので問題なし。回路がシンプルで済みます。
posted by love4nature at 01:00| Comment(0) | TrackBack(0) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする

2009年11月29日

WOL未対応のパソコンの電源をマジックパケットでオン

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

紹介してきたarduino WOLリピータですが私の職場では、ある人が自宅から彼のオフィスのパソコンの電源を入れたいという希望に応えるものでした。

ご覧のとおり完成したのですが、最悪の問題が露呈。

なんと彼が使っているマシン「DELL DIMENSION 1100」は、どうやらWOLに対応していないらしいのです。確かに他のマシンはマジックパケット受信で問題なく電源が入るのにこいつだけは入らん。

いまどきのデスクトップマシンでWOL未対応なんてあるのですね。

ググルと休止状態からのWOLに対応とのことなので試してみた。確かに起動するが、起動するときとしないときがあったり、起動しても画面が写らなかったりと非常に不安定。WinXPの休止状態は使えると思っていない私なので、対策を・・・

こんなとき、やっぱり「arduino+ethernet shield」で作っておいて良かったと思うわけです。

そう、何とかなるのです。

WOL未対応のパソコンでもマジックパケットで外部ネットワークから電源を入れることが
「arduino+ethernet shield」なら簡単にできてしまうのです。

続き

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

2009年11月28日

WOLリピータ(個別送信機能付き)

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

昨日の続き

昨日はリピータ機能のみのものを紹介しましたが、今日は
登録した端末から可変抵抗器でターゲットを選択して、押しボタン押下でマジックパケットを送信する機能を持たせたものです。

使用部品は
CIMG3986.JPG
arduino2009×1
ethernet shield
×1
LCD (GDM1602K)×1
可変抵抗10k×1
半固定抵抗10k×1
抵抗10k×1
抵抗150×1
タクトスイッチ×1
ブレッドボード×1


回路図は多分こんな感じ。
WOLrepSender.gif

「arduino WOL リピーター」は、bjoern / arduino_oscというライブラリを利用してUDPを取り扱っています。リンクページからarduino_osc-tip.zipというファイルをダウンロードして、中にあるEthernet及びStringフォルダのファイルを、arduino IDEのフォルダ「\hardware\libraries\Ethernet」及び「\hardware\libraries\String」にコピーしてください。

当然ですが、ルーターでポートを開けて、開けたポートを「arduino WOL リピーター」に転送する設定が必要です。

以下スケッチ。

// WOLリピータ(個別送信機能付き)
// Digital 7, プッシュボタン(マジックパケット送信用)
// Analog 0, 可変抵抗器(送信先選択用)


// http://yutakalife.net/article/134042204.html

// 販売などの商用利用はご遠慮ください

// Copyright love4nature All Rights Reserved.

#include <WString.h>

#include <Ethernet.h>

#include <UdpRaw.h>

#include <LiquidCrystal.h>

// LCDピン接続:
// rs on pin 10
// rw on pin 9
// enable on pin 8
// d0, d1, d2, d3 on pins 5, 4, 3, 2
// 使用するピンの定義
LiquidCrystal lcd(10, 9, 8, 5, 4, 3, 2);

byte TargetMac1[] = { 0x00,0x00,0x00,0x00,0x00,0x00 }; // hostName1のMAC addressをセット
byte TargetMac2[] = { 0x00,0x00,0x00,0x00,0x00,0x00 }; // hostName2のMAC addressをセット
byte TargetMac3[] = { 0x00,0x00,0x00,0x00,0x00,0x00 }; // hostName3のMAC addressをセット

char hostName1[] = " hostName1 ";
char hostName2[] = " hostName2 ";
char hostName3[] = " hostName3 ";


// イーサネットの設定
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC address
byte ip[] = { 192, 168, 1, 200 }; // Arduino のIP address
byte gw[] = { 192, 168, 1, 1 }; // Gateway IP address
int localPort = 7; // 受信ポート(sndmagic version 0.2)を使用の場合は7番

// ターゲットのブロードキャストアドレスを指定
byte targetIp[] = { 192, 168, 1, 255};
int targetPort = 8000;

#define MAX_SIZE 192
// パケットサイズの最大値を設定
byte packetBuffer[MAX_SIZE]; // 受信パケット用バッファ
int packetSize; // 受信パケットのサイズが格納される
byte remoteIp[4]; // 送信元のIPアドレスを格納
unsigned int remotePort; // 送信元のポート番号を格納

int i;
int packetLen = 102;
byte packet[102];

void setup() {
Ethernet.begin(mac,ip,gw);
UdpRaw.begin(localPort);
lcd.begin(2,16);
lcd.clear(); // LCD表示をクリア
lcd.setCursor(4,0); // カーソルを1行目4カラム目にセット
lcd.print("arduino"); // 1行目にメッセージを表示
lcd.setCursor(2,1); // カーソルを2行目3カラム目にセット
lcd.print("WOL Repeater"); // 2行目にメッセージを表示
delay(2000);
lcd.clear();
lcd.print(" and Sender ");
delay(2000);
lcd.clear();

// 7番ピンをデジタル入力に設定
pinMode(7,INPUT);
Serial.begin(9600);
}

void loop() {
// アナログ0番ピンの可変抵抗器の値を読み込み341で割る
int val = analogRead(0)/341;

switch (val) {
case 1:
lcd.print(" Target host: ");
lcd.setCursor(0,1); lcd.print(hostName1);
break;
case 2:
lcd.print(" Target host: ");
lcd.setCursor(0,1); lcd.print(hostName2);
break;
case 3:
lcd.print(" Target host: ");
lcd.setCursor(0,1); lcd.print(hostName3);
break;
default:
lcd.print(" Target host:");
lcd.setCursor(0,1); lcd.print(hostName1);
}

// デジタル入力がHIGH(5V)でマジックパケットを作成
if(digitalRead(7)==HIGH){
delay(100); // チャタリング対策
packetSize = 126;
Serial.println(""); Serial.println("Sent packet to:"); Serial.println("");

for (int i = 0; i <= 5; i++){
packet[i] = 0xFF;
}

for (int i = 6; i <= packetLen; i++){
int j = abs((packetLen - i) % 6 - 6);
if ( j == 6 ) j = 0;
// 可変抵抗器の値に応じてターゲットを切り替える

switch (val) {
case 1:
packet[i] = TargetMac1[j];
break;
case 2:
packet[i] = TargetMac2[j];
break;
case 3:
packet[i] = TargetMac3[j];
break;
default:
packet[i] = TargetMac1[j];
}
}

if ( val == 1 ){
UdpRaw.sendPacket(packet,packetLen,targetIp,targetPort);
lcd.clear(); lcd.print("SentMagicPacket:");
lcd.setCursor(0,1); lcd.print(hostName1);
Serial.println(""); Serial.println(hostName1); Serial.println("");
delay(1000);
}
if ( val == 2 ){
UdpRaw.sendPacket(packet,packetLen,targetIp,targetPort);
lcd.clear(); lcd.print("SentMagicPacket:");
lcd.setCursor(0,1); lcd.print(hostName2);
Serial.println(""); Serial.println(hostName2); Serial.println("");
delay(1000);
}
if ( val == 3 ){
UdpRaw.sendPacket(packet,packetLen,targetIp,targetPort);
lcd.clear(); lcd.print("SentMagicPacket:");
lcd.setCursor(0,1); lcd.print(hostName3);
Serial.println(""); Serial.println(hostName3); Serial.println("");
delay(1000);
}

lcd.clear();

Serial.println("Magic packet ordering Done!");

for (int i = 0; i < packetLen; i++){
Serial.print(packet[i], HEX);
Serial.print(" ");
}
Serial.println(""); Serial.println("");
}

// 受信データがあれば実行(WOLリピータ機能)
if(UdpRaw.available()) {
packetSize = UdpRaw.readPacket(packetBuffer,MAX_SIZE,remoteIp,(uint16_t *)&remotePort);

Serial.print("Received packet of size ");
Serial.println(abs(packetSize));

Serial.print("From IP ");
for(i=0; i<3; i++) {
Serial.print(remoteIp[i],DEC);
Serial.print(".");
}
Serial.print(remoteIp[3],DEC);

Serial.print(" Port ");
Serial.println(remotePort);

if(packetSize < 0) {
Serial.print("ERROR: Packet was truncated from ");
Serial.print(packetSize*-1);
Serial.print(" to ");
Serial.print(MAX_SIZE);
Serial.println(" bytes.");
}

Serial.println("Contents:");
for(i=0; i<min(MAX_SIZE,abs(packetSize)); i++) {
Serial.print(packetBuffer[i],HEX);
Serial.print(" ");
}
Serial.println("");

// マジックパケットを送信
UdpRaw.sendPacket(packetBuffer,packetSize,targetIp,targetPort);
Serial.println("Start port forwarding to broadcast address:");
for(i=0; i<3; i++) {
Serial.print(targetIp[i],DEC);
Serial.print(".");
}
Serial.print(targetIp[3],DEC);
Serial.println("");
Serial.println("Done!");

lcd.clear(); lcd.print("Received packet"); delay(2000);
lcd.clear(); lcd.setCursor(4,0); lcd.print("From IP:");

lcd.setCursor(0,1);
for(i=0; i<3; i++) {
lcd.print(remoteIp[i],DEC);
lcd.print(".");
}
lcd.print(remoteIp[3],DEC); delay(2000);

lcd.clear(); lcd.print("Target MAC:");

lcd.setCursor(0,1);
for(i=6; i<11; i++) {
lcd.print(packetBuffer[i],HEX);
lcd.print(":");
}
lcd.print(packetBuffer[11],HEX); delay(2000);

lcd.clear(); lcd.print(" Target host: ");
}
}


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

生後6週間

ニュージーランドでは、生後6週間で1回目の予防接種を行います。
そのときに少し熱を出しましたが、それ以外はまったく元気そのものです。

もちろん予防接種は無料です。
というか義務になっていて、受けていないと幼稚園や小学校の入学を断られることになりかねません。

ニュージーランドの教育システムは、日本のそれとは大きな違いがあります。

日本の教育システムは、変わりつつありますが、大まかに表現すると「詰め込みがた横並び管理教育」でしょうか。記憶力がモノを言います。

ニュージーランドの場合は、考える力を養うタイプです。ただし、聞いた話では、落ちこぼれを生みやすいそうです。

どちらが正しいということはありません。大切なのは、その土地や時代にあった方法にいつでも変えられる柔軟さでしょうか。

我が家の育児テーマである「早期自立」とは、自ら考える力を適切な時期に本人に持ってもらうことをいいます。

あくまで本人の選択を最優先にします。ですが選択肢を与えるのは親の責任だと考えております。
posted by love4nature at 01:00| Comment(0) | TrackBack(0) | 子育て日記 | このブログの読者になる | 更新情報をチェックする

2009年11月27日

avrdude: stk500_getsync(): not in sync: resp=0x00

最近、ハマっている8bitワンボードマイコン「arduino Duemilanoveですが、プログラム書き込みの際にタイトルのようなエラーが出新規書き込みができなくなってしまった。正確には下記のエラー

avrdude: stk500_getsync(): not in sync: resp=0x00
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51

既に書き込んでいるプログラムは動いているので、壊れたわけではなさそう。あくまで新規書き込みができない。

日本語、英語ともにいろいろとググッては見た。同じ問題で困っている人がたくさんいるようだが、決定的な解決方法が見当たらない。

しかし、イーサネットシールドを取り付けると直ってしまった。

ネット上で見つかった解決方法はこんな感じ・・・ATMEGA328のチップを外すと直るとか、しばらく使わずにおいておくと直っていたとか、IDEの再起動で直ったとか、シリアルポートのドライバを再インストールで直ったとかありました。

ちなみにどれを試しても直らなかった。試してないけど
ATMEGA328のブートローダー再書き込みで直ったという報告もありました。

今回のケースで、もちろんマイコンボードの選択ミスはあり得ない。何だったのだろうと思っていたら、状況再発。

イーサネットシールドを取り外した後、また同様のエラーが止まらない。いろいろやってみたが、十分に調べる前にまた直ってしまった。今度は、イーサネットシールドなしでも復旧。何をやったか一応メモしておく。

「arduino Duemilanove」のリセットボタンを押しながら、USBケーブルを抜いて、さらに押しながら再度挿入。

リセットボタンは、かなり長く押すのがコツ。10秒とか

とりあえず今回はこれで直った。う〜ん・・・結局わからん。

これだけは言える。とにかく直った。
今はそれだけでいいのだ。

追記、上記のとおり一度直った後、かなり時間を空けて、別の基板で再発、やはり
リセットボタンを押しながら、USBケーブルを抜いて、さらに押しながら再度挿入で普及しました。

2010年2月現在。私の場合。やはり、この方法で直っています。

電気的な問題っぽいですね。ところで、皆さんこの方法で直ってますか?
ラベル:Arduino
posted by love4nature at 23:00| Comment(13) | TrackBack(0) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする

arduino Wake On LAN リピーターの作成

2012年11月22日更新:
 arduino WOL リピータのスケッチを最新の開発環境用に修正・更新


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

職場のネットワークに勝手にルーターを追加することはできませんが、既存のルーターのポートを開けるくらいはできる。

Wake On LAN リピータ」を日本で買って送ってもらうよりは、こちらでも購入可能な「arduino+ethernet shield」を選択したわけです。

リピータ機能のみのものとそれに加え、可変抵抗器で登録した端末からターゲットを選択して押しボタン押下でマジックパケットを送信する機能を持たせたものを作りました。

この「arduino WOL リピーター」のIPは、192.168.1.200となっていますが、任意で変更してください。受信ポートは、7番になっていますが、マジックパケット送信アプリに応じて任意で変更してください。

私は、sndmagic (For Windows NT) Latest version 0.2 を使わせてもらっています。下記サイトから入手可能
http://www.st.rim.or.jp/~yumo/pub/sndmagic_chglog.html

このソフトを使う場合は、sndmagic.exeとmagic.exeをパスがとおっている場所(C:\Windows\system32)などにコピーして使うと、バッチファイルのクリックのみで、対象PCの遠隔電源オンが可能で便利です。

使い方は、対象パソコンがWOLに対応している場合、たとえば自宅のPCから、職場のグローバルIPのポート7番(前述の
sndmagicはポート7番に飛ばします)にマジックパケットを飛ばします。問題なく対象PCの電源が入ります。

当然ですが、
職場のルーターには、UDPの7番ポートをarduino WOL リピーター(192.168.1.200)に転送する設定が必要です。

対象パソコンがWOLに対応していない場合は、
arduino WOL リピーター & スイッチャー」をご覧ください。

以下にスケッチです。「arduino WOL リピーター」は、bjoern / arduino_oscというライブラリを利用してUDPを取り扱っています。リンクページからarduino_osc-tip.zipというファイルをダウンロードして、中にあるEthernet及び
Stringフォルダのファイルを、arduino IDEのフォルダ「\hardware\libraries\Ethernet」及び「\hardware\libraries\String」にコピーしてください。

あとは「arduino」と「ethernet shield」を合体させて、このスケッチを転送するだけで動作します。


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

#include <WString.h>
#include <Ethernet.h>
#include <UdpRaw.h>

// イーサネットの設定
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC address
byte ip[] = { 192, 168, 1, 200 }; // Arduino のIP address
byte gw[] = { 192, 168, 1, 1 }; // Gateway IP address
int localPort = 7; //local port to listen on

// ターゲットのブロードキャストアドレスを指定
byte targetIp[] = { 192, 168, 1, 255};
int targetPort = 8000;

#define MAX_SIZE 192
// パケットサイズの最大値を設定
byte packetBuffer[MAX_SIZE]; // 受信パケット用バッファ
int packetSize; // 受信パケットのサイズが格納される
byte remoteIp[4]; // 送信元のIPアドレスを格納
unsigned int remotePort; // 送信元のポート番号を格納

int i;

void setup() {

Ethernet.begin(mac,ip,gw);
UdpRaw.begin(localPort);
Serial.begin(38400);

}

void loop() {

// if there's data available, read a packet
if(UdpRaw.available()) {
packetSize = UdpRaw.readPacket(packetBuffer,MAX_SIZE,remoteIp,(uint16_t *)&remotePort);

Serial.print("Received packet of size ");
Serial.println(abs(packetSize));

Serial.print("From IP ");
for(i=0; i<3; i++) {
Serial.print(remoteIp[i],DEC);
Serial.print(".");
}
Serial.print(remoteIp[3],DEC);

Serial.print(" Port ");
Serial.println(remotePort);

if(packetSize < 0) {
// if return value <0 the packet was truncated to fit into our buffer
Serial.print("ERROR: Packet was truncated from ");
Serial.print(packetSize*-1);
Serial.print(" to ");
Serial.print(MAX_SIZE);
Serial.println(" bytes.");
}

Serial.println("Contents:");
for(i=0; i<min(MAX_SIZE,abs(packetSize)); i++) {
Serial.print(packetBuffer[i],HEX);
Serial.print(" ");
}
Serial.println("");

// マジックパケットを送信
UdpRaw.sendPacket(packetBuffer,packetSize,targetIp,targetPort);
Serial.println("Start port forwarding to broadcast address:");
for(i=0; i<3; i++) {
Serial.print(targetIp[i],DEC);
Serial.print(".");
}
Serial.print(targetIp[3],DEC);
Serial.println("");
Serial.println("Done!");
}
// 0.01秒待つ
delay(10);

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

2009年11月26日

WOLマジックパケットのルーター越え

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

WOLマジックパケットのルータ越えに立ちはだかる壁とは、まさにルーターです。

最近のルーターは、ブロードキャストアドレスへのポート転送を許可しないのが普通のようですね。

WOLマジックパケットのルータ越えを可能にする方法は、3つしかありません。
1)WOLに対応していると謳っているルーターを手に入れる。

業界初11n/gハイパワーで450Mbps(規格値)を実現。さらに高速・広範囲でつながる無線LAN,ゲスト...業界初11n/gハイパワーで450Mbps(規格値)を実現。さらに高速・広範囲でつながるバッファロー無線LANルーター


2)公式にWOLに対応していなくても設定で対応させられる機種を使う。たとえば・・・
I・O DATA/アイ・オー・データ WN-G54/R4 IEEE802.11g/b 無線LANルーター
 この場合の設定とは、「PCデータベース」にブロードキャストアドレスを登録することです。しかし、IPアドレス固定設定のところにxxx.xxx.xxx.255のような
ブロードキャストアドレスを入力した時点でJavaScriptによりエラーが表示されます。

そう、最後の255を入力する前にブラウザの
JavaScript設定を無効にすれば入力が可能です。そしてJavaScript設定を有効に戻した後「PCデータの追加」ボタンを押してみてください。問題なくブロードキャストアドレスを登録することができます。

JavaScript設定のオン/オフによってブロードキャストアドレスを登録できる機種は他にもあると思います。

3)WOLで電源を入れたいPCのネットワーク内にマジックパケットを送信または転送できる装置を接続する。
例えばこんな商品「Wake On LAN リピータ

おまけで、もうひとつ紹介
4)ルーターのARPテーブルが、PCの電源が切れていても変更または消去されないような設定を行う。
これはあまりお勧めの方法ではありません。続きはこちら


「Wake On LAN リピータ」を買うと解決しますが、同じ程度の出費なら、もったいない。

だって、「Wake On LAN リピータ」には、ただそれだけの機能しかないのですよ。「arduino+ethernet shield」なら、他にもいろいろできちゃいます。同じ金額ならこっちのほうがお得???


今回、arduino+ethernet shieldで作ったのは、上記(3)に該当するものです。
「arduino+ethernet shield」ならWOL未対応のパソコンでもマジックパケットで外部ネットワークから電源を入れることが簡単できてしまうのです。このarduino Wake On LAN リピーター & スイッチャー」を使えば。

WOLに対応しているパソコンでも前回異常終了時などにはマジックパケットで電源が入らないことがあります。逆に再起動もできないくらいおかしくなってしまっても、電源ボタン長押しの強制切断に対応しているので、電源のオフ/オンが可能です。

そのため「
arduino Wake On LAN リピーター & スイッチャー」は、WOLに対応しているパソコンでも有効に使えます。長期で家を留守にするときなどは重宝すると思いますよ。

出費するなら安いほうがいいときは、(2)で紹介したルーターを買ってルーター2段重ねで対応したほうが安上がりです。紹介した「I・O DATA WN-G54/R4」は3千円程度で新品を購入できます。

また、私はWN-G54/R3を持っているのですが、同じことができます。これを中古で手に入れればさらに安上がり。

しかし、あえて「arduino+ethernet shield」で作ってみました。実は、私の職場で必要になったので作ってみたのです。

続きは明日

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

2009年11月25日

WOLリピーター(インターネット経由でパソコンの電源をオン)

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

マイコンボード「arduino」が届いて3週間。やっと慣れてきました。

「ethernet shield」も届き何か実用的なものを作ってみようと思い立ち・・・第一作目が「Wake On Lan リピーター」

インターネット経由で自宅のパソコンの電源を職場から、逆に職場のパソコンを自宅から・・・電源を入れるだけの単純なことですが、実は奥が深かったりする。

有線接続でLANにつながっていることが前提ですが、電源が切れているパソコンは、ネットワークから「MagicPacket」という特殊なパケットを受信することで自身の電源を入れられます。

ところが・・・たいていの場合、立ちはだかる壁があります。

続きは明日

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

大人の趣味と子育ての両立

2歳10ヶ月の息子は私の古い趣味である「電子工作」に強い興味があるようです。マイコンボード(arduino)にサーボモーターやセンサーなどをつなげて作った実験機に大変興味を持って遊んでいます。

そして彼を観察していると、それで遊ぶことはもちろんですが、私がそれを作っている過程をとても楽しそうに見ながら邪魔をするわけです。(笑)

そう、彼は参加したいのです。ここで親は「邪魔するな」などと怒ってはいけません。怒ると彼の自立の邪魔をしてしまう。怒らずに説明します。

聞いているかどうかはお構いなしにひたすら説明しちゃいます。この場合は「もう少し待ってくれれば面白いことができると・・・」

息子とarduino

そして、最近息子に言った言葉はこれです。

「うちはもうおもちゃを買いません。その代わりに自分たちでおもちゃを作るために必要な材料や工具、測定機材は高くても買います。」


マイコンボードを使って作るおもちゃ教育作戦・・・

うまく導ければ子供に電気回路、電子回路、プログラミング、パソコン、そして数学の自立学習に導けるかもしれません。

もちろん親によるサポートは必須ですが・・
posted by love4nature at 01:00| Comment(0) | TrackBack(0) | 子育て日記 | このブログの読者になる | 更新情報をチェックする

2009年11月24日

第一子誕生3

ニュージーランドでの出産は経済的にとても楽な感じがします。
日本の場合は、出産一時金がありますが、国民健康保険に加入していないと支給対象にならないようなので厳密には、無料ではありませんね。

地方自治体が細かいサービスを提供している場合があるようなので日本の出産は、どこに住んでいるか、その親の職業環境や出産事情、その他によって大きく出産にかかる費用(実質負担)が変わってくるようです。

地域格差ってやつですね。
余談ですが地域格差というと、よく槍玉にあがる最低賃金。
ニュージーランドでは、最低賃金も全国共通で「12.5ドル/時」です。

日本の妊娠・出産に関する支払いは、終わってみないと総額でいくらかかるか分からない不安要素がつきまとう気がします。

また、日本の福祉は何かに加入していないと受けられないとか、生活保護については受ける時に「親戚に援助を当たってみましたか?」などと役人が聞いたりする陰湿なケースもあるようです。

役人に陰湿さは、どの国にもそんな人がいると思いますが・・・

日本はまだ福祉先進国とはいえないですね。決して先進国とは思えないニュージーランドのほうが、このあたりは進んでいると感じます。
posted by love4nature at 01:00| Comment(0) | TrackBack(0) | 子育て日記 | このブログの読者になる | 更新情報をチェックする
×

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