2017-03-02 260 views
0

我想用我的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传感器屏蔽的方法。


  1. 为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
  • 我也尝试了几种库:

    1. EtherCard:建议在库文件中将cs引脚设置为53,我做了。另外一个应该在草图中使用这行代码(它没有编译。错误是在组合使用sizeofEthernet::buffer

      ether.begin(sizeof Ethernet::buffer, mac, 53) 
      
    2. UIPEthernet(我想我可以在这里使用标准布线,因为它是说,这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); 
    } 
    

    所以我的问题是:

    1. 什么是检验两个连接的最简单的方法:

      PC - >以太网模块和
      以太网模块 - > Arduino?

    2. 我是否需要在草图中设置使用的Arduino引脚,还是在lib中执行此操作?

    3. 草图应该正常工作吗?

    回答

    0

    https://github.com/jcw/ethercard请下载此。并编译并运行udplistener的例子。

    https://sourceforge.net/projects/sockettest/下载此程序(SocketTest)。 SocketTest是非常简单的程序。

    而且在Arduino的代码,(ether.udpServerListenOnPort(&udpSerialPrint, 1337);

    你改变你想要的端口号。 “udpSerialPrint”是一个回调函数。“1337”是一个端口号。如果存在udp数据,程序调用这个函数。

    相关问题