用Arduino Ethernet遠程喚醒電腦

來源:互聯網
上載者:User

標籤:arduino ethernet   伺服器   遠程   網路連接埠   

譯自:http://ricardo-dias.com/2010/11/20/arduino-wakes-my-pc/

我一直夢想著通過網路控制我房間裡的一些物件。在電腦上看IPTV,開/關燈,遙控P2P下載…完成這些,我需要一個伺服器– 我的舊台式機倒是可以做到。當然,我不是故意晾著它 整天/周/月的…^^

我需要在任何想要用的時候,找到複活它的辦法。所以我想我可以用一個Arduino和乙太網路插板來發送 區域網路喚醒包(來實現遠程伺服器開機)。

 

這個UdpRaw庫可允許發送未經處理資料包,所以我要做的只是執行以下這個“魔法包(Magic Packet)” – 它由 6個0xFF及緊跟的16個目標MAC地址 組成。

byte wolMac[] = { 0x00,0x00,0x00,0x36,0x45,0xC1 };

現在,我所需要的是在6*0xFF後複製MAC地址16次。我是這麼做的:

byte all[102];int i,c1,j=0;for(i = 0; i < 6; i++,j++){  all[j] = 0xFF;}for(i = 0; i < 16; i++){  for( c1 = 0; c1 < 6; c1++,j++)    all[j] = wolMac[c1];}

運行這些代碼之後,所有的這些陣列將獲得完整的魔法包,預備發送:

UdpRaw.sendPacket(all,102,targetIp,targetPort);

所以測試的話,我琢磨出了一個簡單的程式,當按下一個按鈕時,包就發送了。然後呢,我在pin 2上用了一個中斷。Arduino基本能保持對那個引腳的偵聽,無論從低到高,都將執行特定功能。

搞定上面之後,我計劃用Arduino來偵聽網路連接埠,當它接收到一個指定的包序列後,就喚醒電腦。這樣就能在世界的任何有角落叫啟動我的伺服器了! 

 

這是全部的Arduino 代碼:

/** Arduino WakeMyPc * Ricardo Dias * http://ricardo-dias.com/ * * This sketch sends the "magic packet" to wake up * a PC on Local Area Network when a push-button * is pressed. */#include <Ethernet.h>#include <UdpRaw.h>// ARDUINO CONFIGbyte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // Arduino MACbyte ip[] = { 192, 168, 1, 112 }; // Arduino IPbyte gw[] = { 192, 168, 1, 254 }; // Gateway IP addressint localPort = 8888; //local port to listen on// THE TARGETbyte targetIp[] = { 192, 168, 1, 255 };int targetPort = 5456;byte wolMac[] = { 0x00,0x00,0x00,0x36,0x45,0xC1 }; // The target PC Mac Addressvoid setup() {  Ethernet.begin(mac,ip,gw);  UdpRaw.begin(localPort);  // Will run the sendPkt() function when a button wired to  // pin 2 is pressed  attachInterrupt(0, sendPkt, RISING);}void loop() {  delay(1);}void sendPkt(){  // The ‘magic packet‘ consists of 6 times 0xFF followed by 16 times  // the hardware address (MAC).  byte all[102];  int i,c1,j=0;  for(i = 0; i < 6; i++,j++){    all[j] = 0xFF;  }  for(i = 0; i < 16; i++){    for( c1 = 0; c1 < 6; c1++,j++)      all[j] = wolMac[c1];  }  UdpRaw.sendPacket(all,102,targetIp,targetPort);}

PS:你可能在想“見鬼為什麼它不能直接把這些包發送到電腦上?”

可以這樣解釋:我的ISP喜歡在每天夜裡2點重啟路由器。那麼路由器重啟,伺服器就down掉,它不知道伺服器連著的是哪個網路連接埠。為解決此問題,這些包需要發送到廣播IP。然而,在區域網路中才行。


與我們更多交流:[email protected]

歡迎登陸WIZnet官方網站:http://www.iwiznet.cn

用Arduino Ethernet遠程喚醒電腦

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.