【问题标题】:pySerial write() won't take my stringpySerial write() 不会接受我的字符串
【发布时间】:2014-04-12 01:48:31
【问题描述】:

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

我正在尝试向我的 COM PORT 写入命令,但 write 方法不会获取我的字符串。 (大部分代码来自这里Full examples of using pySerial package

发生了什么事?

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()

错误出现在 ser.write("%01#RDD0010000107**\r") 处 Traceback 是这样的 数据 = to_bytes(数据) b.附加(项目) TypeError:需要一个整数。

【问题讨论】:

  • 可能是因为 serial 需要一个字节数组而不是 python3 中的字符串。也许以下内容可以帮助您:stackoverflow.com/questions/7585435/…
  • 在我的字符串修复我的问题之后添加 .encode() ! (我还去掉了一些不必要的部分)。谢谢!
  • @Garvin 如果问题解决了,能否请您自己写一个答案并将问题标记为已回答?谢谢!

标签: python pyserial


【解决方案1】:

事实证明需要将字符串转换为字节数组,为此我将代码编辑为

ser.write("%01#RDD0010000107**\r".encode())

这解决了问题

【讨论】:

    【解决方案2】:

    你找到了根本原因。或者这样做:

    ser.write(bytes(b'your_commands'))
    

    【讨论】:

      【解决方案3】:

      我在尝试写入时遇到了相同的“TypeError:需要整数”错误消息。 谢谢, .encode() 为我解决了这个问题。 我在运行 32 位 Windows XP Pro 的戴尔 D530 上运行 python 3.4。

      我在这里省略了 com 端口设置:

      >>>import serial
      
      >>>ser = serial.Serial(5)
      
      >>>ser.close()
      
      >>>ser.open()
      
      >>>ser.write("1".encode())
      
      1
      
      >>>
      

      【讨论】:

        猜你喜欢
        • 2015-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多