Python 遥测无线电之间的串行通信

Python 遥测无线电之间的串行通信,python,serial-port,pyserial,Python,Serial Port,Pyserial,几天来我一直在寻找我犯了什么样的错误,但现在已经不可能找到解决我错误的方法了。我希望你能帮助我,谢谢 我使用以下天线()将字符串接收到raspberry中,并通过macbook传输字符串。问题是我没有得到任何传输字符串 MacBook代码如下所示: import serial, time ser = serial.Serial( port="/dev/tty.usbserial-AH01W3BD", baudrate=57600, parity=serial.PARIT

几天来我一直在寻找我犯了什么样的错误,但现在已经不可能找到解决我错误的方法了。我希望你能帮助我,谢谢

我使用以下天线()将字符串接收到raspberry中,并通过macbook传输字符串。问题是我没有得到任何传输字符串

MacBook代码如下所示:

import serial, time

ser = serial.Serial(
    port="/dev/tty.usbserial-AH01W3BD",
    baudrate=57600,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_TWO,
    bytesize=serial.EIGHTBITS,
    xonxoff=True
    )

print "START SENDING"

while True:
    time.sleep(2)
    ser.write(bytes("hello world"))
    print("Outputting transmiter buffer: " + str(ser.out_waiting))
    print("Outputting reciver buffer: " + str(ser.in_waiting))
START SENDING
Outputting transmiter buffer: 0
Outputting reciver buffer: 0
Outputting transmiter buffer: 0
Outputting reciver buffer: 8
Outputting transmiter buffer: 0
Outputting reciver buffer: 16
Outputting transmiter buffer: 0
Outputting reciver buffer: 24
Mac中此代码的输出如下所示:

import serial, time

ser = serial.Serial(
    port="/dev/tty.usbserial-AH01W3BD",
    baudrate=57600,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_TWO,
    bytesize=serial.EIGHTBITS,
    xonxoff=True
    )

print "START SENDING"

while True:
    time.sleep(2)
    ser.write(bytes("hello world"))
    print("Outputting transmiter buffer: " + str(ser.out_waiting))
    print("Outputting reciver buffer: " + str(ser.in_waiting))
START SENDING
Outputting transmiter buffer: 0
Outputting reciver buffer: 0
Outputting transmiter buffer: 0
Outputting reciver buffer: 8
Outputting transmiter buffer: 0
Outputting reciver buffer: 16
Outputting transmiter buffer: 0
Outputting reciver buffer: 24
raspy代码:

import serial, time

ser = serial.Serial(
    port="/dev/ttyAMA0",
    baudrate=57600,
    timeout=4,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_TWO,
    bytesize=serial.EIGHTBITS,
    xonxoff=True
    )

print ("SETUP")
time.sleep(2)

while True:
    print ("START")
    print(ser.read().decode('utf-8'))
SETUP
START

START

START

START
raspy代码的输出:

import serial, time

ser = serial.Serial(
    port="/dev/ttyAMA0",
    baudrate=57600,
    timeout=4,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_TWO,
    bytesize=serial.EIGHTBITS,
    xonxoff=True
    )

print ("SETUP")
time.sleep(2)

while True:
    print ("START")
    print(ser.read().decode('utf-8'))
SETUP
START

START

START

START

在尝试在两台设备之间进行任何类型的通信之前,我首先要确保每个设备的设置功能正常。这样更容易找到问题。因此,我建议首先检查您的raspi是否正在发送和接收(您可以连接rx tx引脚作为一个简单的测试),以便您可以从列表中进行检查。还要检查解码是否正确,以防万一

第二:


那么,问题很可能出在哪里呢?检查您在MAC上运行的代码,因为您似乎没有在传输(传输缓冲区0?)。这是正确的端口吗?如果您的任务只是发送(打印(“输出接收缓冲区:“+str(ser.in_waiting))),为什么会有接收????您正在尝试传输,但您的接收缓冲区正在增大?我是不是误解了什么?这是什么python版本,2.7还是3.6?

我只是把ser.in_放进去,等着看我遗漏了什么,python版本是2.7。我还对发射机和接收机缓冲区感到惊讶,在连接天线和ls之前,我使用命令shell ls/dev查看Mac上的端口/dev连接天线后,出现的唯一新端口是/dev/tty.usbserial-ah01w3bdlet,让我们尝试一下。我认为你的问题可能在于你处理数据的方式。在读取部分,您有一个来自发射机模块(MAC)的字节流。尝试删除此模块中的字节部分(ser.write(bytes(“helloworld”)),并检查两个模块中的结果是否有变化。如果uart设置正确,则问题在于处理数据的方式。让我随时了解最新情况。还检查了raspiI上的端口是否实现了一些功能。默认情况下,天线有一个名为Mavlink的协议,该协议会干扰接收信息的方式,例如,如果我想发送hello world,我会收到一些不同的信息,因此该问题的解决方案是在3dr软件(配置天线的软件)中将Rawdata设置为协议。我遇到的另一个问题是读取串行端口的权限,该端口是/dev/ttyS0,而不是/dev/ttyam0。现在的问题是,我无法授予读取串行端口的永久权限。我尝试了以下方法:sudo chmod+777/dev/ttyS0,sudo adduser$USER dialout,KERNEL==“tty[A-Z]*[0-9]| pppox[0-9]*|ircomm[0-9]*|noz[0-9]*| rfcomm[0-9]*”,GROUP=“dialout”,sudo usermod-A-G dialout pi和sudo nano/etc/rc.local,我在/etc/rc.local中编写了sudo chmod+777/dev/ttyS0,但没有更改/dev/ttyS0的文件权限。谁能给我另一个解决办法吗?