Arduino + Intel Galileo Gen 2 以太网 IP 未设置
Arduino + Intel Galileo Gen 2 Ethernet IP not set
我有一块 Intel Galileo Gen 2 主板,我正在使用 Arduino IDE 测试一些代码。配置以太网网络时遇到问题。我有以下代码,基本上是从示例演变而来的:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x98, 0x4F, 0xEE, 0x05, 0x65, 0x02 };
IPAddress server(192, 168, 15, 64);
IPAddress ip(192, 168, 15, 177);
IPAddress dnServer(8, 8, 8, 8);
IPAddress gateway(192, 168, 15, 1);
IPAddress subnet(255, 255, 255, 0);
EthernetClient client;
void setup() {
Serial.begin(9600);
Serial.print("ip - ");
Serial.println(ip);
Ethernet.begin(mac, ip, dnServer, gateway, subnet);
delay(1000);
system("ifup eth0");
delay(1000);
Serial.println(Ethernet.localIP());
Serial.println("connecting...");
if (client.connect("www.google.com", 80)) {
Serial.println("connected");
client.println("GET /search?q=arduino HTTP/1.1");
client.println("Host: www.google.com");
client.println("Connection: close");
client.println();
}
else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
}
// the loop function runs over and over again forever
void loop() {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
这是我看到的结果:
ip - 192.168. 15.177
255.255.255.255
connecting...
connection failed
disconnecting.
我看到的是显然没有分配 IP 地址,因为 localIP 指示 255.255.255.255。
我已经尝试了一些在论坛中找到的解决方法(接口启动、禁用 SD 卡)但没有任何效果。
我做错了什么?
谢谢
已更新
我已经更正了错误的 MAC 地址。添加了 ifup 命令。没有变化。
添加 system("ifconfig -a > /dev/ttyGS0");
命令后,我得到了这个:
enp0s20f6 Link encap:Ethernet HWaddr 98:4F:EE:05:65:02
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:980 (980.0 B)
Interrupt:50 Base address:0x4000
enp0s20f6:avahi Link encap:Ethernet HWaddr 98:4F:EE:05:65:02
inet addr:169.254.4.217 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
Interrupt:50 Base address:0x4000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:584 errors:0 dropped:0 overruns:0 frame:0
TX packets:584 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:45040 (43.9 KiB) TX bytes:45040 (43.9 KiB)
据我了解,它不是在尝试设置 IP,而是仍在搜索 DHCP。
您可以在设置函数中添加行 system("ifup eth0");
以确保网络接口已启动。
直接从开发板的 "Linux side" 中使用 system("ifconfig -a > /dev/ttyGS0");
行检查您的 IP 地址
解决方法是更改接口名称。 运行 的实际命令是这些:
system("ifconfig enp0s20f6 down ");
system("ip link set enp0s20f6 name eth0");
system("ifconfig eth0 up");
我有一块 Intel Galileo Gen 2 主板,我正在使用 Arduino IDE 测试一些代码。配置以太网网络时遇到问题。我有以下代码,基本上是从示例演变而来的:
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x98, 0x4F, 0xEE, 0x05, 0x65, 0x02 };
IPAddress server(192, 168, 15, 64);
IPAddress ip(192, 168, 15, 177);
IPAddress dnServer(8, 8, 8, 8);
IPAddress gateway(192, 168, 15, 1);
IPAddress subnet(255, 255, 255, 0);
EthernetClient client;
void setup() {
Serial.begin(9600);
Serial.print("ip - ");
Serial.println(ip);
Ethernet.begin(mac, ip, dnServer, gateway, subnet);
delay(1000);
system("ifup eth0");
delay(1000);
Serial.println(Ethernet.localIP());
Serial.println("connecting...");
if (client.connect("www.google.com", 80)) {
Serial.println("connected");
client.println("GET /search?q=arduino HTTP/1.1");
client.println("Host: www.google.com");
client.println("Connection: close");
client.println();
}
else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
}
// the loop function runs over and over again forever
void loop() {
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}
}
这是我看到的结果:
ip - 192.168. 15.177
255.255.255.255
connecting...
connection failed
disconnecting.
我看到的是显然没有分配 IP 地址,因为 localIP 指示 255.255.255.255。
我已经尝试了一些在论坛中找到的解决方法(接口启动、禁用 SD 卡)但没有任何效果。
我做错了什么?
谢谢
已更新
我已经更正了错误的 MAC 地址。添加了 ifup 命令。没有变化。
添加 system("ifconfig -a > /dev/ttyGS0");
命令后,我得到了这个:
enp0s20f6 Link encap:Ethernet HWaddr 98:4F:EE:05:65:02
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:980 (980.0 B)
Interrupt:50 Base address:0x4000
enp0s20f6:avahi Link encap:Ethernet HWaddr 98:4F:EE:05:65:02
inet addr:169.254.4.217 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
Interrupt:50 Base address:0x4000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:584 errors:0 dropped:0 overruns:0 frame:0
TX packets:584 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:45040 (43.9 KiB) TX bytes:45040 (43.9 KiB)
据我了解,它不是在尝试设置 IP,而是仍在搜索 DHCP。
您可以在设置函数中添加行 system("ifup eth0");
以确保网络接口已启动。
直接从开发板的 "Linux side" 中使用 system("ifconfig -a > /dev/ttyGS0");
解决方法是更改接口名称。 运行 的实际命令是这些:
system("ifconfig enp0s20f6 down ");
system("ip link set enp0s20f6 name eth0");
system("ifconfig eth0 up");