标签: pyserial

serial.serialutil.SerialException:[Errno 16] 无法打开端口:[Errno 16] 设备或​​资源繁忙:'/dev/ttyACM0'

我正在尝试使用 Pyserial python 库将 Arduino Uno 的串行输出打印到我的屏幕上。

这是我的 Arduino 代码。它只是生成随机数并将其打印到串行监视器:

void setup() {
Serial.begin(9600);

}

void loop() {
    long rand = random(10);
    Serial.print(rand);
}
Run Code Online (Sandbox Code Playgroud)

我的 python 代码只是应该将序列中的值打印到命令行上,代码如下:

#!/usr/bin/python

import serial

ser = serial.Serial("/dev/ttyACM0",9600)
while True:
    thing = ser.readline()
    print(thing)
Run Code Online (Sandbox Code Playgroud)

当 Arduino 将随机数打印到串行监视器时,我运行 python 脚本并收到错误:

Traceback (most recent call last):
  File "/home/archimedes/anaconda3/lib/python3.6/site-packages/serial/serialposix.py", line 265, in open
    self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
OSError: [Errno 16] Device or resource busy: '/dev/ttyACM0'

During handling of the above exception, another exception occurred: …
Run Code Online (Sandbox Code Playgroud)

python linux arduino pyserial python-3.x

2
推荐指数
1
解决办法
2万
查看次数

如何更改 Pyserial 中的超时?

初始化串行后如何更改 Pyserial 中的超时?就像: ser=serial.Serial("COM4", baudrate=19200,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS,timeout=0.5) 在那之后,我想改变超时。有什么例子吗?谢谢 BR

python timeout pyserial

2
推荐指数
1
解决办法
8549
查看次数

写入串口时速度大幅降低

使用pygame从控制器读取信息,但是当我添加arduinoData.write(str.encode(ALL_DATA))它时速度会降低很多,我该怎么办?

该行几乎添加到底部。是线路的放置吗?它肯定可以工作,但发送更新的速度不像我不会写入串行那样快。

import sys
import serial
import pygame
import time

from pygame.locals import *
pygame.init()

A0_value = '0'
A1_value = '0'
A2_value = '0'
A3_value = '0'
A4_value = '0'
A5_value = '0'
A6_value = '0'
B2 = '0'
B3 = '0'
B4 = '0'
B5 = '0'
global axis_data 

## 
arduinoData = serial.Serial('COM8',9600)

##

def main():
    global axis_data , button_data
    screen = pygame.display.set_mode((500, 700))
    pygame.display.set_caption("Joystick example")

    clock = pygame.time.Clock()
    joysticks = {}

    while True:
        for event in …
Run Code Online (Sandbox Code Playgroud)

python pygame pyserial

2
推荐指数
1
解决办法
371
查看次数

在Mac上使用macports python(python27)安装pyserial时出现问题

我使用macports(在我的Mac上)安装了py-serial,但它安装了python24而不是使用我现有的python27.

因此,如果使用安装了macports py-serial的python24,那么我可以导入py-serial

# /opt/local/bin/python2.4 -c 'import serial'
Run Code Online (Sandbox Code Playgroud)

但是我不能使用其中任何一个将它导入到python27中

# /opt/local/bin/python2.7 -c 'import serial'
# python -c 'import serial'
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named serial
Run Code Online (Sandbox Code Playgroud)

我确保选择了正确的版本:

# port select --set python python27
Run Code Online (Sandbox Code Playgroud)

我尝试卸载并重新安装它仍然提供与上面相同的错误

# sudo port uninstall
# port install py-serial
Run Code Online (Sandbox Code Playgroud)

我认为这是一个与我的macports/python相关的问题,而不是py-serial.任何帮助表示赞赏.

python macos macports pyserial

1
推荐指数
1
解决办法
4061
查看次数

当我用Python刷新串行缓冲区时,它会停止读取

我编写了一个Arduino来将数据串行发送到我的电脑.pySerial正在从串口中正确读取,但由于我总是希望获得最新的信息,我以为我可以使用flushInput()刷新输入缓冲区,但是当执行命令时,我再也无法读取连载.我尝试每次只刷一次51次(因为51是一个素数,我可以很容易地用计数器计数51次而不必重置它),这样Arduino就有足够的时间发送下一个数据包(运行在57600波特) ),但仍然无法正常工作.也就是说,我使用了一个变量来使用deadline()来存储读取行的长度,但是,一旦我达到51并且输入缓冲区被刷新,我总是得到0的读数,这意味着它不会读取任何内容.我已经阅读了pySerial的文档,但没有找到任何相关信息.flushInput()也会终止串行连接吗?非常感谢.

编辑:我正在运行Mac OS 10.7.5和Python 2.7.3

try:
    self.s = serial.Serial("/dev/tty.usbmodemfa131", 57600, timeout = 0)
    self.FlightLoopCB = self.FlightLoopCallback
    XPLMRegisterFlightLoopCallback(self, self.FlightLoopCB, self.interval, 0)
except serial.SerialException:
    self.s = None
    .
    .
    .

    self.length=0
    self.myline=self.s.readline()
    self.length=len(self.myline)
    print "Test: %i %i" % (self.length, self.j)
    if(self.length>=7):
        if(self.myline[0:2]=="R,"):
            if(self.j%51==0):
                self.s.flushInput()

            self.length=len(self.myline)
            self.myline=self.myline[2:6]
            self.myLineBytes=[0,0]

            self.myLineBytes[0]=unpack('>H', self.myline[0:2])
            self.myLineBytes[1]=unpack('>H', self.myline[2:4])
Run Code Online (Sandbox Code Playgroud)

python serial-port arduino pyserial

1
推荐指数
1
解决办法
1万
查看次数

需要使用Python进行每日日志轮换(0utc)

我是Python的入选者.我写了一个小记录器,从串口获取数据并将其写入日志文件.我有一个小程序打开文件追加,写,然后关闭.我怀疑这可能不是最好的方法,但这是我到目前为止所想到的.

我希望能够在00 UTC自动执行日志轮换,但到目前为止,我尝试使用RotatingFileHandler执行此操作失败了.

这是代码的样子:

import time, serial, logging, logging.handlers,os,sys
from datetime import *

CT12 = serial.Serial()
CT12.port = "/dev/ct12k"
CT12.baudrate = 2400
CT12.parity = 'E'
CT12.bytesize = 7
CT12.stopbits = 1
CT12.timeout = 3

logStart = datetime.now()
dtg = datetime.strftime(logStart, '%Y-%m-%d %H:%M:%S ')
ctlA = unichr(1)
bom = unichr(2)
eom = unichr(3)
bel = unichr(7)
CT12Name = [ctlA, 'CT12-NWC-test']
CT12Header = ['-Ceilometer Logfile \r\n', '-File created: ', dtg, '\r\n']

def write_ceilo ( text ) :
    f = open ('/data/CT12.log', 'a') …
Run Code Online (Sandbox Code Playgroud)

python logging pyserial

1
推荐指数
1
解决办法
4389
查看次数

linux-pyserial:无法打开端口/ dev/ttyAMA0没有这样的文件或目录

无法打开端口/ dev/ttyAMA0:[Errno 2]没有这样的文件或目录:'/ dev/ttyAMA0'

我正在使用cp2102 usb来安装在linux内核3.xx上的uart bridge

>>> import serial
>>> port = serial.Serial("/dev/ttyAMA0", baudrate=115200, timeout=3.0)
Run Code Online (Sandbox Code Playgroud)

它给出以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/serial/serialutil.py", line 260, in __init__
    self.open()
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 276, in open
    raise SerialException("could not open port %s: %s" % (self._port, msg))
serial.serialutil.SerialException: could not open port /dev/ttyAMA0: [Errno 2] No such file or directory: '/dev/ttyAMA0'
Run Code Online (Sandbox Code Playgroud)

python linux pyserial

1
推荐指数
1
解决办法
1万
查看次数

从不同的函数在python中通过串行发送数据

我正常编写C++和C#编程,并试图习惯python如何工作,所以请原谅我,如果这是一个相当基本的问题.

我想通过RS-232在python中打开一个串行连接,并从各种函数发送数据.这是我打开串口并发送数据的功能:

def sendData(data):
    ser = serial.Serial('/dev/ttyUSB0', 115200)
    data += "\r\n"
    ser.write(data.encode())
Run Code Online (Sandbox Code Playgroud)

非常简单,但我想ser = serial.Serial('/dev/ttyUSB0', 115200)在函数外部移动这条线,这样我就可以自己调用这个函数了.

现在在其他语言中我只是将ser变量公开,以便其他函数可以访问它,但我不确定我是否正确理解变量在python中的工作原理.理想情况下,我喜欢这样的事情:

def main():
    ser = serial.Serial('/dev/ttyUSB0', 115200)
    while 1:
        #misc code here
        sendData(data)
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过函数调用传递ser变量并使其成为sendData(ser,data),但这似乎是不必要的.最好的方法是什么?

谢谢!

python pyserial

1
推荐指数
1
解决办法
9978
查看次数

Python将字节分成高和低半字节

我试图使用pyserial发送和接收rs232数据,但我不明白如何正确发送正确的数据.我有什么小信息解释数据字符串并说它应该分成高和低半字节.转换为半字节是我没有得到的部分,我试图阅读它但是没有得到如何使用它为我的情况.

所以我有这个数据字符串通过串口发送.10,00,00,00,00,00,16,0A,20,20,20,20,00,00,00,00,00,00,00,00,50

它表示将字节分成高半字节和低字节,然后将21个字节转换为42个字符的数据字符串.

有人可以帮我解释一下如何为我做这个吗?

python pyserial nibble

1
推荐指数
1
解决办法
4080
查看次数

Python attributeError:模块“ serial”没有属性“ Serial”

我在Windows 7中使用Python3,并安装了pyserial 3.3。我使用以下行代码创建一个名为serial.py的文件:

import serial

ser = serial.Serial('COM4', 9600, timeout=0)
ser.write(b'mymessage')
Run Code Online (Sandbox Code Playgroud)

它将显示此错误消息:

attributeError: module 'serial' has no attribute 'Serial'
Run Code Online (Sandbox Code Playgroud)

对于其文档中的所有其他示例都是相同的,我无法使用其中的任何一个。

python serial-port pyserial

1
推荐指数
1
解决办法
5519
查看次数