Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过UDP在Arduino和Python之间进行通信_Python_Arduino_Udp - Fatal编程技术网

通过UDP在Arduino和Python之间进行通信

通过UDP在Arduino和Python之间进行通信,python,arduino,udp,Python,Arduino,Udp,我正在努力在Arduino和Python之间搭建一座沟通桥梁。Arduino应该向python发送一个整数值。为了启用Udp通信,我在Arduino上使用Ethernet shield 2,并且必须连接到IP“192.168.137.30”。 现在,当我尝试连接以绑定此Ip地址时,出现了一个错误,因为“192.168.137.30”是一个外部Ip地址 下面是我的Arduino和python代码: #include <SPI.h> #include <SD.h> #incl

我正在努力在Arduino和Python之间搭建一座沟通桥梁。Arduino应该向python发送一个整数值。为了启用Udp通信,我在Arduino上使用Ethernet shield 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();

}

我仍然无法将数据从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()

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

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

你现在在三个地方都用同一个,从网络的角度看,这是没有意义的。

您是指计算机的IP地址是本地主机127.0.0.1还是以太网适配器IPv4地址或WLAN适配器WLAN IPv4地址?@Joe计算机是否使用以太网或WLAN连接到Arduino所在的网络?用那个。(绝对不是本地主机。)实际上“192.168.137.30”用于通过以太网与Arduino连接。那么“192.168.137.30”应该是计算机的IP地址,同时也是Arduino的IP地址?但问题是我不能用python绑定到这个外部IP地址……好的,这个“192.168.137.30”是我手动签名到Arduino的静态IP地址。由于与Arduino的连接是通过以太网进行的,因此该静态Ip地址现在是我的以太网的Ip地址。由于这个原因,“192.168.137.30”同时是我的Arduino的IP地址和我的计算机的以太网地址。有办法吗?你配置错了。只需给他们不同的IP地址。
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()