使用Python 3.3和pySerial进行串行通信.
我正在尝试向COM PORT写一个命令,但write方法不会占用我的字符串.(大多数代码来自这里使用pySerial包的完整示例
这是怎么回事?
import time
import serial
ser = serial.Serial(
port='\\\\.\\COM4',
baudrate=115200,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
if ser.isOpen():
ser.close()
ser.open()
ser.isOpen()
ser.write("%01#RDD0010000107**\r")
out = ''
# let's wait one second before reading output (let's give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
out += ser.read(40)
if out != '':
print(">>" + out)
ser.close()
Run Code Online (Sandbox Code Playgroud)
错误发生在ser.write("%01#RDD0010000107**\r")中,它获取Traceback就像这个data = to_bytes(data)b.append(item)TypeError:需要一个整数.
我正在尝试使用python和PySerial编写一个在Linux PC中使用串行端口的应用程序.但是在这台PC中还有其他使用串口的应用程序.在尝试使用之前,如何知道其他应用程序是否已打开某个端口?
谢谢
假设您想为其他程序员提供一个接口,使他们能够编写如下代码:
# connect to remote Linux device
>>> conn = myClass('/dev/ttyUSB0', 115200, '8N1')
>>> conn.login('myname', 'mypass')
>>> output = conn.command('ls -al')
>>> print output
total 3
drwxr-xr-x 49 myname myname 4096 Jun 21 15:13 .
drwxr-xr-x 4 root root 4096 Mar 20 14:43 ..
drwxr-xr-x 49 myname myname 1005 Jun 14 11:23 .vimrc
>>> output2 = conn.command('cd ..')
>>> print output2
>>>
Run Code Online (Sandbox Code Playgroud)
你会如何实施它?
我首先想到的是pyserial,但它似乎将串行连接简单地视为像对象这样的文件,而不是终端.我从它的源代码中发现pyserial本身使用了termios,这至少看起来像配置选项一样.但是哪个框架能够实现类似终端的IO?我只是整个嵌入式系统世界的初学者,但直到现在,在我看来,通过串行连接的终端IO应该是这个环境中常见的日常问题,并且应该已经有一个框架在做"努力工作" ".但直到现在我都找不到它.
目前,我公司的大多数人都手动测试他们的嵌入式系统开发主题.但我们希望切换到更自动化的场景,其中包括很多unittest脚本.因为我们的嵌入式系统上每个UART都有一个类似接口的终端,所以我想给这些测试脚本的作者提供更直观地编写代码的机会,因为他们无论如何都会通过minicom或屏幕与设备进行交互.
我正在尝试使用 pySerial 通过串行读取和写入传感器。我没有软件或硬件流量控制。
我能够向设备发送一串十六进制字符串,但我只收到一个字节,而不是我应该看到的两到十个字节。传感器正在工作——我已经使用 Realterm 验证了这一点。
我尝试过使用 ser.readline() (而不是 inWaiting 循环)和 ser.read(2); 这只会导致程序挂起。我还尝试增加睡眠时间,并尝试不同的波特率(在电脑和传感器上),但似乎没有任何效果。
有人有建议吗?
import time
import serial
# configure the serial connections
ser = serial.Serial(
port='COM1',
baudrate=115200,
parity=serial.PARITY_EVEN,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
ser.isOpen()
print 'Enter your commands below.\r\nInsert "exit" to leave the application.'
while 1 :
# get keyboard input
data_in = raw_input(">> ")
if data_in == 'exit':
ser.close()
exit()
else:
# send the character to the device
ser.write(data_in.decode('hex') + '\r\n')
out = ''
time.sleep(1)
while ser.inWaiting() > 0:
out …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个简单的 python 脚本,将 gcode 命令发送到运行 Marlin 的 wanhao D9 主板打印机。我在通过 USB 连接到打印机的树莓派上运行 python 脚本。
import serial
ser = serial.Serial("/dev/ttyUSB0", 115200)
ser.write("G28\n")
Run Code Online (Sandbox Code Playgroud)
我已经阅读了 20 多个有类似问题的论坛页面,并尝试了他们的答案,例如将波特率更改为 250000 以及对 write 函数参数进行以下更改:
ser.write("G28\r\n")
ser.write(b'G28\r\n')
ser.write(b'G28\n')
ser.write(b'G28')
ser.write("G28")
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有这些组合,并且我还添加了:
time.sleep(5)
Run Code Online (Sandbox Code Playgroud)
以及我文件顶部的时间模块的相关导入语句。我在 ser 声明和 ser.write 函数调用之间添加了这行代码。
我也尝试添加:
ser.close()
Run Code Online (Sandbox Code Playgroud)
看看这是否会有所作为,但事实并非如此,因为我知道这无论如何都是最佳实践。
无论我使用什么代码组合,当我运行我的 python 脚本时,我的打印机似乎重新启动(屏幕从主页变为打开的 wanhao 徽标并返回主页)
我期待任何人都可以就我的代码以及我可能做错的事情向我提供任何帮助。