标签: pyserial

PySerial:如何在串行线上发送Ctrl-C命令

我正在自动化嵌入式电路板的配置过程.要进入设置屏幕,我需要发送"Ctrl-C"命令.

不是要中断我在本地运行的进程,KeyboardInterrupt无法正常工作.我需要发送一个值,该值将由引导加载程序解释为Ctrl-C.

我需要发送什么价值?

谢谢

python serial-port copy-paste pyserial

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

Python/PySerial和CPU使用情况

我已经创建了一个脚本来监控串口的输出,每半小时接收3-4行数据 - 脚本运行良好,并抓住端口发出的所有内容,这些内容在一天结束时才是最重要的. .

然而,让我感到困惑的是,对于仅监控单个串行端口的程序,CPU使用率似乎相当高,在此脚本运行时,1核心将始终处于100%使用率.

我基本上在这个问题中运行代码的修改版本:pyserial - 如何读取从串行设备发送的最后一行

我已经尝试定期轮询inWaiting()函数并在inWaiting()为0时让它休眠 - 我已经尝试了从1秒到0.001秒的间隔(基本上,我可以尽可能多地使用而不会提高CPU使用率) - 这将成功抓住第一行,但似乎错过了其余的数据.

调整串口的超时似乎对cpu的使用没有任何影响,也没有将监听功能放入它自己的线程中(不是我真的期望差异,但值得尝试).

  • python/pyserial应该使用这么多的CPU吗?(这看起来有点矫枉过正)
  • 我是否在这个任务上浪费时间/我是否应该咬紧牙关并安排脚本在我知道没有数据到来的时间段内睡觉?

python cpu-usage pyserial

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

pySerial在Python解释器中运行良好,但不是独立的

早上好!最近我买了一块Arduino板,在我的房间里做了一些"灯光控制".这是我写的固件的代码:

int control = 0;
int pin = 0;

void setup()
{
  Serial.begin(9600);
  for(pin = 0; pin <= 13; pin++) pinMode(pin, OUTPUT);
}

void loop()
{
  control = Serial.read();
  if (control > 0 && control <= 13) digitalWrite(control, HIGH);
  if (control < 256 && control >= (256-13)) digitalWrite((256-control), LOW);
}
Run Code Online (Sandbox Code Playgroud)

之后,我使用Python解释器的pySerial来控制引脚,一切都运行正常.这是一个解释器输出:

Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> ser = serial.Serial('/dev/ttyUSB0', 9600)
>>> …
Run Code Online (Sandbox Code Playgroud)

python linux serial-port arduino pyserial

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

使用Python和pyserial访问USB串行端口

如何使用pyserial访问USB端口?我见过一个例子:

import serial

ser = serial.Serial('/dev/ttyUSB0')
Run Code Online (Sandbox Code Playgroud)

我曾经在Windows上从MATLAB访问串口并使用适当的语法,/dev/ttyUSB0将被替换为COM1任何其他COM端口.

我在Mac上,我尝试使用文档上的串口扫描程序pyserial无济于事.我想我应该这样写:

import serial

name = ? # Names of serial ports on Mac OS X
ser = serial.Serial(name)
Run Code Online (Sandbox Code Playgroud)

我如何知道nameMac上应该有什么?

编辑:在回答下面的答案时,我想了解如何访问USB转RS232转换器以及纯USB端口.

python macos usb serial-port pyserial

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

如何使用pySerial从serialException中恢复

我有一个应用程序,可以读取数据并将数据传输到通过USB连接的设备.我正在使用pySerial来促进这种沟通.一切正常,直到USB电缆从PC上拔下并引发异常.一旦电缆重新插入,我似乎无法恢复并重新连接到我的设备.我恢复的唯一方法是关闭应用程序并拔下插头并重新插入电缆.任何帮助理解正在发生的事情将非常感激.

这是我用来帮助我理解这个过程的基本测试代码.

# Class used to communicate with USB Dongle

import serial
import time
import sys

class LPort:
  def __init__(self, port=0):
    "initialize the LPort class"
    self.error = ""
    self.traffic = ""
    self.dest = None
    if port == None:
        self.simulation = True
    else:
        self.simulation = False
        self.port = port # serial port we should use
    self.reset()
    self.time = time.time()

def reInit(self):
    self.close()

def reset(self):
    "flush port, reset the LPort, initialize LPort"
    if self.simulation:
        r = "LPort simulator"
    else:
        self.port.flushInput()
        self.port.flushOutput()           
        self.fail …
Run Code Online (Sandbox Code Playgroud)

python pyserial

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

pySerial 2.6:在readline()中指定行尾

我正在使用pySerial向Eddie发送命令.我需要在readline中指定一个回车符,但是pySerial 2.6摆脱了它...是否有解决方法?

以下是此PDF的第二页和第三页上列出的Eddie命令集.这是在无法访问PDF的情况下的备份映像.

一般指令表:

Input:              <cmd>[<WS><param1>...<WS><paramN>]<CR>
Response (Success): [<param1>...<WS><paramN>]<CR>
Response (Failure): ERROR[<SP>-<SP><verbose_reason>]<CR> 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,所有回复都以a结尾\r.我需要告诉pySerial停止.

我现在拥有的:

def sendAndReceive(self, content):
  logger.info('Sending {0}'.format(content))
  self.ser.write(content + '\r')
  self.ser.flush();
  response = self.ser.readline() # Currently stops reading on timeout...
  if self.isErr(response):
    logger.error(response)
    return None
  else:
    return response
Run Code Online (Sandbox Code Playgroud)

python serial-port pyserial

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

Python没有从arduino串行输出中读取正确的值

我正在尝试使用python从arduino中读取电位计值.但我的串行读取值很奇怪.

Python代码:

import serial

ser = serial.Serial('COM12')

print ( "connected to: " + ser.portstr )
count = 1                    

while True:
    for line in ser.read():
        print( str(count) + str( ': ' ) + str( line ) )
        count = count + 1


ser.close()
Run Code Online (Sandbox Code Playgroud)

Arduino代码:

int potpin = 0;  // analog pin used to connect the potentiometer
int val = 0;       // variable to store the value coming from the sensor
int oldVal = 0;   // used for updating the serial print …
Run Code Online (Sandbox Code Playgroud)

python arduino pyserial

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

如何在Cygwin中使用COM和USB端口?

我想用Python脚本从我的Arduino板发送/接收数据.我想使用Python及其pySerial模块来完成它,这似乎符合我的需要.所以我在cygwin中安装了Python和pySerial(Windows XP背后).

Python脚本非常简单:

$ cat example.py

#print "testing my COM26 port using python"

import serial
ser = serial.Serial()
ser.baudrate = 9600
ser.port = 26
ser
ser.open()
ser.isOpen()
Run Code Online (Sandbox Code Playgroud)

但是在运行时我收到以下错误.

$ python example.py
Traceback (most recent call last):
  File "example.py", line 9, in <module>
    ser.open()
  File "/usr/lib/python2.5/site-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 26: [Errno 2] No such file or directory: '/dev/com27'
Run Code Online (Sandbox Code Playgroud)

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

我怎么知道我的Arduino连接到COM27端口?

嗯,这很简单.Arduino IDE这样说,我可以使用该端口从IDE的串行端口监视器工具发送和接收数据.此外,我设法让超级终端也使用该端口.

但是,似乎Cygwin不知道这样的USB和COM端口: …

usb cygwin serial-port arduino pyserial

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

一段时间后,从Arduino到Raspberry Pi的串行接收与PySerial停止

我正在开发一个项目,我必须一次收到大约25个字符的数据,以便在Raspberry Pi中处理它.下面是生成我想从Arduino接收的一些数据的示例代码:

char i =0;
char  a =0;
char b=0;


void setup(){

 Serial.begin(9600);
 for(i=0;i<25;i++){

    Serial.print('l');}
    Serial.print('\n');
    delay(2000);
}


void loop(){

 for(i=0;i<25;i++){
     for(a=0;a<i;a++){
      if((a==9)||(a==19)||(a==24))
          Serial.print('l');
      else
          Serial.print('d');   
     }
     for(b=0;b<25-i;b++){
          Serial.print('l');
     }


     delay(2000);
  }
}
Run Code Online (Sandbox Code Playgroud)

它发送一行像这样的'llllddddllldddd ...'这行是25个字符的长度.现在,我希望通过Raspberry Pi获得此功能.这是我正在尝试的代码:

ser = serial.Serial('/dev/AMA0',9600,timeout=1)
ser.open()

try:
   serial_data = ser.readline()
   print serial_data
except serial.serialutil.SerialException:
   pass
Run Code Online (Sandbox Code Playgroud)

此代码非常正确地接收数据5秒钟,然后突然停止接收.

此外,当我尝试以下操作时,我没有输出或输入/输出错误.

serial_data = ser.readline()
print serial_data
Run Code Online (Sandbox Code Playgroud)

编辑1: 好的,我现在评论了这个例外.它给出以下错误:

 raise SerialException('device reporst rediness to read but returned no data (device disconnected?)')
serial.serialutil.SerialException: device reports readiness to read but returned no data …
Run Code Online (Sandbox Code Playgroud)

python serial-port arduino pyserial raspberry-pi

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

在python3 asyncio中使用串口

我正在尝试,到目前为止,未能使用python asyncio访问串行端口.

我非常感谢在简单的fd上使用新的python异步框架的任何提示.

干杯!

詹姆士

python serial-port pyserial python-3.4 python-asyncio

10
推荐指数
4
解决办法
9421
查看次数