【问题标题】:Communication between Arduino and Python via UDPArduino 和 Python 之间通过 UDP 进行通信
【发布时间】:2019-03-11 01:25:10
【问题描述】:

我正在努力在 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()

【问题讨论】:

    标签: python arduino udp


    【解决方案1】:

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

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

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

    【讨论】:

    • 您的意思是计算机的 IP 地址是 localhost 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 地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多