arduino mega + ENC28J60以太网模块直接连接到PC接收/发送UDP
我想用我的Arduino Mega(带有传感器屏蔽层)和ENC28J60以太网模块(直接连接到我的PC)发送和接收来自飞行模拟器(X-Plane 11,它能够通过网络发送UDP)。arduino mega + ENC28J60以太网模块直接连接到PC接收/发送UDP
网络模块:http://www.ebay.de/itm/281353516180?_trksid=p2057872.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
我不能管理然而接收到的UDP数据写入串行监控。 我甚至不确定我是否确实收到UDP。
以太网模块和PC之间的连接似乎很好,因为以太网模块的I/O的绿色LED是永久打开的,而且只要我开始飞行模拟并从那里发送UDP,黄色指示灯就会闪烁。
我已经尝试过,标准以太网电缆和交叉。
根据2种不同的指南,我已经尝试了2种将ENC28J60以太网模块连接到Arduino Mega传感器屏蔽的方法。
-
为Arduino的乌诺
- ENC28J60标准布线SO到Arduino的销12
- ENC28J60 SI到Arduino的销11
- ENC28J60 SCK到Arduino的销13
- ENC28J60 CS到Arduino引脚10
- Enc28j60 VCC到A rduino 3V3销
- ENC28J60 GND到Arduino的GND引脚
-
推荐用于Arduino的米加
https://en.code-bude.net/2013/06/22/how-to-use-enc28j60-ethernet-shield-with-arduino-mega-2560/
-
布线
- GND至GND
- 3.3至3.3V
- SO到Pin50
- SI到Pin51
- SCK到Pin52
- CS到Pin53
-
EtherCard:建议在库文件中将cs引脚设置为53,我做了。另外一个应该在草图中使用这行代码(它没有编译。错误是在组合使用
sizeof
与Ethernet::buffer
)ether.begin(sizeof Ethernet::buffer, mac, 53)
UIPEthernet(我想我可以在这里使用标准布线,因为它是说,这LIB使用标准以太网屏蔽设置?)
-
什么是检验两个连接的最简单的方法:
PC - >以太网模块和
以太网模块 - > Arduino? 我是否需要在草图中设置使用的Arduino引脚,还是在lib中执行此操作?
草图应该正常工作吗?
我也尝试了几种库:
没有任何组合可以在串行监视器中输出任何输出。
我有试过草图如下:
#include <Dhcp.h>
#include <Dns.h>
#include <ethernet_comp.h>
#include <UIPClient.h>
#include <UIPEthernet.h>
#include <UIPServer.h>
#include <UIPUdp.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 6); // local IP - address of my Arduino
unsigned int localPort = 49001; // local port to listen - default X-Plane port
byte buf = 00; // buffer for UDP packet (BYTE, not char)
EthernetUDP Udp; // An EthernetUDP instance to send and receive packets over UDP
//-------------------------------------------------------------------------------
void setup()
{
Ethernet.begin(sizeof Ethernet::buffer, mac, 53)
Ethernet.begin(mac,ip); // start the Ethernet
Udp.begin(localPort); //..and UDP:
Serial.begin(9600); // init serial port
}
void loop() {
int packetSize = Udp.parsePacket(); // Checks for the presence of a UDP packet, and returns its size
if(packetSize) // UDP packet was received and its size defined
{
Serial.println();
Serial.print("Packet size: ");
Serial.println(packetSize); // Packet Size in bytes
// When Udp.read used without parameters, it returns next char (byte in this case) :
Serial.println("Xplane Data:");
for (int i =0; i/<packetSize; i++)
{
buf = Udp.read();
Serial.print(buf);
Serial.print("-");
}
}
delay(10);
}
所以我的问题是:
https://github.com/jcw/ethercard请下载此。并编译并运行udplistener的例子。
https://sourceforge.net/projects/sockettest/下载此程序(SocketTest)。 SocketTest是非常简单的程序。
而且在Arduino的代码,(ether.udpServerListenOnPort(&udpSerialPrint, 1337);
)
你改变你想要的端口号。 “udpSerialPrint”是一个回调函数。“1337”是一个端口号。如果存在udp数据,程序调用这个函数。