首页 > 解决方案 > Arduino Ethernet shield 未正确接收 UDP 数据包

问题描述

我正在使用插入Adafruit Feather 328P的Adafruit Ethernet FeatherWing,我想从 Python 应用程序发送和接收 UDP 数据包。我正在使用库存的 Arduino UDP 代码来查看我发送的内容。这是我的 Python 代码:

def write_Arduino(self):
    sock_readresp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock_readresp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    sock_readresp.bind((self.config["DEFAULT"]["THIS_IP_ADDRESS"], int(self.config["DEFAULT"]["RECEIVE_PORT"] )))
    sock_readresp.settimeout(.2)

    MESSAGE = struct.pack("30c", b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9',
                              b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9',
                              b'0', b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8', b'9')

    print("Message is {}".format(MESSAGE))
    sock_read = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock_read.setblocking(0)
    sock_read.bind((self.config["DEFAULT"]["THIS_IP_ADDRESS"], 0))
    sock_read.sendto(MESSAGE,(self.config["DEFAULT"]["ARDUINO_IP_ADDRESS"],int(self.config["DEFAULT"]["SEND_PORT"])))
    sock_read.close()

我的设置是:

THIS_IP_ADDRESS = 192.168.121.1
ARDUINO_IP_ADDRESS = 192.168.121.2
SEND_PORT = 8888
RECEIVE_PORT = 32001

我已经更新了 Arduino 代码以反映这一点。当我发送这个数据包时,我可以通过我电脑上的 Wireshark 确认它

线鲨

我似乎发送的正是我认为的。一串“012345678901234567890123456789”(Wireshark 以十六进制显示 ASCII 字符,如此处所示)。然而,在 Arduino 上接收它看起来像这样:

Received packet of size 30
From 192.168.121.1, port 64143
Contents:
012345678901234567890123D6789

第 25 和第 26 字节总是这样显示,我错过了实际数据。这里会发生什么?

标签: arduinoudpethernetadafruit

解决方案


推荐阅读