2

我有一个 python 脚本,我正在运行通过 UDP 从 Arduino 的模拟输入接收数据。

import socket

UDP_IP = "10.0.0.222"
UDP_PORT = 50000

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(12) # buffer size is 32 bytes
    print len(data) #check length of data recived
    sensors = struct.unpack('>hhhhhh', data)
    print sensors

Arduino 以 12 字节的数据包发送包含 6 个模拟读数的数据包。每个读数都是一个 2 字节的 16 位整数,首先是 LSB,然后是 MSB。我的脚本工作正常,直到 Arduino 上的读数之一降至 255 以下。此时,Arduino 发送一个空字符 \x00。发生这种情况时,脚本将不再读取任何数据并停止运行。我认为我遇到的问题是将 UDP 数据读入字符串,我已经研究过使用 sock.recv_into() 但没有找到任何我理解的示例,任何帮助或指针将不胜感激。谢谢史蒂夫

4

1 回答 1

0

您不能将二进制数据视为以空字符结尾的字符串,特别是您不能使用字符串函数来确定其长度。数据报包含接收到的数据的长度。Python 确实提供了一种从数据报中获取它的方法吗?

于 2013-09-14T23:19:36.933 回答