我正在尝试使用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远程控制的机器人,通过简单的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 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) 有没有办法连接到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)
不确定这是否有帮助...
我正在从串口读取由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) 我正在使用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.
一旦这个工作,我必须运行这个多线程,其中每个线程运行不同的设备,期望在行中输出.有任何建议,以防万一这是有效的.
我正在尝试通过 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) 每当我执行下面的代码时,它都会给我以下错误:
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 等,但它不断给我这个错误。
我正在使用 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) 我编写了一个在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 ×10
python ×6
python-3.x ×4
serial-port ×4
arduino ×2
macos ×2
package ×1
pexpect ×1
pip ×1
pytest ×1
pythoncard ×1
raspberry-pi ×1
rfc2217 ×1
twisted ×1
windows ×1