标签: pyserial

用于在窗口上打印的串行数据的python代码.

我对python和pyserial很新.我的电脑安装了python 2.7.4与pyserial,我想在我的电脑上的一个单独的窗口打印串行接收的数据.首先必须打开窗口,然后在该窗口上打印串行数据.这里窗口必须打开一次,并且必须在窗口上连续打印串行数据,直到设备停止传送数据为止.我试过这个代码,但它一文不值.请有人帮我提供代码.

import serial
import Tkinter
from Tkinter import *
s = serial.Serial('COM10',9600)    # open serial port
master = Tk()
master.geometry("1360x750")        # a window pop up with width (1360) and height(750)     which exatly fits my monitor screen..

while 1:
if s.inWaiting():
text = s.readline(s.inWaiting())
frameLabel = Frame( master, padx=40, pady =40)
frameLabel.pack()
w = Text( frameLabel, wrap='word', font="TimesNewRoman 37")
w.insert(12.0,text )
w.pack()
w.configure( bg=master.cget('bg'), relief='flat', state='Normal' )

mainloop()
Run Code Online (Sandbox Code Playgroud)

tkinter pyserial python-2.7

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

pySerial inWaiting 返回错误的字节数

我有一个简单的程序来测试串行功能。我的串行设备对两个输入做出反应。如果用户输入“a”,它会以“fg”响应。如果用户输入任何其他字符/字节,它会以“z”响应。如果我将“b”发送到串行设备,它会返回“z”就好了。当我发送 'a' 时,它应该返回 'f' 和 'g',所以是两个字节而不是一个字节。

请参阅下面的代码。

#!/usr/bin/env python

import serial

ser = serial.Serial(
    port = '/dev/ttyUSB0',
    baudrate = 9600,
    parity = serial.PARITY_NONE,
    stopbits = serial.STOPBITS_ONE,
    bytesize = serial.EIGHTBITS
    )

ser.write('a')
byteData = ser.read(1) # read one, blocking
moreBytes = ser.inWaiting()

if moreBytes:
    byteData = byteData + ser.read(moreBytes)
    print byteData

print byteData


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

输出是:

user@ubuntu:~/code/native$ ./serialTesting.py 
f
Run Code Online (Sandbox Code Playgroud)

inWaiting() 的值为 0,因此它永远不会读取第二个字节。如果我对代码做一个小的改动,并手动读取两个预期的字节,它就可以正常工作。

#!/usr/bin/env python

import serial

ser = serial.Serial(
    port = '/dev/ttyUSB0',
    baudrate = 9600,
    parity = serial.PARITY_NONE,
    stopbits = serial.STOPBITS_ONE,
    bytesize …
Run Code Online (Sandbox Code Playgroud)

python pyserial

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

如何使用python(pyserial)向华为E3272 Hilink发送AT命令?

在前几代 USB 调制解调器中,通过使用 Pyserial 并将命令定向到相应的 /dev/USBACM 设备,可以轻松发送 AT 命令。然而,这个华为设备创建了自己的虚拟接口,因此 ifconfig 将其显示为 eth1,而“dmesg | grep tty”并没有真正显示它。所以我的问题是如何使用 python 和 pyserial 发送 AT 命令?谢谢。PS:请随意权衡其他替代方法。

python pyserial at-command

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

serial.serialutil.SerialException:无法打开端口 /dev/ttyAMA0:[Errno 13] 权限被拒绝:'/dev/ttyAMA0'

我有一个 Raspberry,我正在尝试连接到 Ubidots IOT 云,但出现以下错误:

pi@raspberrypi:~/Downloads/raspbiDaniela/Ver 2016/ZonrProject $ python main.py
    Traceback (most recent call last):
      File "main.py", line 124, in <module>
        main()
      File "main.py", line 21, in main
        ser = serial.Serial(port=port, baudrate=baud)
      File "/usr/lib/python2.7/dist-packages/serial/serialutil.py", line 261, in __init__
        self.open()
      File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 278, in open
        raise SerialException("could not open port %s: %s" % (self._port, msg))
    serial.serialutil.SerialException: could not open port /dev/ttyAMA0: [Errno 13] Permission denied: '/dev/ttyAMA0'
Run Code Online (Sandbox Code Playgroud)

python serial-port pyserial raspberry-pi raspbian

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

在Python中通过串口发送JSON到Arduino

我一直在尝试设置此示例片段以通过串行方式与 Python 进行通信。我打算发送一个简单的 JSON 数据包,并在另一端使用 Arduino 对其进行反序列化。

但是从这里获取的 JSON 库会抛出无效输入的错误。

#include <ArduinoJson.h>

void setup() {
  Serial.begin(115200); 
  while(!Serial) {
  }
}

void loop() {
  int     size_ = 0;
  char    payload[256];
  String  string = "";
  if (size_ = Serial.available()) {
  for(int i =0; i < size_; i++) {
     payload[i] = Serial.read();
     string += payload[i];   
  }

  const size_t capacity = 1024;
  DynamicJsonDocument doc(capacity);
  DeserializationError error = deserializeJson(doc, payload);
  if (error) {
    Serial.println(error.c_str());
    return;
  }
    if(doc["operation"] == "ACK") {
      Serial.println("ACK has been received"); …
Run Code Online (Sandbox Code Playgroud)

c++ python json arduino pyserial

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

python 包串行已重命名为 pyserial 吗?

一个简单的问题,因为我正在学习通过 python 设置串行连接。我在谷歌上搜索了相应的软件包,在互联网上主要发现了两个:serialpyserial

然而,似乎只能找到 的文档pyserial,尽管两者都有很多 stackoverflow 条目。

难道是这个serial包已经改名了pyserial

python pyserial

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

PySerial-无法发送STX

好的,所以我对pySerial完全陌生。我正在尝试与一台实验室设备进行通信,但是仅发送STX(文本开始)命令时遇到了麻烦。到目前为止,我的基本代码如下:

ser = serial.Serial(0, 19200, timeout=1,parity=serial.PARITY_ODD, rtscts=0)
ser.write(0x02) #ASCII STX is 0x2 in hex
Run Code Online (Sandbox Code Playgroud)

但是,当我查看示波器上的232数据时,我尝试发送的STX看上去并不像在Hperterminal中发送的STX命令。

有任何想法吗?我确信这是非常简单的,我只是忽略了一些琐碎的事情。

谢谢!

python pyserial

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

连接到设备时更改pySerial中的波特率?

我正在尝试为一个名为uLCD32-pt的LCD设备编写一个脚本,问题是您需要以波特率9600连接它,并且为了获得更高的波特率,您必须连接它,发送更改波特率命令,然后以新设置的波特率发送新命令.在绘制像素时,我的液晶显示器显得非常慢,我知道它因为波特率,所以在连接到设备后,他们有什么方法可以改变波特率?到目前为止,这是我的代码?

import serial
import time

#Connect to uLCD32-pt with autobaud
ser = serial.Serial(
    port='/dev/ttyUSB0', 
    baudrate=9600, 
    timeout=1,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)
ser.write("U")


while(True):
    #15 x white pixels
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0001)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#1
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0002)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#2
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0003)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#3
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0004)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#4
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0005)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#5
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0006)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#6
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0007)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#7
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0008)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#8
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0009)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#9
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000A)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#10
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000B)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#11
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000C)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#12
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000D)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#13
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000E)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#14
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x000F)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#15
    ser.write(chr(0x0050)+chr(0x0000)+chr(0x0010)+chr(0x0000)+chr(0x000A)+chr(0x00FF)+chr(0x00FF))#16
Run Code Online (Sandbox Code Playgroud)

python usb lcd pyserial baud-rate

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

在后台进程中捕获串行数据

我目前正在尝试在python脚本中捕获串行数据.我打算开始捕获串行端口上捕获的所有数据的日志,同时脚本的其余部分继续与我正在测试的系统交互.

如果我使用pyserial,我相信它最终将阻止我想要执行的其余测试,直到我完成日志记录.

我考虑过的选择是:

  • 编写另一个脚本以使用pyserial捕获日志,使用subprocess.Popen()调用此脚本
  • 使用内置的unix工具,如tail或cat,并使用subprocess.Popen()调用它们

我相信我可以找到一种方法让其中任何一种工作,但如果有人知道更直接的方式,那么我很想知道.

先感谢您.

python subprocess serial-port pyserial

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

为什么pyserial说我有11个参数?

我使用pyserial打开python连接:

self.fpga = serial.Serial(self.fpgaport, 115200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, self.fpgapollinterval, False, False, None, False, None)
Run Code Online (Sandbox Code Playgroud)

这与此处的pyserial文档匹配:

__init__(port=None, baudrate=9600, bytesize=EIGHTBITS, parity=PARITY_NONE, stopbits=STOPBITS_ONE, timeout=None, xonxoff=False, rtscts=False, writeTimeout=None, dsrdtr=False, interCharTimeout=None)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行脚本时,我收到此错误:

line 391, in run

self.fpga = serial.Serial(self.fpgaport, 115200, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE, self.fpgapollinterval, False, False, None, False, None)

TypeError: __init__() takes at most 11 arguments (12 given)
Run Code Online (Sandbox Code Playgroud)

当我取出最后一个参数(最后一个None)时,错误消失了.

如果一个超过1D,我还打印出所有变量名.不是那样的.

我使用的是python 2.6.6,文档是pyserial 2.6.我一直在努力寻找如何找到我正在使用的串口版本.

为什么python声称我提供12个参数,而我只提供11个?我必须在这里遗漏一些东西.

编辑:

如何找到我安装的串口版本?我正在运行的这段代码可能是为另一个版本的python编写的(也是串行编写的).我需要找出我想要的串行版本作为参数.

python pyserial

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