Python连载,能写不能读

标签 python serial-port

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

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

Traceback (most recent call last): File "serialRec.py", line 4, in for line in ser: File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 456, in read raise SerialException('device reports readiness to read but returned no data (device disconnected?)') serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected?)

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

sys 参数是:argv[1] = device (/dev/ttyUSB0)argv[2] = braud rate(例如 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()

关于Python连载,能写不能读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34634209/

相关文章:

visual-studio - 使用 Unity 时出错。没有解决方案有效..错误 CS0234 : The type or namespace name `Ports' does not exist in the namespace `System.IO'

C# - 后台工作人员通过串行从 Arduino 连续获取数据

python - 无法解压不可迭代的 datetime.date 对象

python - 当我尝试使用 python 访问我的 Outlook 日历时出现 AADSTS700016 错误

c++ - C++ 的 Python 解释器

linux - Linux 上的串行通信连接

python - 在 RHEL 7.2 上安装 Python 2.7.8 和 2.7.5 时出现问题

python - 在用户输入时输入 2 个数字,以空格分隔

Linux命令使用硬件流控制将二进制文件发送到串口?

c++ - 在 Windows 7 上连接到高于 10 的 COM 端口时出现无效句柄错误