Arduino的DHCP不工作
我使用自带不改变的事情除了固件地址,我改了一个印在以太网盾牌背面与Arduino的软件捆绑在一起的Web客户端的例子以太网草图。Arduino的DHCP不工作
每当我Arduino的连接到我的网络,并查看序列监视器,我得到的唯一信息是,它“无法使用DHCP配置以太网”。
我已经安装了带有以太网屏蔽的Arduino Mega 2560,正确地将端口50连接到MISO,将51连接到MOSI,将52连接到SCK,并将10连接到SS(又名ETHCS,因为它被印在以太网板上)。
你们有什么想法,为什么这个DHCP错误会发生?
非常感谢您提供的任何帮助!
这里是我的代码:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x73, 0xE4 }; //ethernet mac
IPAddress server(192, 168, 1, 9); //valid server IP in my network
EthernetClient client;
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
for(;;)
;
}
delay(1000);
Serial.println("connecting...");
if (client.connect(server, 80)) {
Serial.println("connected");
client.println("GET /search?q=arduino HTTP/1.0");
client.println();
}
else {
Serial.println("connection failed");
}
}
void loop()
{
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
我昨天测试的代码。 我的最后一个资源...摆脱“无限”循环,并返回到静态IP,如果DHCP失败。
试试这个代码:)它为我工作
#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[] = {
0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
// 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:
// 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() {
}
你能给这个代码试试吗?
#if defined(ARDUINO) && ARDUINO > 18
#include <SPI.h>
#endif
#include <Ethernet.h>
#include <EthernetDHCP.h>
// MAC Address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
const char* ip_to_str(const uint8_t*);
// Initialize the Ethernet server library
Server server(8080);
void setup()
{
Serial.begin(9600);
Serial.println("Attempting to obtain a DHCP lease...");
// Initiate a DHCP session. The argument is the MAC (hardware) address that
// you want your Ethernet shield to use. This call will block until a DHCP
// lease has been obtained. The request will be periodically resent until
// a lease is granted, but if there is no DHCP server on the network or if
// the server fails to respond, this call will block forever.
// Thus, you can alternatively use polling mode to check whether a DHCP
// lease has been obtained, so that you can react if the server does not
// respond (see the PollingDHCP example).
EthernetDHCP.begin(mac);
// Since we're here, it means that we now have a DHCP lease, so we print
// out some information.
const byte* ipAddr = EthernetDHCP.ipAddress();
const byte* gatewayAddr = EthernetDHCP.gatewayIpAddress();
const byte* dnsAddr = EthernetDHCP.dnsIpAddress();
Serial.println("A DHCP lease has been obtained.");
Serial.print("My IP address is ");
Serial.println(ip_to_str(ipAddr));
Serial.print("Gateway IP address is ");
Serial.println(ip_to_str(gatewayAddr));
Serial.print("DNS IP address is ");
Serial.println(ip_to_str(dnsAddr));
// Start the server
server.begin();
}
void loop()
{
// You should periodically call this method in your loop(): It will allow
// the DHCP library to maintain your DHCP lease, which means that it will
// periodically renew the lease and rebind if the lease cannot be renewed.
// Thus, unless you call this somewhere in your loop, your DHCP lease might
// expire, which you probably do not want :-)
EthernetDHCP.maintain();
// listen for incoming clients
Client client = server.available();
if (client) {
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
// Some misc. HTML
client.println("<title>Arduino Control Panel</title>");
client.println("<center><h1>Control Panel</h1></center>");
client.println("<p></p>");
// output the value of each analog input pin
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
client.print("Analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(analogRead(analogChannel));
client.println("<br />");
}
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}
// Just a utility function to nicely format an IP address.
const char* ip_to_str(const uint8_t* ipAddr)
{
static char buf[16];
sprintf(buf, "%d.%d.%d.%d\0", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3]);
return buf;
}
是固定的这对我的解决方案是从插槽中取出Micro SD卡,我看到了你的问题涉及到一个故障,但有这个问题关闭的Arduino后应该取出Micro SD卡等。
我有同样的问题。
我发现这个问题将其与一些类型的开关的产生,因为我有两个(安可模型ENH908-NWY版本3和其它IntelliNet的型号523301修订版1)。
随着开关喝采DHCP提出问题,Ethernet.begin(MAC)返回0,但IntelliNet的过程DHCP的工作没有任何问题。
我有一个ADSL华为在我家,其处理DHCP请求。
我认为这个问题是一个以太网盾R3解决,但我还没有试过。
我用它发布代码我尝试DHCP请求。
当我尝试以太网盾r3我来这里告诉你。
问候!
属性mac先前被定义为具有六个十六进制的数组字节。
void networkSetting(){
byte stateNet = 0;
//Se realiza petición DHCP para otros parámetros de Red si no están en memoria ya sea por System o Usuario
if ((EEPROM.read(userConfig) != setted) && (EEPROM.read(systemConf) != setted)) {
//Configurar el Socket solo con Mac
if (Ethernet.begin(mac) == 0){
Serial.println("DHCP not initialized! Try again...");
return;
}
//Verificamos conexión
stateNet = Ethernet.maintain();
//Ponemos bandera de parámetros de Red System seteados si cumple alguna condición
if (stateNet == 0 || stateNet == 2 || stateNet == 4)
{
//Obtenemos parámetros de Red
getNetParams();
//Guardamos parámetros de Red
saveNetParams();
//Seteamos configuración por Sistema
EEPROM.write(systemConf, setted);
} else {
//Resetear Bandera de parámetros de System (Tomará DHCP en el próximo Reinicio)
EEPROM.write(systemConf, 0);
}
} else {
//cargar parámetros de red
loadNetParams();
//Configurar el Socket con los parámetros desde la memoria
Ethernet.begin(mac, ip, gateway, gateway, subnet);
}
//Iniciar el Servidor
server.begin();
//Se envían datos de estado de Red y Port a Puerto Serial
Serial.println("Running as " + String(stateNet) + " in port " + String(port) + "!");
}
我附上了两种情况的截图。
它是一个答案? – manetsus 2016-04-03 03:00:07
事实证明(烦人),我做了一个错误的以太网屏蔽。新的以太网屏蔽解决了这个问题。 – Andrew 2012-03-02 05:57:29
你是怎么知道它有问题的?..我面临着你面临的同样的问题,但我不能确定它是否有问题。 – Coderji 2014-04-13 07:45:03