【问题标题】:Pyserial and UART Communication with microcontroller与微控制器的 Pyserial 和 UART 通信
【发布时间】:2017-01-28 15:30:59
【问题描述】:

我有一个 Arduino UNO,我正在与我的 PC 和 UNO 进行串行通信。我正在使用 pyserial 与 UNO 进行通信,并且我只接收到我发送到我的微控制器的字符串的第一个字符。下面是串口通信的脚本:

import serial
import time
port = "\\.\COM4"
baudrate = 19200
parity=serial.PARITY_NONE
no=serial.EIGHTBITS
stopbits= serial.STOPBITS_ONE

ser=serial.Serial()
ser.port=port
ser.baudrate=baudrate
ser.timeout=1
ser.parity=parity
ser.bytesize=no
ser.stopbits=stopbits
ser.open()
time.sleep(1)
time.sleep(1)
ser.setDTR(level=0)
time.sleep(1)
ser.write("Hello World");
bytes=ser.read()
print bytes,
ser.close()

我已经设置了我的微控制器以回显发送给它的任何内容,并且我的程序退出而不打印字符串“Hello World”。但是,它会打印第一个字符“H”。我的脚本有问题吗?我使用 Arduino 串行监视器检查了我的微控制器代码,当我通过监视器发送数据时,它会很好地回显输出。这段代码有什么问题?为什么我的代码不打印整个字符串,而只打印我传递给 ser.write() 方法的字符串的第一个字母?提前感谢您的回复!

【问题讨论】:

  • 您确定您已阅读所有发回的内容吗?
  • 接收时,您需要什么,直到所有响应都到达。这可能是通过等待特定数量的字符,或者等待直到在一定(相对较长的)时间内没有收到任何字符。在 19200 的波特率下,每个字符发送/接收需要多长时间?
  • 我的超时时间应该根据我发送的字符数来设置,还是我应该实现一个循环来检查 bytes == "Hello World" 是否存在,如果是则中断?我认为实现循环没有任何意义,因为此脚本的目的是与 UNO 进行通信,而与交换的数据无关。

标签: python pyserial


【解决方案1】:

ser.read() 将整数字节数作为参数读取,因此要读取诸如“Hello World”之类的内容,您需要将命令修改为ser.read(15)

【讨论】:

    猜你喜欢
    • 2015-02-10
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2023-03-24
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多