python - PySerial - 回车(\r)没有按预期工作
问题描述
我正在尝试使用 PySerial 通过串行(rs232)端口与板通信。
该板是瑞萨电子 rl78,下面是我的示例代码。(基本上我在这里尝试的是执行一些预定义的命令。所以这里commands
又是一个返回其他命令列表的命令)
import serial, time, io
ser = serial.Serial()
ser.port = "/dev/cu.usbserial"
ser.baudrate = 19200 # as used for HyperTerminal
ser.timeout = 10 #non-block of 10 seconds
ser.bytesize = serial.EIGHTBITS
ser.parity=serial.PARITY_NONE
ser.stopbits=serial.STOPBITS_ONE
ser.xonoff = False
ser.rtscts = True
ser.dsrdtr = True
ser.dtr = True
ser.rts = True
try:
ser.open()
except Exception, e:
print "error open serial port: " + str(e)
exit()
if ser.is_open:
try:
#ser.reset_input_buffer() #flush input buffer, discarding all its contents
#ser.reset_output_buffer() #flush output buffer, aborting current output
#write data
ser.write(b'commands\r')
ser.reset_input_buffer()
time.sleep(2)
in_wait = ser.in_waiting
while True:
if in_wait != 0:
output = ser.read(in_wait)
print(output)
break
else:
break
ser.close()
except Exception, e1:
print "error communicating...: " + str(e1)
else:
print "cannot open serial port "
从设备的角度来看,我们必须点击return
(回车 \r) 才能使用任何终端应用程序执行命令。即 Mac 的超级终端或串行。
所以上面的代码不返回任何输出,而只是一个空字符串(这是你在终端中点击返回 (\r) 时得到的内容)。该设备的行为就像它得到了一个返回 (\r) 并且该命令被完全忽略。
为了确保这不是 PySerial 的问题,我尝试使用 PySerial 的miniterm来获取此终端行为,并且我能够成功执行命令
同样,这里的问题是将 CR 设置为 EOL 以使命令成功执行。
python -m serial.tools.miniterm -e --eol=CR
所以我对我的代码有什么问题以及为什么它没有执行命令感到困惑。
解决方案
推荐阅读
- react-native - 无法读取未定义 [React Native] 的属性“getUserMedia”
- angular - 如何将 Firestore 数据映射到 Ionic / Angular 应用程序中的打字稿界面?
- prismjs - 如何正确地将 PrismJS 集成到 Eleventy 项目中?
- python - Tkinter Bugs wrt 向菜单栏添加多个按钮
- sql - 光标:最大整数值保留在行中,其他值在前几行中变为零
- r - 置信区间 - 不同方法的结果不一致
- python - 如何使用 httplib2 上传图像,但不将其保存到我的计算机?
- python - 如何使用 concurrent.futures.ProcessPoolExecutor 在进程之间传递消息/信息
- d3.js - 图表未显示
- c# - 有什么方法可以在并行任务完成后立即访问结果?