如何获取arduino ethercard udp接收数据?
how to acquire arduino ethercard udp receive data?
我在访问接收到的 udp 字符串时遇到问题,不过我可以通过串行获取它。我只需要使用 loop() 函数中的以太网卡库将我传入的 udp 数据放入一个变量中,这样我就可以在我的 program.Here 我正在使用的代码中使用它们:
#include <EtherCard.h>
#include <IPAddress.h>
#define STATIC 1 // set to 1 to disable DHCP (adjust myip/gwip values below)
#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,1,200 };
// gateway ip address
static byte gwip[] = { 192,168,1,1 };
#endif
// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x70,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[500]; // tcp/ip send and receive buffer
//callback that prints received packets to the serial port
void udpSerialPrint(word port, byte ip[4], const char *data, word len) {
Serial.println(data);
}
void setup(){
Serial.begin(57600);
Serial.println("\n[backSoon]");
if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
Serial.println( "Failed to access Ethernet controller");
#if STATIC
ether.staticSetup(myip, gwip);
#else
if (!ether.dhcpSetup())
Serial.println("DHCP failed");
#endif
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
//register udpSerialPrint() to port 1337
ether.udpServerListenOnPort(&udpSerialPrint, 1337);
//register udpSerialPrint() to port 42.
ether.udpServerListenOnPort(&udpSerialPrint, 42);
}
void loop(){
//this must be called for ethercard functions to work.
ether.packetLoop(ether.packetReceive());
//? incoming = data; <--- this is my problem
//Serial.println(incoming);
}
它只是以太网卡库附带的 UDPListener 示例的一个略微修改版本。
谢谢
我自己仍然处于陡峭的学习曲线中,但已经设法让 UDP 在单元之间进行对话,所以希望以下内容有所帮助。怀疑最快的方法是创建一个全局变量,例如:
char gUDPdata[30] = "";
然后在您的 udpSerialPrint 例程中添加以下内容以获得快速而肮脏的结果。这会将 'data' 复制到您可以在主循环中看到的全局变量。
Serial.println(data);
data[0] = 0;
strcpy(data, gUDPdata);
然后在您的主循环中,以下内容应该与 udpSerialPrint 例程中的 Serial.print 产生相同的结果。
Serial.println(gUDPdata);
我在访问接收到的 udp 字符串时遇到问题,不过我可以通过串行获取它。我只需要使用 loop() 函数中的以太网卡库将我传入的 udp 数据放入一个变量中,这样我就可以在我的 program.Here 我正在使用的代码中使用它们:
#include <EtherCard.h>
#include <IPAddress.h>
#define STATIC 1 // set to 1 to disable DHCP (adjust myip/gwip values below)
#if STATIC
// ethernet interface ip address
static byte myip[] = { 192,168,1,200 };
// gateway ip address
static byte gwip[] = { 192,168,1,1 };
#endif
// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x70,0x69,0x69,0x2D,0x30,0x31 };
byte Ethernet::buffer[500]; // tcp/ip send and receive buffer
//callback that prints received packets to the serial port
void udpSerialPrint(word port, byte ip[4], const char *data, word len) {
Serial.println(data);
}
void setup(){
Serial.begin(57600);
Serial.println("\n[backSoon]");
if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
Serial.println( "Failed to access Ethernet controller");
#if STATIC
ether.staticSetup(myip, gwip);
#else
if (!ether.dhcpSetup())
Serial.println("DHCP failed");
#endif
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
//register udpSerialPrint() to port 1337
ether.udpServerListenOnPort(&udpSerialPrint, 1337);
//register udpSerialPrint() to port 42.
ether.udpServerListenOnPort(&udpSerialPrint, 42);
}
void loop(){
//this must be called for ethercard functions to work.
ether.packetLoop(ether.packetReceive());
//? incoming = data; <--- this is my problem
//Serial.println(incoming);
}
它只是以太网卡库附带的 UDPListener 示例的一个略微修改版本。 谢谢
我自己仍然处于陡峭的学习曲线中,但已经设法让 UDP 在单元之间进行对话,所以希望以下内容有所帮助。怀疑最快的方法是创建一个全局变量,例如:
char gUDPdata[30] = "";
然后在您的 udpSerialPrint 例程中添加以下内容以获得快速而肮脏的结果。这会将 'data' 复制到您可以在主循环中看到的全局变量。
Serial.println(data);
data[0] = 0;
strcpy(data, gUDPdata);
然后在您的主循环中,以下内容应该与 udpSerialPrint 例程中的 Serial.print 产生相同的结果。
Serial.println(gUDPdata);