我正在自动化嵌入式电路板的配置过程.要进入设置屏幕,我需要发送"Ctrl-C"命令.
这不是要中断我在本地运行的进程,KeyboardInterrupt将无法正常工作.我需要发送一个值,该值将由引导加载程序解释为Ctrl-C.
我需要发送什么价值?
谢谢
我已经创建了一个脚本来监控串口的输出,每半小时接收3-4行数据 - 脚本运行良好,并抓住端口发出的所有内容,这些内容在一天结束时才是最重要的. .
然而,让我感到困惑的是,对于仅监控单个串行端口的程序,CPU使用率似乎相当高,在此脚本运行时,1核心将始终处于100%使用率.
我基本上在这个问题中运行代码的修改版本:pyserial - 如何读取从串行设备发送的最后一行
我已经尝试定期轮询inWaiting()函数并在inWaiting()为0时让它休眠 - 我已经尝试了从1秒到0.001秒的间隔(基本上,我可以尽可能多地使用而不会提高CPU使用率) - 这将成功抓住第一行,但似乎错过了其余的数据.
调整串口的超时似乎对cpu的使用没有任何影响,也没有将监听功能放入它自己的线程中(不是我真的期望差异,但值得尝试).
早上好!最近我买了一块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) 如何使用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端口.
我有一个应用程序,可以读取数据并将数据传输到通过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) 我正在使用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从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板发送/接收数据.我想使用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端口: …
我正在开发一个项目,我必须一次收到大约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 asyncio访问串行端口.
我非常感谢在简单的fd上使用新的python异步框架的任何提示.
干杯!
詹姆士
pyserial ×10
python ×9
serial-port ×7
arduino ×4
usb ×2
copy-paste ×1
cpu-usage ×1
cygwin ×1
linux ×1
macos ×1
python-3.4 ×1
raspberry-pi ×1