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) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする

2012年11月20日

Arduino を Windows8 に 接続

震災後の引っ越し以来、行方不明になっていたArduinoがイーサネットシールドと合体した状態で出てきました。

さっそく、MACBOOKに接続を試みました。MACへの接続については、公式ページに書いている通りで問題なし。
http://www.arduino.cc/en/Guide/MacOSX

そこでWindows8について見てみると・・・まだ説明がなかった。やってみたことを書いておきます。
Windows8のデスクトップマシンもMACBOOK のVMware FUSION 上のWindows8 も同じ方法で行いました。どちらも問題なく動いています。


NewIDE02.png

ArduinoをWindows8のマシンにつなぐと「FT 232R USB UART」と表示されます。


NewIDE03.png

ダブルクリックして、プロパティが開いたら、「ドライバーの更新」をクリック


NewIDE04.png

自動検索のほうをクリック。


NewIDE05.png

これ、結構待ちます。3分くらい???
とにかく待ちます。


NewIDE06.png

バックグラウンドでちょっと変化が・・・
でも、まだ待ちます。


NewIDE07.png

「USB Serial Converter をインストールできませんでした」
というたくさん待たされた時にありがちな表示になりますが無視します。


NewIDE08.png

USB Serial Port をダブルクリックしてプロパティを開く


NewIDE09.png

ドライバーの更新をクリック


NewIDE10.png

自動更新を選択


NewIDE11.png

正常に終了


NewIDE12.png


これで、使えるようになりました。
Arduino IDE の COMポート設定と機種を正しく設定してスケッチの書き込みができることを確認しました。

最新のArduino IDE・・・ UDPが同梱されたようですね。
Arduino WOL マジックパケット リピータのスケッチがコンパイルできませんでした。

近々、最新の開発環境「Arduino 1.0.2」に合わせたスケッチを公開します。

P.S.
Windows8の新しいスクリーンショット機能。これも地味に便利。
「Windows」キー + 「Print Screen」キー で、ピクチャフォルダの中に
新しくスクリーンショットというフォルダが作られて、そこに時系列で
自動的にファイル名が付加されPNGで保存されました。

Win8のエクスプローラーは、かなり気に入りました。
ラベル:Windows8 Arduino
posted by love4nature at 21:41| Comment(0) | TrackBack(0) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする

2012年11月11日

MACで動くWindows8は超便利その1

前の記事<Windows8に変えたら管理共有(デフォルト共有)で各ドライブを覗けなくなった。解決編>

2010年LateのMACBOOKホワイトにSSDとメモリ増設するとVMware FusionでWindows8が実用的に使えました。この動画は、その仮想Windows8上で作ってみました。


特にSSDは費用対効果抜群。体感速度は軽く5倍越え






追記
Arduinoは震災の頃から触っていないのですが、引っ越しもあってどこにしまったか・・・
探してMACにつなぎたい。そしたら再開したいな。
ラベル:Windows8 MacBook
posted by love4nature at 00:01| Comment(0) | TrackBack(0) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする

2012年11月03日

Windows8に変えたら管理共有(デフォルト共有)で各ドライブを覗けなくなった。解決編

MACBOOK(白)にWindows8Proを入れました。

MACBOOK(白)のVMWARE FUSION仮想マシンに
Windows8Proを入れて、SSDを載せてメモリを2GBから8GBに増やしました。256GBのSSDと8GBのメモリを搭載するMACBOOK(白)になりました。

   


メチャ快適です。

で、Windows8から導入されたマイクロソフトアカウントを使用したWindowsへのログインも各マシンでデスクトップの壁紙などが同期されていたことにちょっとした感動を覚えました。

何かと酷評されている8ですが、そんなに悪くないです。慣れればマウスでの操作も意外と楽。マウスの移動距離やクリック数が増える操作もありますが、フリーソフトでスタートボタンを復活で切るから問題なし。


とりあえず2種類ありますね。
http://itpro.nikkeibp.co.jp/article/NEWS/20120904/420441/
http://www.stardock.com/products/start8/

私は、Classic shellを入れて、スタートボタンとスタート画面の両方を使用しています。
正直、
スタートボタンは7の物に戻してほしいね。



愛用していた仮想CD/DVDドライブソフトAlchol52%が対応していないので動かないが、Windows8のエクスプローラーは大幅にパワーアップしていて、ISOファイルをクリックすると自動的にDVDドライブにマウントされる。地味にめちゃ便利です。

さて、本題の管理共有(デフォルト共有)ですが、今までMACからデスクトップの各ドライブに管理共有でアクセスしていたのが気が付くとユーザー名とパスワードを求めてきている。

どうやら、ログインにマイクロソフトアカウントを使用していたためか、素直にユーザー名とパスワードを入れてもつながってくれない。

結局、以下の方法でMACからWindows8マシンへの管理共有(デフォルト共有)での接続が可能になりました。

(1) 接続先、Windows8のAdministratorを有効にする。
 左下の角でマウスの右クリック。コマンドプロンプト(管理者)を開く
 次のコマンドを実行。
 net user administrator /active:yes

(2) するとAdministratorでログインできるようになるので、ログインする。コントロールパネルのユーザーアカウント設定で必ずAdministratorのパスワードを作成する

(3) Administratorをログイン画面で見えなくする。
 ファイル名を指定して実行から、「regedit」を実行し、キーを2つ作成して、その中にDWORD値を作成する。
 HKEY_LOCAL_MACHINE → SOFTWARE → Microsoft → Windows NT → CurrentVersion → Winlogon

Winlogonの下に「SpecialAccounts」という名前のキーを作る

さらにSpecialAccountsの下に「UserList」という名前のキーを作り、その中に「Administrator」という名前でDWORD値を作成すると作業完了です。

これでMACBOOKのOSXでFinderの「移動」→「サーバーへ接続」で「smb://(Win8のコンピュータ名またはIPアドレス)/c$」とすると、無事に作業をしたwindows8マシンのcドライブをフルコントロールで触れます。

別にAdministratorsに属する別のローカルアカウントを作ってそれでもかまいません。

Windows8。思っているより使えば快適。今ならアップグレードも安いし、DVDが再生できない問題も、無料キャンペーン中の「MEDIA CENTER PACK」を入れれば解決する。企業での導入は時期尚早だと思うが、個人ユーザーなら入れたほうがいいと思う。

http://www.forest.impress.co.jp/docs/news/20121026_568818.html

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

2012年06月15日

独自ドメインで好きなメールアドレスをgmailで使おう


好きなメールアドレスを年間千円以内で10個まで持つことが出来ます。

例えば・・・あなたの名前@苗字.nameなんか
年間950円で持つことが出来ます。

「@」の前の名前部分には、家族の人数分だけ登録したり出来ます。

月80円程度で一生モノのメールアドレスを維持しましょう。

まず、バリュードメインでドメイン名を取得します。


valuedomain.jpg
http://www.value-domain.com/

*****.com
*****.net
*****.name

とかが、安くておすすめ

好きなドメイン名が取れたら、Gメールのシステムを使ってメールアドレスを作ります。初回の登録時のみ下記のサイトから手続きが必要。もちろん無料


googleapp1.jpg
https://www.google.com/a/cpanel/standard/new3

ドメインを入力後「送信」ボタンを押すとステップ2以降が入力可能になります。

必要事項を入力後、「同意して、アカウントを作成します」を押す

「かんたん設定」選択


googleapp2.jpg
Google Apps セットアップ ウィザードが表示されます。
「ようこそ」から始まる7つのステップを確認できます。

ここでは、キモの部分になる「ドメインの所有権を確認する」について説明します。

心の準備が出来たら「次へ」を押す


googleapp3.jpg
「所有権を確認します」の画面になります。


googleapp4.jpg
「別の方法」タブから「ドメイン名プロバイダ」を選択し「その他」を押す


googleapp5.jpg
すると「google-site」から始まるTXTレコードと呼ばれるものが表示されます。

Google APPの画面は、この状態で残しておいてブラウザの新規のタブや新規のウィンドウでバリュードメインのサイトを表示します。ログインして、メニューから「DNSレコード/URL転送の変更」に入る
http://www.value-domain.com/


valuedomain2.jpg
対象のドメインを選択して、DNS設定の画面に入る


valuedomain3.jpg
「他社サービスの自動DNS設定」という項目の「GOOGLE APPS」を選択して「保存するをクリックしてください」が出たら「OK」を押すが、保存はまだしない。

先ほどのGoogle APPの画面に表示されている「google-site」から始まるTXTレコードをコピーする

「設定フィールド」内の一番下に一行追加する。
「txt @ 」は、上の行からコピペ、又は入力後にTXTレコードをペースト

追加したら「保存する」を押す。

インターネット上に反映するまで、しばらく待つ必要があります。
「確認」を押しても確認できないとなります

私の場合は、20分ほどで反映されました。
コーヒーでも飲むか、暇なら次のように遊んで見ましょう。

コマンドで確認してみる


cmd.jpg
ウィンドウズなら「プログラム」−「アクセサリ」−「コマンドプロンプト」


cmd1.jpg
nslookup -type=txt sample.com(sample.comの部分はあなたのドメイン名)
以上のように入力後「ENTER」

上の写真のように結果が表示される。これは未だ反映されていない状態。

時間を置いて、何度か同じコマンドを実行。因みに矢印キーの「↑」で同じコマンドが出てきます。「↑」と「ENTER」だけでOK


cmd2.jpg
Google APPからコピーしたTXTレコードが表示されたら準備完了。

Google APPの画面に戻って「確認」を押す


googleapp7.jpg
「所有権が確認されました」が出るので「続行」を押す


googleapp8.jpg
ログイン画面になります。


googleapp9.jpg
ログインすると「ユーザーとグループ」から設定が再開されます。
後で出来るので「後で実行する」を押す


googleapp10.jpg
「Apps を設定する」画面になります。「次へ」を押す


googleapp11.jpg
「モバイルでのアクセス」の画面になるまで「次へ」を押す

自分の状況に合わせてチェックを入れる。私は、AndroidとiPhoneにチェックを入れました
説明を読んで「次へ」を押す


googleapp12.jpg
後は、必要と思うチェックを入れて最後まで行きます。

私の場合は「拡張とカスタマイズ」で全てのチェックを外し、最後まで「次へ」を押しました。

「ユーザーのトレーニングとサポート」

左上メニューの「メール」を押す


googleapp13.jpg
gmailのシステムであなたのドメインのメールアドレスが利用できるようになっています。


googleapp14.jpg
「ドキュメント」を試してみましょう。「Google ドライブに移動」を押す


googleapp15.jpg
Googleドライブが使えます


googleapp16.jpg
「カレンダー」も試してみましょう。

お疲れ様でした





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

2010年01月11日

arduinoとサーボモータで作る踏み切り

工作が面倒くさい人はこの仕掛け絵本がおすすめです。安い割に良く出来ていますよ。



年末年始は旅行などで忙しく、ゆっくりパソコンを触る時間がありませんでした。

今年最初の記事は、昨年作った息子のためのaruduino玩具についてです。前回の記事でも触れたとおり、サンプルスケッチを組み合わせただけの代物ですが、自分のための備忘録としてここに残しておきます。

arduinoとサーボモータで作る踏み切り arduinoとサーボモータで作る踏み切り

arduinoとサーボモータで作る踏み切り


//トグルスイッチでサーボを0度および90度状態を制御
//LED1とLED2を交互に点灯【踏切おもちゃ用のスケッチ】
// http://yutakalife.net/article/138096442.html
#include <Servo.h>

Servo servo;
int count = 1;
int LED1_PIN = 7; // DIGITALの7番にLED1
int LED2_PIN = 8; // DIGITALの8番にLED2
int running = 0;

void setup(){
//サーボの信号線を3番ピンに接続
//(PWMピン以外のピンにも接続可)
servo.attach(3);
//12番ピンをデジタル入力に設定
pinMode(12,INPUT);
Serial.begin(9600);
}

void loop(){
//デジタル入力がHIGH(5V)でcountに1を足す
if(digitalRead(12)==HIGH){
Start:
count++;
delay(500);
//count/2のあまりが0なら
if((count % 2) == 0){
//サーボ出力0℃
int val=0;
servo.write(val);
Serial.print("HIGH ");
Serial.print("\t");
Serial.print(count);
Serial.print("\t");
Serial.println(int(val));
running = 0;
}else{
//count/2のあまりが1なら
//LED1とLED2を交互に点滅
for (int i = 0; i < 2; i++){
digitalWrite (LED1_PIN, HIGH); // LED1を点灯する
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
delay (500); // 0.5秒待機する(500ms)
digitalWrite (LED1_PIN, LOW); // LED1を消灯する
digitalWrite (LED2_PIN, HIGH); // LED2を点灯する
delay (500); // 0.5秒待機する(500ms)
}
//サーボ出力90℃
int val=90;
for (int i = 0; i <= val; i++){
servo.write(i);
delay(10);
if (i <= 50){
digitalWrite (LED1_PIN, HIGH); // LED1を点灯する
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
Serial.println(i);
}
if (i >= 50){
digitalWrite (LED1_PIN, LOW); // LED1を消灯する
digitalWrite (LED2_PIN, HIGH); // LED2を点灯する
Serial.println(i);
}
}
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
Serial.print("LOW ");
Serial.print("\t");
Serial.print(count);
Serial.print("\t");
Serial.println(int(val));
running = 1;
}
}
if (running){
for (int i = 0; i <= 100; i++){
delay(10);
if(digitalRead(12)==HIGH){
digitalWrite (LED1_PIN, LOW); // LED1を消灯する
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
goto Start;
}
if (i <= 50){
digitalWrite (LED1_PIN, HIGH); // LED1を点灯する
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
}
if (i >= 50){
digitalWrite (LED1_PIN, LOW); // LED1を消灯する
digitalWrite (LED2_PIN, HIGH); // LED2を点灯する
}
}
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
}
}

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

2009年12月17日

なんだかよく分からないけど、arduino WOLリピーターを作りたい方へ

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



arduino WOL リピータ」の作成は本当に難しくないです。


「専門的なことは何も分からないけど、とにかく「arduino WOL リピータ」を実現したい人向けの説明」です。これを機会に新しい世界を楽しんじゃいましょう。きっといい趣味になりますよ。


紹介している「arduino WOL リピータ」ですが、マイコンボード「arduino」を触ったことがない方や技術的なことに詳しくない方にはとっつきにくいですよね。

でも、ネット社会である今、自宅から職場のパソコンの電源を入れたり、またはその逆は、PCユーザーなら初心者を問わず必要なことになってきました。

それには、必ずマジックパケットのルータ越えというテーマがつきまといます。

手順1.とりあえずモノをそろえる。
◆下記の電源を含む3点を購入。


◆arduino用の電源として下記のいづれか一方


持っていない人は、LANケーブルも手に入れる。


手順2.手に入れたら、
arduino基板にプログラムを転送するためのソフトをダウンロード&セットアップします。
◆下記サイトからarduino 用開発環境の最新版を手に入れる。
http://arduino.cc/en/Main/Software

ZIPで圧縮されているので、適当な場所に解凍。
arduino WOL リピータ」の実現だけなら、とりあえずデスクトップでもOK

◆ドライバーのインストール
※基板を触るときは、直前にパソコンの金属フレーム部分に触るなどして、体にたまった静電気を逃がしてくださいね。

手元のarduino
基板とパソコンをUSBケーブルで接続します。

Windows VISTA以降の場合は、ネットから取得するように選択すれば自動でインストールされます。
参考ページ(http://yutakalife.net/article/303005532.html

Windows XP/2000の場合は、先ほど手に入れた「
arduino 用開発環境」の解凍したフォルダの中に「drivers」とフォルダがあるのでそのフォルダを検索先に指定してインストールしてください。あとは、自動でインストールされます。

◆「arduino WOL リピータ」を実現するために必要な追加ファイルを手に入れる。
arduino_osc-tip.zipというファイルを下記サイトからダウンロード。
(Tag名、tipの横のDownloadの下、zipをクリック)
http://bitbucket.org/bjoern/arduino_osc/downloads/

圧縮されているので、適当な場所に解凍。

解凍された中の「arduino_osc」というフォルダの中に「libraries」というフォルダがあります。

さらにその中に「Ethernet」「String」というフォルダがあります。

まず「Ethernet」の内容をすべてarduino IDEのフォルダ「\hardware\libraries\Ethernet」にコピー。

次に「String」の内容を「\hardware\libraries\String」にそれぞれコピーしてください。

これが終わったら、arduino_osc-tip.zipと解凍して出来たフォルダは、削除してしまってOKです。



手順3.「arduino WOL リピータ」を作成
※基板を触るときは、直前にパソコンの金属フレーム部分に触るなどして、体にたまった静電気を逃がしてくださいね。
まず、arduinoとパソコンをつないでいるUSBケーブルを外します。

ここで、「arduino」と「ethernet shield」を合体させます。写真参照

arduino ethernet shieldarduino ethernet shield

arduino基板とパソコンをUSBケーブルで接続します。

手順2.でダウンロードして適当な場所に展開したフォルダ内の「arduino-xxx」フォルダの中にある「arduino.exe」をクリックして実行します。arduino 用開発環境が起動してウインドウが現れます。

現れたウインドウ内上部の「ツール」の中の「マイコンボード」の「Arduino Duemilanove or ...」が選択されていなければ選択する。

「ツール」の中の「シリアルポート」「COM3」にチェックがついていなければチェックをつける。

手順4.arduino基板にプログラムを転送する。
arduino WOL リピータ」のスケッチ(コード・プログラム)を全部選択してコピーします。

arduino IDE 日本語版のカーソルがある部分にペーストします。

ペーストしたスケッチの中の「Arduino のIP address」という部分に「
192, 168, 1, 200」を上書きする形で自分のネットワークに合うIPアドレスを入れます。※この場合は、ピリオド「.」ではなくカンマ「,」です。

左上の再生ボタンみたいなのをクリック。
コンパイルが終了するのを待つ。

次に右向きの矢印に縦棒線
みたいなのをクリック。
arduino基板にプログラムが転送され、自動的に実行されます。

これでarduino WOL リピータ」は完成です。

arduino用の電源として購入した電源アダプタにUSBケーブルをつなぎ換えます。念のために「ethernet shield」上のリセットボタンを1回押してください。

LANケーブルで「
ethernet shield」とスイッチングHUBやルーターのHUBポートを接続します。

これで
arduino WOL リピータ」の作業は終了です。剥き出しだと心配でしょうから、100円ショップなどで適当なプラスチックケースを買ってきて穴をあけて放置するのが良いでしょう。

次にルーターのポートを開いて、ポート転送の設定をルーターで行ってください。開くポートは、7番。転送先のIPアドレスは、先ほどの「Arduino のIP address」という部分のアドレスです。


手順5.外部ネットワークから(インターネット経由で)マジックパケットを送信する。
私は、sndmagic (For Windows NT) Latest version 0.2 を使わせてもらっています。このソフトは、ポート7番を使用します。下記サイトから入手可能
http://www.st.rim.or.jp/~yumo/pub/sndmagic_chglog.html

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

バッチファイル「sndmgc.bat」の内容は、下記のような感じ
magic -q xxx.xxx.xxx.xxx 32 XXXXXXXXXXXX

xxx部分は、グローバルIPです。ターゲットがあなたの自宅のパソコンなら、その
グローバルIP。

XXX部分は、
ターゲットパソコンのマックアドレス。windowsなら、ターゲットパソコン上のコマンドプロンプトで「ipconfig /all」などで調べてください。

別のソフトやサービスを利用する場合は、それにあわせてポート番号を変更してください。具体的には、
【手順4.arduino基板にプログラムを転送する。】に戻ってください。

ペーストしたスケッチの中の「local port to listen on」という部分に7番が設定されていますが、ここを変更してください。

下記ウェブサイトのマジックパケット送信サービス利用する場合は、2304
http://www.starstonesoft.com/mp/

Wake up On Lan Tool」というソフトを利用する場合は、任意でポート番号を指定できるので、7番のままでもかまいません。

ポート番号を変更したら、ルーターでのポート転送設定も変更してください。

不明な点やうまく動作しないことなどありましたら、コメントください。可能な限り対応します。

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

2009年12月05日

WOLのルーター越え。おまけの解決方法

WOLマジックパケットのルーター越えを可能にする3つの方法の続き、おまけの4つめ

4)ルーターのARPテーブルが、PCの電源が切れていても変更または消去されないような設定を行う。(可能であれば)
この方法は、ルーターの仕様に大きく依存します。ルーターがWOL未対応で、設定で対応させることもできない場合のおまけとしての対処法です。あまりお勧めではありません。

理由は、機能的に可能であってもルーターの機種によって設定方法が大きく変わってくるところや、新たな端末追加の際に設定がずれてしまう恐れがあることなどです。

実際の設定はルーターによって大きく異なりますので、ここでは概念だけを紹介します。

本来、マジックパケットはブロードキャストアドレス(例、192.168.1.255)宛てに送信されますので、例えばあなたのうちのパソコンのIPアドレスが、192.168.1.100/24だとすると、マジックパケットは、192.168.1.***、同一ネットワークのすべての端末に送信されます。

マジックパケットの中身は、大まかに言えば電源を入れたいパソコンのMACアドレスが16回連続している内容です。

各端末のネットワークカードが、届いたマジックパケットの中身の電源オン対象MACアドレスと自身のMACアドレスを照合するわけです。一致で電源オンです。

マジックパケットのルーター越えにおいて、ルーターでの障害とはブロードキャストアドレス宛てにポートフォワーディングが許可されていないことです。

あらかじめ、電源オン対象のパソコンのIPアドレスが固定されている場合、そのパソコンに直接ポートフォワーディングの設定を施すことで、マジックパケットをピンポイントで送信させることが可能な場合があるのです。

ここでの条件が、前述の「ルーターのARPテーブルが、PCの電源が切れていても変更されない及び、長時間消去されない」ことです。

ARPテーブルというのは、マジックパケットの送信に必要なMACアドレスとネットワーク内PCのIPアドレスの対照表です。つまり、MACアドレスとネットワーク内のIPアドレスの対応が消えたり、ずれたりしなければ、ルーターはピンポイントでマジックパケットを転送してくれるのです。

実際の設定は、ルータにより異なりますが、DHCPの設定をいじったりして試してみてください。できるかもしれません。

パソコンがWOL対応でマジックパケットが届きさえすれば、電源は入るので目的は達成されることになります。実は、
arduino WOL Repeaterを作る前は、職場でこの方法を使っていました。ちょっと不具合が出てしまったので「arduino+ethernet shield」にしました。

パソコン、ルーター共にWOL対応であっても不安定なときはあります。長期間旅行で自宅に戻らないときに、一度でもこの不安定があると、以降は遠隔操作ができないことになります。これでは、人の心も不安定になりますね。

心から安心を得たければ、「arduino+ethernet
shield」で簡単に実現できる「WOL Repeater & Switcher」が解決してくれます。

長期間外出のときだけ、これを使うという手もありますね。そしたら、普段は
「arduino+ethernet shield」を他のことに使えます。
posted by love4nature at 01:00| Comment(1) | TrackBack(0) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする

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) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする
×

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