标签: pyserial

如何修复"[错误6]句柄无效." 与PySerial

我正在尝试使用PySerial从我的Windows 7 PC连接到我的手机,代码如下:

import wmi
import serial

c = wmi.WMI()
modem = c.query("SELECT * FROM Win32_POTSModem").pop()
ser = serial.Serial(modem.AttachedTo, modem.MaxBaudRateToSerialPort)

try:
    ser.write('at \r\n')
    print ser.readline()
finally:
    ser.close()
Run Code Online (Sandbox Code Playgroud)

但是在写调用上得到以下错误:

Traceback (most recent call last):
  File "D:\Alasdair\Documents\Python Scripts\Phone Interface\test.py", line 14, in <module>
    ser.write('at \r\n')
  File "C:\Python26\Lib\site-packages\serial\serialwin32.py", line 255, in write
    raise SerialException("WriteFile failed (%s)" % ctypes.WinError())
SerialException: WriteFile failed ([Error 6] The handle is invalid.)
Run Code Online (Sandbox Code Playgroud)

我已经尝试连接TeraTerm并且工作正常,因此与手机本身的连接不是问题.

我一直在寻找寻找解决方案的年代,但没有提出任何有效的方法.有任何想法吗?

python serial-port pyserial

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

如何将值从Arduino发送到Python然后使用该值

我正在构建一个使用Python远程控制的机器人,通过简单的GUI通过Internet发送控制消息.

我的代码部分工作得很好,GUI和控制系统,但我被卡住了.我正在尝试使用视差ping传感器来获取Arduino Mega中对象信息的距离,并将该值发送到我的Python控制脚本以显示在远程GUI上.

我遇到的主要问题是如何集成将使用已建立的COM端口与Arduino的Python代码,并发送消息告诉Arduino轮询ping传感器,然后发送到将接收值的Python程序,然后让我将该值插入我的GUI.

我已经有了这个代码来控制Arduino,它可以用我简单的GUI工作.

import serial
ser = serial.Serial('/dev/ttyUSB0', 9600)

from PythonCard import model

class MainWindow(model.Background):
    def on_SpdBtn_mouseClick(self, event):
       spd = self.components.SpdSpin.value
    def on_FBtn_mouseClick(self, event):
       spd = self.components.SpdSpin.value
       ser.write('@')
       ser.write('F')
       ser.write(chr(spd))
    def on_BBtn_mouseClick(self, event):
       spd = self.components.SpdSpin.value
       ser.write('@')
       ser.write('B')
       ser.write(chr(spd))
    def on_LBtn_mouseClick(self, event):
       spd = self.components.SpdSpin.value
       ser.write('@')
       ser.write('L')
       ser.write(chr(spd))
    def on_RBtn_mouseClick(self, event):
       spd = self.components.SpdSpin.value
       ser.write('@')
       ser.write('R')
       ser.write(chr(spd))
    def on_SBtn_mouseClick(self, event):
       spd = self.components.SpdSpin.value
       ser.write('@')
       ser.write('S')
       ser.write('0')
    def on_PngDisBtn_mouseClick(self, event):
       ser.write('~')
       ser.write('P1')
       ser.write('p2')

app = model.Application(MainWindow)
app.MainLoop() …
Run Code Online (Sandbox Code Playgroud)

python arduino pythoncard pyserial

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

使用pyserial发送二进制数据

我知道有很多讨论,但我还有一个问题.我正在尝试使用pyserial通过pyserial将十六进制值发送到我的设备

command="\x89\x45\x56"
ser.write(command)
Run Code Online (Sandbox Code Playgroud)

但是我一直收到错误说 string argument without encoding.有人知道如何解决这个问题吗?

python pyserial

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

在Mac OS X和Python 3中列出串行端口

我在列出可用的串口时遇到问题,我真的需要帮助调试这个.在Python 2.7.5中,正确列出了COM端口,而PySerial在Python 3.3.5中返回一个空列表.

我发现另一个孤独的灵魂在互联网上遇到同样的问题(没有答案),但这个问题似乎并不受欢迎 - 也许这是我的系统?

我正在使用Mac OS X 10.9.2并通过自制软件安装了python和python3.我刚才更新了一切.PySerial在pip和pip3都是2.7版本.

输出:

Python 2.7.5 (default, Nov  4 2013, 18:04:45) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from serial.tools import list_ports
>>> list_ports.comports()
[['/dev/cu.Bluetooth-Incoming-Port', 'n/a', 'n/a'], ['/dev/cu.Bluetooth-Modem', 'n/a', 'n/a']]

Python 3.3.5 (default, Mar 10 2014, 13:25:50) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.2.79)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from serial.tools import list_ports
>>> …
Run Code Online (Sandbox Code Playgroud)

macos pyserial python-3.x

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

Pyserial:如何在打开串行端口之前知道它是否可用

我用python withPyserial来使用串口,​​代码是这样的:

import serial
portName = 'COM5'

ser = serial.Serial(port=portName)

# Use the serial port...
Run Code Online (Sandbox Code Playgroud)

但是,问题是,如果端口已经打开(由另一个应用程序为例),我得到一个错误,当我尝试打开它,如:"SerialException: could not open port 'COM5': WindowsError(5, 'Access is denied.')"

我想知道我是否可以在尝试打开端口之前打开它以避免此错误。我想使用一种条件并仅在可以时打开它:

import serial
portName = 'COM5'

if portIsUsable(portName):
    ser = serial.Serial(port=portName)

# Use the serial port...
Run Code Online (Sandbox Code Playgroud)

编辑:

我找到了一种方法:

import serial
from serial import SerialException

portName = 'COM5'

try:
    ser = serial.Serial(port=portName)
except SerialException:
    print 'port already open'

# Use the serial port...
Run Code Online (Sandbox Code Playgroud)

python pyserial

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

使用PySerial发送ASCII命令

我正在尝试发送以下ASCII命令:close1

使用PySerial,下面是我的尝试:

import serial

#Using  pyserial Library to establish connection
#Global Variables
ser = 0

#Initialize Serial Port
def serial_connection():
    COMPORT = 3
    global ser
    ser = serial.Serial()
    ser.baudrate = 38400 
    ser.port = COMPORT - 1 #counter for port name starts at 0




    #check to see if port is open or closed
    if (ser.isOpen() == False):
        print ('The Port %d is Open '%COMPORT + ser.portstr)
          #timeout in seconds
        ser.timeout = 10
        ser.open()

    else:
        print ('The Port %d is closed' %COMPORT) …
Run Code Online (Sandbox Code Playgroud)

python hardware serial-port pyserial python-3.x

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

在 pySerial (Windows) 中查找特定的串行 COM 端口

我构建了一个脚本(Windows 7,Python 2.7)来列出串行端口,但我正在寻找具有特定名称的设备。我的脚本:

import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
    print(p)
Run Code Online (Sandbox Code Playgroud)

这将返回:

COM3 - Intel(R) Active Management Technology - SOL (COM3)
COM6 - MyCDCDevice (COM6)
COM1 - Communications Port (COM1)
>>> 
Run Code Online (Sandbox Code Playgroud)

伟大的!但是,我希望这个脚本能够自动从一堆中挑选出 MyCDCDevice 并连接到它。我试过:

import serial.tools.list_ports

ports = list(serial.tools.list_ports.comports())
for p in ports:
    if 'MyCDCDevice' in p:
        print(p)
        // do connection stuff to COM6
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我怀疑是因为 p 不完全是一个字符串,而是某种对象?

无论如何,解决这个问题的正确方法是什么?

谢谢!!

python windows pyserial python-2.7

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

从 PyQt GUI 连接到串口

我编写了一个程序来从串行发送和接收数据,但是我有一个问题,我想创建一个函数“connect()”或一个类,当我按下一个按钮时,该函数被执行,但是如果我创建“MainWindow”类中的这个函数,“TestThread”类中的变量“ser”未初始化,你能帮帮我吗?

import sys
import serial


from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.uic import loadUi


ser = serial.Serial('/dev/tty.usbmodem14201', 9600, timeout=1)

class TestThread(QThread):
    serialUpdate = pyqtSignal(str)
    def run(self):
        while ser.is_open:
            QThread.sleep(1)
            value = ser.readline().decode('ascii')
            self.serialUpdate.emit(value)
            ser.flush()

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        loadUi('/Users/bogdanvesa/P2A_GUI/mainwindow.ui', self)
        self.thread = TestThread(self)
        self.thread.serialUpdate.connect(self.handleSerialUpdate)

        self.connect_btn.clicked.connect(self.connectSer)
        self.lcd_EBtn.clicked.connect(self.startThread)

    def startThread(self):
        self.thread.start()

    def handleSerialUpdate(self, value):
        print(value)
        self.lcd_lineEdit.setText(value)


def main():

    app = QApplication(sys.argv)
    form = MainWindow()
    form.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

python pyserial python-3.x pyqt5

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

pyserial与多处理给我一个ctype错误

嗨,我正在尝试编写一个模块,该模块可以让我通过读取和发送数据pyserial。我必须能够并行读取主脚本中的数据。随着计算器用户的帮助下,我有一个基本的和工作框架方案,但是当我尝试添加一个类我创建了一个使用pyserial(句柄找到端口,速度等),发现在这里我得到以下错误:

File "<ipython-input-1-830fa23bc600>", line 1, in <module>
    runfile('C:.../pythonInterface1/Main.py', wdir='C:/Users/Daniel.000/Desktop/Daniel/Python/pythonInterface1')

  File "C:...\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:...\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Daniel.000/Desktop/Daniel/Python/pythonInterface1/Main.py", line 39, in <module>
    p.start()

  File "C:...\Anaconda3\lib\multiprocessing\process.py", line 112, in start
    self._popen = self._Popen(self)

  File "C:...\Anaconda3\lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)

  File "C:...\Anaconda3\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)

  File "C:...\Anaconda3\lib\multiprocessing\popen_spawn_win32.py", line 89, in __init__
    reduction.dump(process_obj, to_child)

  File "C:...\Anaconda3\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, …
Run Code Online (Sandbox Code Playgroud)

python pickle multiprocessing pyserial python-3.x

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

pySerial:刷新与重置输入缓冲区+重置输出缓冲区

我正在尝试使用pySerial==3.4,并发现相当缺乏的文档serial.Serial.flush()

文件类对象的刷新。在这种情况下,请等待所有数据写入。

来源


问题

  • 什么是“类文件对象”?
  • 正在冲洗什么?
  • 何时使用flush而不是单独重置输入/输出缓冲区?
serial = Serial("COM3")

# Option 1
serial.flush()

# Option 2
serial.reset_input_buffer()
serial.reset_output_buffer()
Run Code Online (Sandbox Code Playgroud)

相关问题

python serial-port flush pyserial

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