标签: 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
查看次数

在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
查看次数

在Twisted Python中使用RFC2217网络串口?

有没有办法连接到Twisted Python的RFC2217网络串口?

Pyserial似乎通过该serial.serial_for_url("rfc2217://...") 功能支持它.并且它们表明twisted使用pyserial来管理串行连接,但是twisted.internet.serialport.SerialPort似乎期望端口名称或数字表明它只是将它传递给serial.Serial构造函数.

我可以使用socat在外部创建一个PTY并将dev名称传递给twisted,这很好,但是我想知道我是否可以通过直接使用pyserial支持来绕过这一步.

socat PTY,link=/dev/myport TCP:192.168.1.222:9001
Run Code Online (Sandbox Code Playgroud)

编辑:pyserial faq建议对实例化串行对象进行此修改:

try:
    s = serial.serial_for_url(...)
except AttributeError:
    s = serial.Serial(...)
Run Code Online (Sandbox Code Playgroud)

不确定这是否有帮助...

python twisted pyserial rfc2217

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

重置打开的串行端口

我正在从串口读取由arduino发送的数据。

我有两个文件,我分别使用它们来编写一些代码并尝试不同的事情。在其中之一中,我读取数据并使用 matplotlib 图形绘制它。当我使用完它后,它仍然与我的计算机保持连接并发送数据。所以,我需要做的是“重置”端口。也就是说,关闭打开的端口并再次打开它,并阻止它发送数据,这样我就可以使用arduino尝试对此文件的代码进行一些修改。

因此,为了完成此任务,我的意思是,要重置端口,我创建了另一个文件并编写了以下代码:

import serial

print "Opening port"

try:
  serial_port = serial.Serial("com4", 9600)
  print "Port is open"

except serial.SerialException:
  serial.Serial("com4", 9600).close()
  print "Port is closed"
  serial_port = serial.Serial("com4",9600)
  print "Port is open again"

print "Ready to use"
Run Code Online (Sandbox Code Playgroud)

但这段代码似乎不起作用。端口仍然连接并发送数据。所以,这意味着我无法使用我的代码关闭端口,然后再次重新打开它。

我究竟做错了什么?如何阻止arduino发送数据?或者我怎样才能重置Arduino?

希望你能帮我。

- - - 编辑 - - -

我成功地找出了我遇到的真正问题,但这不是我想象的那样。问题不在于端口是开放的,尽管我使用了closePyserial 的功能。真正的事情是,端口正在按照我的意愿关闭,但设备(arduino)仍在发送数据。因此,我更改了代码来重现这种情况。

这是代码:

print "Abriendo puerto"

ser = serial

try:
  ser = serial.Serial("com4", 9600, timeout = 1)
  serial_port = "Open"
  print "The port %s is available" %ser

except serial.serialutil.SerialException: …
Run Code Online (Sandbox Code Playgroud)

python serial-port pyserial

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

读取Pyserial的串行输出并不可靠

我正在使用MacOS上的代码连接来连接设备,并且100次此代码仅连接1或2次,并且没有响应(因为没有超时)其余时间.

ser = serial.Serial(port="/dev/xyz",timeout = None, baudrate=115200, parity = serial.PARITY_NONE, bytesize = serial.EIGHTBITS, stopbits = serial.STOPBITS_ONE)

def exitSer(ser):
    print("Closing")
    ser.close()

atexit.register(exitSer, ser)

if ser.is_open:
    time.sleep(2)
    while(1):
        print(ser.readline().decode("utf-8"))
Run Code Online (Sandbox Code Playgroud)

你能否告诉我如何使用像fcntl等程序来查找这个端口是否完全免费并且可以使用,以及如何在强制端口释放后将tty port的标志设置为free.

一旦这个工作,我必须运行这个多线程,其中每个线程运行不同的设备,期望在行中输出.有任何建议,以防万一这是有效的.

macos serial-port pexpect pyserial python-3.x

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

Python3 双向串行通信:读入数据

我正在尝试通过 Python3 建立双向通信。有一个激光测距仪插入我的一个 USB 端口,我想向它发送/接收命令。我有一张可以发送的命令以及它们会返回什么,所以这部分已经存在了。

我需要的是一种实时进行的便捷方式。到目前为止,我有以下代码:

import serial, time

SERIALPORT = "/dev/ttyUSB0"
BAUDRATE = 115200

ser = serial.Serial(SERIALPORT, BAUDRATE)
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
ser.parity = serial.PARITY_NONE #set parity check: no parity
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
ser.timeout = None          #block read
ser.xonxoff = False     #disable software flow control
ser.rtscts = False     #disable hardware (RTS/CTS) flow control
ser.dsrdtr = False       #disable hardware (DSR/DTR) flow control
ser.writeTimeout = 0     #timeout for write

print ("Starting Up Serial …
Run Code Online (Sandbox Code Playgroud)

serial-port pyserial python-3.x

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

导入错误:无法从“串行”(未知位置)导入名称“串行”

每当我执行下面的代码时,它都会给我以下错误:

ImportError: cannot import name 'Serial' from 'serial' (unknown location)
Run Code Online (Sandbox Code Playgroud)

代码:

  from serial import Serial

  arduinodata = Serial('com4',9600)

  print("Enter n to ON LED and f to OFF LED")

  while 1:
    input_data = raw_input()
    print ("You Entered"+input_data)
    
    if (input_data == 'n'): 
        arduinodata.write(b'1')
        print("LED ON")

    if (input_data == 'f'):
        arduinodata.write(b'0')
        print("LED OFF")
Run Code Online (Sandbox Code Playgroud)

我已经安装了所有必需的 python 模块。像 pyserial、pyfirmata 等,但它不断给我这个错误。

python pip arduino package pyserial

6
推荐指数
2
解决办法
8000
查看次数

Pytest:Windows 致命异常:访问冲突

我正在使用 pytest 为我的项目运行一些测试。有时(大约 30% 到 50%)我在测试完成后会收到错误。但这会阻止测试引擎创建测试报告,这确实很痛苦。

错误:

Windows fatal exception: access violation

Current thread 0x000019e0 (most recent call first):
  File "C:\Python38\lib\threading.py", line 1200 in invoke_excepthook
  File "C:\Python38\lib\threading.py", line 934 in _bootstrap_inner
  File "C:\Python38\lib\threading.py", line 890 in _bootstrap

Thread 0x00001b0c (most recent call first):
  File "C:\Python38\lib\site-packages\serial\serialwin32.py", line 240 in _close
  File "C:\Python38\lib\site-packages\serial\serialwin32.py", line 246 in close
  File "C:\NoBackup\svn\test_system_smets2\pyets\plugins\plugin_zigbee_dongle.py", line 141 in disconnect
  File "C:\NoBackup\svn\test_system_smets2\pyets\plugins\plugin_zigbee_dongle.py", line 232 in stop
  File "C:\NoBackup\svn\test_system_smets2\pyets\testengine\plugin_manager.py", line 286 in stop
  File "C:\NoBackup\svn\test_system_smets2\pyets\testengine\testengine.py", line 112 in session_finalize
  File …
Run Code Online (Sandbox Code Playgroud)

python windows pyserial pytest

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

如何从Raspberry Pi Zero发送实时传感器数据到PC?

我编写了一个在Raspberry Pi Zero W上运行的 Python3 脚本,该脚本从 IMU 传感器 (MPU9250) 收集数据并创建 3 个不同的角度值;滚动、俯仰、偏航。看起来像这样:

def main():
    while True:
        dataAcc = mpu.readAccelerometerMaster()
        dataGyro = mpu.readGyroscopeMaster()
        dataMag = mpu.readMagnetometerMaster()

        [ax, ay, az] = [round(dataAcc[0], 5), round(dataAcc[1], 5), round(dataAcc[2], 5)]
        [gx, gy, gz] = [round(dataGyro[0], 5), round(dataGyro[1], 5), round(dataGyro[2], 5)]
        [mx, my, mz] = [round(dataMag[0], 5), round(dataMag[1], 5), round(dataMag[2], 5)]

        update(gx, gy, gz, ax, ay, az, mx, my, mz)
        roll = getRoll()
        pitch = getPitch()
        yaw = getYaw()

        print(f"Roll: {round(roll, 2)}\tPitch: {round(pitch, 2)}\tYaw: …
Run Code Online (Sandbox Code Playgroud)

pyserial python-3.x raspberry-pi raspberry-pi-zero

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