繁体   English   中英

Python串口,可以写但无法读取

[英]Python serial, can write but can't read

我正在尝试编写一个非常基本的脚本,这将允许我通过串行完全控制设备。 我可以发送数据(我知道设备接收数据,在设备上打开屏幕可以让我看到输入出现)。

但我无法接收数据,屏幕打开,并通过屏幕输入数据我得到错误:

回溯(最近一次调用最后一次):文件“serialRec.py”,第4行,用于ser中的行:文件“/usr/lib/python2.7/dist-packages/serial/serialposix.py”,第456行, read raise SerialException('设备报告准备读取但没有返回数据(设备断开连接?)')serial.serialutil.SerialException:设备报告准备读取但没有返回数据(设备断开连接?)

如果我打开端口等待没有屏幕的消息,则没有错误。 我说的应用程序发送数据没问题......我该怎么办? 我怎么才能读到这个? 我在Ubuntu 12.04安装上运行此脚本...屏幕在Ubuntu笔记本电脑连接到的设备上工作正常

sys参数是: argv[1] = device (/dev/ttyUSB0)argv[2] = braud rate (eg 9600)

import serial
import sys
import time

def enterdata():
    ser = serial.Serial(sys.argv[1], sys.argv[2])
    scom = raw_input("type away:" )
    incli = str(scom)
    time.sleep(.2)
    if (incli  == "exit the app"):
        print ("Exiting the data send, nothing was sent from the exit command")
    else:
        while True:
            print ser.readline()
        enterdata()

print ("Welcome to the serial CLI")
enterdata()

更新:

我现在有它工作,但有限和丑陋它从发送一个命令打印多行返回。 虽然为此我会尝试一些事情。 一旦我把它带到一个好地方,我会发布并分享一些不错的工作代码。

import serial
import sys
import time
def enterdata():
 ser = serial.Serial(sys.argv[1], sys.argv[2])
 scom = raw_input()
 incli = str(scom)
 if (incli  == "exit the app"):
  print ("Exiting the data send, nothing was sent from the exit command")
 else:
  ser.write(incli+"\r\n")
  time.sleep(0.5)
  while True:
   data = ser.read(ser.inWaiting())
   if (len(data) > 0):
    for i in range(len(data)):
     sys.stdout.write(data[i])
    break
  ser.close()
  enterdata()


print ("Welcome to the serial CLI, hit enter to activate:")
enterdata()

这是我所做的改变,它的工作原理。 虽然它似乎总是打印双倍或可能发送额外的字符

您可能希望首先尝试使用侦听器,但必须确保设备以正确的波特率将数据发送到串行端口。

import serial, sys
port = your_port_name
baudrate = 9600
ser = serial.Serial(port,baudrate,timeout=0.001)
while True:
    data = ser.read(1)
    data+= ser.read(ser.inWaiting())
    sys.stdout.write(data)
    sys.stdout.flush()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM