1

我一直在拼命地尝试在我的 Arduino uno 上运行以太网 > DHCPAddressPrinter 示例,该 Arduino uno 安装有以太网屏蔽,但没有效果,每次运行它都会返回错误

使用 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

4 回答 4

2

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

    pinMode(4, OUTPUT);
    digitalWrite(4, HIGH);
于 2014-04-16T17:25:08.047 回答
2

您要连接的网络上是否有 dhcp 服务器,通常路由器设置为一个。如果不是,您必须为您的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)

于 2013-05-23T01:37:33.437 回答
0

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

我看到了同样的问题。我的 Seeed Studios Ethernet Shield v2.4 报告了不正确的 IP 地址。我看到了 0.0.0.0 和其他奇数值。我认为有趣的是,将标准/默认的 Arduino 以太网屏蔽库用于另一家公司的屏蔽会产生任何结果,更不用说 IP 地址格式正确的数字了。我通过为我的模型和 Ethernet Shield 版本下载正确的库来解决这个问题(见上面的链接)。

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

于 2015-07-06T19:20:53.133 回答
0

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

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

其中?代表mac地址中的任何位,X是“U/L位”,Y是单/多投位

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

MAC 地址的第 7 位和第 8 位是特殊的: Bit 8 == 0 用于单播 Bit 8 == 1 用于多播

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

这篇维基百科文章解释了: MAC 地址维基百科

于 2018-08-12T20:59:04.483 回答