我正在尝试使用 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) 初始化串行后如何更改 Pyserial 中的超时?就像:
ser=serial.Serial("COM4", baudrate=19200,parity=serial.PARITY_NONE,stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS,timeout=0.5)
在那之后,我想改变超时。有什么例子吗?谢谢 BR
使用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) 我使用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.任何帮助表示赞赏.
我编写了一个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的入选者.我写了一个小记录器,从串口获取数据并将其写入日志文件.我有一个小程序打开文件追加,写,然后关闭.我怀疑这可能不是最好的方法,但这是我到目前为止所想到的.
我希望能够在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) 无法打开端口/ 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) 我正常编写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),但这似乎是不必要的.最好的方法是什么?
谢谢!
我试图使用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个字符的数据字符串.
有人可以帮我解释一下如何为我做这个吗?
我在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)
对于其文档中的所有其他示例都是相同的,我无法使用其中的任何一个。