无法为Arduino uno Ethernet Shield分配MAC地址

时间:2013-05-21 12:21:29

标签: arduino arduino-ide

我一直在试图运行以太网>我的Arduino uno上安装了以太网盾的DHCPAddressPrinter示例但没有任何效果,每次运行它都会返回错误

  

无法使用DHCP配置以太网

我已经尝试了各种各样的东西,即禁用防火墙,重置电路板/屏蔽,在启动时它给了我一个ip,但这是唯一的一次,我关闭了路由器,当我打开它以后然后我无法为以太网屏蔽分配MAC和IP。

有人知道如何解决这个问题吗?

这是我试图运行的草图

/*
  DHCP-based IP printer

 This sketch uses the DHCP extensions to the Ethernet library
 to get an IP address via DHCP and print the address obtained.
 using an Arduino Wiznet Ethernet shield. 

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 12 April 2011
 modified 9 Apr 2012
 by Tom Igoe

 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  
  0xDE, 0xAD, 0xBD, 0xEF, 0xFE, 0xED 
};

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
  // this check is only needed on the Leonardo:
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // print your local IP address:
  Serial.print("My IP address: ");
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(Ethernet.localIP()[thisByte], DEC);
    Serial.print("."); 
  }
  Serial.println();
}

void loop() {

}

4 个答案:

答案 0 :(得分:2)

您连接的网络上是否有dhcp服务器,通常路由器设置为1。如果不是,您必须为您的arduino分配一个静态IP。

这可以像使用以太网库一样完成

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,177); // make sure this is in the subnet of your network
EthernetClient client;
Ethernet.begin(mac, ip);

看起来你只需要打印ip而不是每个字节。来自Ethernet.localIp()文档

// print your local IP address:
   Serial.println(Ethernet.localIP());

您也可以尝试webServer示例。然后看看你是否可以导航到浏览器中打印出的ip(希望不是0.0.0.0)

答案 1 :(得分:2)

如果您的以太网卡有SD插槽,请确保其中没有SD卡,或遵循此博客中的建议:http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-server-tutorial/basic-web-server/

    pinMode(4, OUTPUT);
    digitalWrite(4, HIGH);

答案 2 :(得分:0)

对于Seeed Studio V2.4,请务必使用此处的库:https://github.com/Seeed-Studio/Ethernet_Shield_W5200

我看到了同样的问题。 My Seeed Studios Ethernet Shield v2.4报告的IP地址不正确。我看到0.0.0.0和其他奇数值。我觉得有趣的是,使用标准/默认的Arduino Ethernet Shield库为另一家公司的盾牌提供了任何结果,更不用说IP地址格式正确的数字了。我通过为我的模型和以太网盾的版本下载正确的库来修复此问题(参见上面的链接)。

我希望这会有所帮助...... 麦克

答案 3 :(得分:0)

MAC地址不是任意的。 MAC地址的第一个字节的两个最低有效位很重要-我认为是第7位和第8位:

??????XY:????????:???????? ????????:????????:????????

其中?代表mac地址中的任何位,而X是“ U / L位”,而Y是Uni / multi转换位

如果MAC地址的第八位为1,则设备可能无法使用DHCP获取IP地址。如果MAC地址的第八位为0,则可能会带来更多的运气。

MAC地址的第7位和第8位是特殊的:单播的位8 == 0组播的位8 == 1

位7也很特殊-0 =全局唯一(分配给制造商使用)和1 =本地管理(我们应使用这些地址!)

这篇Wikipedia文章解释了: MAC Adresses Wikipedia