Arduino和Python之间通过UDP的通信

时间:2019-03-09 22:54:22

标签: python arduino udp

我正在努力在Arduino和Python之间建立通信桥梁。 Arduino应该将整数值发送给python。为了启用Udp通信,我在Arduino上使用了以太网屏蔽2,并且必须连接到IP“ 192.168.137.30”。 现在,当我尝试连接到该IP地址进行绑定时,会发生错误,因为“ 192.168.137.30”是外部IP地址。

下面是我的Arduino和python代码:

#include <SPI.h>
#include <SD.h>
#include <Ethernet2.h>
#include <EthernetUdp2.h>         // UDP library from: bjoern@cs.stanford.edu 12/30/2008

byte mac[] = {
  0xA8, 0x61, 0x0A, 0xAE, 0x2A, 0x12
};
IPAddress ip(192.168.137.30);

unsigned int localPort = 8880;      // local port to listen on

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;


void setup()
{


  Ethernet.begin(mac, ip);
  Udp.begin(localPort);
  Serial.begin(115200);

  }

void loop()
{

   char  ReplyBuffer[] = "acknowledged";    
    Udp.beginPacket(ip, localPort);
    Udp.write(ReplyBuffer);
    Udp.endPacket();

}

Python:

import serial
import time 
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('192.168.137.30', 8880))
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
sock.close()

我仍然无法将数据从Arduino发送到Python。但是,可以将数据从Python发送到Arduino。

IPAddress ip(169, 254, 114, 130);
IPAddress my_PC_ip(169, 254, 94, 133);
unsigned int localPort = 7476; 
unsigned int pythonPort= 7000; 

void setup()
{
  Ethernet.begin(mac, ip);
  Udp.begin(localPort);
  Serial.begin(115200);

  }

void loop()
{
    Udp.beginPacket(my_PC_ip,pythonPort);
    Udp.print("hello");
    Udp.endPacket();
}

Python:     导入序列     导入时间     导入套接字

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('169.254.94.133', 7000))
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
sock.close()

1 个答案:

答案 0 :(得分:1)

您没有在正确的位置放置正确的IP地址。这应该是哪里:

  • 在Arduino的Ethernet.begin中,您应该使用Arduino的IP地址。
  • 在Arduino的Udp.beginPacket中,您应该使用计算机的IP地址。
  • 您应该在计算机上的sock.bind中使用计算机的IP地址。

您当前在所有三个地方都使用同一个,从网络角度来看这没有意义。