标签: pyserial

使用pySerial包的完整示例

有人可以给我看一个完整的python示例代码,使用pyserial,我有包,我想知道如何发送AT命令并阅读它们!

python modem pyserial

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

使用Python列出可用的com端口

我正在寻找一种简单的方法来列出PC上所有可用的COM端口.

我找到了这个方法,但它是特定于Windows的:在Windows上列出串行(COM)端口?

我在Windows 7 PC上使用Python 3和pySerial.

我在pySerial API(http://pyserial.sourceforge.net/pyserial_api.html)中找到了一个serial.tools.list_ports.comports()列出com端口的函数(正是我想要的).

import serial.tools.list_ports
print(list(serial.tools.list_ports.comports()))
Run Code Online (Sandbox Code Playgroud)

但似乎它不起作用.当我的USB到COM网关连接到PC(我在设备管理器中看到COM5)时,此COM端口不包含在返回的列表中list_ports.comports().相反,我只得到似乎连接到调制解调器的COM4(我没有在设备管理器的COM和LPT部分看到它)!

你知道为什么它不起作用吗?您是否有另一种不是系统特定的解决方案?

python pyserial

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

有没有办法将Python代码"编译"到Arduino(Uno)上?

我有一个带有Arduino Uno的机器人类型项目,总而言之,我正在尝试一些AI算法.但是,我需要实现一些使用NumPy/SciPy非常简单的高级矩阵算法,但它们在C或C++中是一个彻头彻尾的噩梦.即使有图书馆,这也是荒谬的.

有什么方法可以用Python做这个项目吗?我想我听说Mega有这个功能的东西,但是我有一个Uno,并且在这一点上替换它不是一个选项(这会使项目恢复很多.)另外,我听说过使用Python进行通信的一些事情通过USB连接到Arduino,但是在运行时我无法连接USB电缆.我需要能够上传程序并完成它.

那里有没有选择,或者我刚刚走到尽头?

python arduino pyserial

54
推荐指数
2
解决办法
5万
查看次数

Python中的虚拟串行设备?

我知道我可以使用例如pySerial与串口设备通信,但如果我现在没有设备但仍需要为它编写客户端怎么办?如何在Python中编写"虚拟串行设备"并与pySerial通信,就像我会说,运行本地Web服务器?也许我只是不好好搜索,但我一直无法找到有关此主题的任何信息.

python serial-port virtual-serial-port pyserial

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

在Python中实时读取串行数据

我使用Python中的脚本通过串行端口以2Mbps从PIC单片机收集数据.

PIC工作在2Mbps的完美时序,FTDI usb串行端口也能在2Mbps下工作(均通过示波器验证)

我发送消息(大约15个字符大小)大约每秒100-150倍,并增加数量(以检查我是否有丢失的消息等)

在我的笔记本电脑上我有Xubuntu作为虚拟机运行,我可以通过Putty和我的脚本(python 2.7和pySerial)读取串口

问题:

  • 当通过Putty打开串口时,我看到所有消息(消息中的计数器逐1递增).完善!
  • 当通过pySerial打开串口时,我看到所有消息,但不是每秒接收100-150x,而是以每秒约5次的速度接收它们(仍然是消息逐渐递增1)但是它们可能存储在某个缓冲区中,就像我关机时一样PIC,我可以去厨房然后回来,我仍然收到消息.

这是代码(我省略了大部分代码,但循环是相同的):

ser = serial.Serial('/dev/ttyUSB0', 2000000, timeout=2, xonxoff=False, rtscts=False, dsrdtr=False) #Tried with and without the last 3 parameters, and also at 1Mbps, same happens.
ser.flushInput()
ser.flushOutput()
While True:
  data_raw = ser.readline()
  print(data_raw)
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么pySerial需要这么多时间从串口读取直到行尾?有帮助吗?

我想实时拥有这个.

谢谢

python serial-port pyserial python-2.7

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

什么是在Python中枚举串口的跨平台方法(包括虚拟端口)?

注意:我使用Python 2.7和pySerial进行串行通信.

我发现这篇文章列出了两种方式:http://www.zaber.com/wiki/Software/Python#Displaying_a_list_of_available_serial_ports

此方法适用于Windows和Linux,但有时会错过Linux上的虚拟端口:

import serial

def scan():
   # scan for available ports. return a list of tuples (num, name)
   available = []
   for i in range(256):
       try:
           s = serial.Serial(i)
           available.append( (i, s.portstr))
           s.close()
       except serial.SerialException:
           pass
   return available

print "Found ports:"
for n,s in scan(): print "(%d) %s" % (n,s)
Run Code Online (Sandbox Code Playgroud)

这个只适用于Linux,但包含虚拟端口:

import serial, glob

def scan():
   # scan for available ports. return a list of device names.
   return glob.glob('/dev/ttyS*') + glob.glob('/dev/ttyUSB*')

print "Found ports:" …
Run Code Online (Sandbox Code Playgroud)

python cross-platform serial-port pyserial python-2.7

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

使用sleep()时高效快速的Python while循环

我试图使用Pyserial通过串口与设备通信.由于需要不断发送命令,因此必须将它们放在Python中的while循环中.

我目前正在使用这段代码,并看看python进程需要100%的CPU:

while True:
    #do some serial sending here
    time.sleep(0.2)
Run Code Online (Sandbox Code Playgroud)

这段代码有效.但是,发送速度很慢.我试图通过减少sleep间隔来加快速度,但似乎加载CPU太多了.

简而言之,是否有任何方法可以永久有效地迭代while循环,同时仍然保持较低的CPU资源消耗?

python while-loop pyserial

29
推荐指数
2
解决办法
5万
查看次数

pyserial:没有名为tools的模块

我已经使用python 2.7.2在我的Ubuntu盒子上安装了最新的pySerial,它适用于大多数事情,但每当我尝试导入'tools'包时,它就说它无法找到'工具'.pySerial文档显式引用了这个'tools'包.

>>> from serial import tools
Traceback (most recent call last):
  File "<pyshell#30>", line 1, in <module>
    import serial.tools
ImportError: No module named tools
Run Code Online (Sandbox Code Playgroud)

当我:

>>> serial.VERSION
'2.5'
Run Code Online (Sandbox Code Playgroud)

这是Source Forge的最新版本

那么为什么我不能进入pySerial的'tools'包呢?

python serial-port pyserial python-2.7

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

PySerial非阻塞读取循环

我正在读这样的串行数据:

connected = False
port = 'COM4'
baud = 9600

ser = serial.Serial(port, baud, timeout=0)

while not connected:
    #serin = ser.read()
    connected = True

    while True:
        print("test")
        reading = ser.readline().decode()
Run Code Online (Sandbox Code Playgroud)

问题是它阻止了其他任何事情的执行,包括瓶子py web框架.添加sleep()无济于事.

在ser.readline()中更改"while True""to":"不打印"test",这很奇怪,因为它在Python 2.7中有效.任何想法可能出错?

理想情况下,只有在可用时才能读取串行数据.数据每1,000毫秒发送一次.

python nonblocking pyserial python-3.x

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

pySerial write()不会接受我的字符串

使用Python 3.3和pySerial进行串行通信.

我正在尝试向COM PORT写一个命令,但write方法不会占用我的字符串.(大多数代码来自这里使用pySerial包的完整示例

这是怎么回事?

import time
import serial


ser = serial.Serial(
    port='\\\\.\\COM4',
    baudrate=115200,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)
if ser.isOpen():
    ser.close()
ser.open()
ser.isOpen()

ser.write("%01#RDD0010000107**\r")
out = ''
# let's wait one second before reading output (let's give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
    out += ser.read(40)

if out != '':
    print(">>" + out)


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

错误发生在ser.write("%01#RDD0010000107**\r")中,它获取Traceback就像这个data = to_bytes(data)b.append(item)TypeError:需要一个整数.

python pyserial

21
推荐指数
2
解决办法
9万
查看次数