你好,请忍受我的基本问题,因为我是 python 新手。
我正在尝试从串行端口读取数据。基本上,串行端口是USB端口虚拟地转换为串行端口。我正在使用阿杜伊诺。
首先我尝试了这段代码:
while(True):
ser=serial.Serial('COM6',9600)
bytoread=ser.inWaiting()
val=ser.read(bytoread)
Run Code Online (Sandbox Code Playgroud)
但这给了我错误。
Permission Error(13,Access is denied, none 5)
Run Code Online (Sandbox Code Playgroud)
但是当我将代码更改为
while(True):
ser=serial.Serial()
ser.baudrate=19600
ser.port='COM6'
ser
ser.open()
bytoread=ser.inWaiting()
val=ser.read(bytoread)
Run Code Online (Sandbox Code Playgroud)
权限错误没有出现,但程序总是忙于连接端口。我等了很多分钟,但它一直没有进展。我在这里做错了什么?
我有一个串行 Python 程序,Linux 环境(Raspbian / Raspberry Pi),它通过 USB 到串行适配器使用串行端口。我需要处理用户拔下 USB 适配器然后重新插入的情况。
问题是,重新连接时,ttyUSB0变为ttyUSB1,因此不再找到该端口。但是,如果我停止 Python 程序(键盘中断)并再次拔下并重新插入 USB 适配器,则端口会返回到ttyUSB0(这样我就可以重新开始)。这只会在 Python 程序停止时发生。
我在触发器模式下测试了该程序(它似乎正在工作)以便在不再找到ttyUSB0时使用ttyUSB1,反之亦然,如果不再找到ttyUSB1,请使用ttyUSB0,等等,但是这个对我来说似乎是一个奇怪的解决方案。
有没有更好的方法来强制 pySerial “忘记”它曾经连接到 ttyUSB0 以防出错,并在程序仍在运行时将当前端口释放到系统?
这是一个有效的触发器测试程序:
import serial
import time
p = "/dev/ttyUSB0"
while True:
error_flag = False
try:
s = serial.Serial(port=p, baudrate=9600, bytesize=8, parity="N", stopbits=1, timeout=None, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None)
except Exception as e:
error_flag = True
if "ttyUSB0" in str(e):
p = "/dev/ttyUSB1"
print …Run Code Online (Sandbox Code Playgroud) 我有一些设备通过RS485 到 USB 转换器连接到我的笔记本电脑,并希望在 python 程序中检测它们。
我在Windows 7 Notebook 上使用PyCharm Community Edition运行此代码,我已经使用 pip 安装了 pyserial。
导入序列
x = list(serial.tools.list_ports.comports())
print(x)
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
回溯(最近一次调用):文件“C:/Users/rzzrgx/.PyCharmCE2018.3/config/scratches/scratch_1.py”,第 3 行,在 x = list(serial.tools.list_ports.comports()) AttributeError :模块“串行”没有属性“工具”
我是 Python 3.7 的新手,我正在尝试使用以下代码从串行端口读取字节。我正在使用pySerial模块并且read()函数返回bytes.
self.uart = serial.Serial()
self.uart.port = '/dev/tty/USB0'
self.uart.baudrate = 115200
self.uart.open()
# buffer for received bytes
packet_bytes = bytearray()
# read and process data from serial port
while True:
# read single byte from serial port
current_bytes = self._uart.read()
if current_bytes is B'$':
self.process_packet(packet_bytes)
packet_bytes = bytearray()
else:
packet_bytes.append(current_bytes) <- Error occurs here
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
类型错误:需要一个整数
一些想法如何解决?
我正在使用 pyserial 并尝试在 arduino 板上写入和读取数据。我看到几个例子表明在读写时应该使用flush。即使阅读了 pyserial 文档后,我也无法理解flush的作用是什么。我还注意到有:
flushInput()
flushOutput()
flush()
Run Code Online (Sandbox Code Playgroud)
每一个的作用是什么,为什么以及何时应该使用它。我很感激你的解释。
背景:我需要将一个数值作为字节发送到外部设备,但我遇到了一个问题.我的代码是:
ser=serial.Serial("COM3",9600, timeout=0)
ser.write(value)
Run Code Online (Sandbox Code Playgroud)
其中"value"是我读过的int读过的.问题是,当我发送它时,它发送字符值,而不是实际值(它发送数字5的字节值31,因为这是它的unicode位置,我相信)
实际上,我希望能够以"\ x05"字符发送它.我想我的问题是,我将如何将int 5转换为char"\ x05",或将37转换为"\ x37"
我正在使用pySerial库从Arduino获取Python脚本日志数据.我正在尝试处理SerialException,当脚本无法连接到您提供的端口时,Eclipse会说"Undefined variable:SerialException".有什么我忘了导入的东西吗?
码:
try:
ser = serial.Serial(port, 9600)
connected = 1
except SerialException:
print "No connection to the device could be established"
Run Code Online (Sandbox Code Playgroud) 我使用pySerial有问题,我不知道从哪里开始寻找.我有一个64位Windows 7操作系统,Python 2.7.5(32位),pySerial和Arduino(Arduino正常工作)已经安装.
我的Arduino代码如下:
// the setup routine runs once when you press reset:
void setup() {
// initialize the serial in 19200 baud rate
Serial.begin(19200);
}
// the loop routine runs over and over again forever:
void loop() {
delay(1000); // wait for a second
Serial.print("hello");
}
Run Code Online (Sandbox Code Playgroud)
(Arduino在COM8中连接,使用串行监视器时我可以看到它敬礼)
我的PySerial代码如下所示:
import serial
import time
arduino = serial.Serial("COM8", 19200)
time.sleep(2)
while True:
print arduino.readline()
Run Code Online (Sandbox Code Playgroud)
当我启动这个脚本时,程序运行,但我看不到串行输出(我认为Python脚本中的配置是正常的,因为如果有什么东西 - 例如端口 - 是错误的,它会崩溃).
我不知道如何找到解决方案.你能帮助我吗?
我的问题是,PySerial似乎丢失了一些数据包,我不知道为什么.
我有两个python脚本,第一个从文本文件中读取数据并将其写入微控制器,在那里操作数据.然后,微控制器通过不同的串行端口将修改后的数据发送回PC.(澄清一下:我需要两个串口,因为在最终的应用程序中,脚本将在不同的PC上运行.但是,出于测试目的,在一台PC上运行这两个脚本更容易)
所以基本上,我的硬件设置如下:
PC ----(serial port 1)----> microcontroller
<---(serial port 2)-----
Run Code Online (Sandbox Code Playgroud)
在将数据写入微控制器后,我希望能够获得一定数量的数据字节.如果我使用终端程序(如HyperTerminal)来监控收到的数据,一切看起来都很好.但是,如果我尝试使用Python脚本读取数据,我只获得预期数据字节的一小部分.
例如:
+--------------------+--------------------+
| with HyperTerminal | with Python script |
+--------------------+--------------------+
| 1:W:00522 | 1:W:00522 |
| 1:W:00532 | 1:W:00532 |
| 1:W:00518 | 1:W:00522 |
| 1:W:00522 | 1:W:00526 |
| 1:W:00522 | 1:W:00514 |
| 1:W:00526 | 1:W:00520 |
| 1:W:00514 | 1:W:00514 |
| 1:W:00520 | 1:W:00522 |
| 1:W:00520 | 1:W:00526 |
| 1:W:00514 | 1:W:00520 |
| 1:W:00516 | 1:W:00526 |
| 1:W:00522 …Run Code Online (Sandbox Code Playgroud) 我已经开始使用PySerial编写一些代码来向串行设备发送和接收数据.
到目前为止,我一直致力于从终端启动事务并从串行设备接收响应.
伪:
main:
loop:
message = get_message()
send_to_serial(message)
time_delay(1 second)
read_response()
Run Code Online (Sandbox Code Playgroud)
现在我想在串口设备启动通信的情况下在该端口上实现一个监听器.另外要移除time_delay哪个可能会结束太长时间,或者不足以让串行设备响应.
state = idle
register_interrupt(serial_device, read_response())
main:
loop:
message = get_message()
state = sending
send_to_serial(message)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我还没有找到任何使用中断进行通信的PySerial代码.
我只是不知道如何在python中设置任何类型的中断,怎么会
pyserial ×10
python ×10
serial-port ×6
arduino ×3
python-3.x ×3
arrays ×1
exception ×1
interrupt ×1
loss ×1
raspberry-pi ×1
raspbian ×1
windows ×1