Python串口写功能不起作用

时间:2014-04-03 11:02:34

标签: python python-3.x typeerror

我是python的新手并尝试使用serial和python 3编写数据。请帮助解决下面的错误。

>>> import serial
>>> check=serial.Serial(1)
>>> print(check.name)
COM2
>>> check.write("test")
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    check.write("test")
  File "C:\Python34\lib\site-packages\serial\serialwin32.py", line 283, in write
    data = to_bytes(data)
  File "C:\Python34\lib\site-packages\serial\serialutil.py", line 76, in to_bytes
    b.append(item)  # this one handles int and str for our emulation and ints for Python 3.x
TypeError: an integer is required

1 个答案:

答案 0 :(得分:11)

import serial
check=serial.Serial(1)
check.write(b"test")

以前版本的Python为您做了很多stringbytes转换(我个人非常喜欢旧方法)。如今,在Python3 +中你需要自己处理数据类型转换,具体取决于你的输出/输入,即使我讨厌它也会更有意义......

这适用于套接字和许多其他对象 因此,为了通过串口或套接字发送数据,您需要做的就是将字符串转换为字节对象。通过声明b"this is bytes"bytes(MyString, 'UTF-8')

来执行此操作

例如:

import serial
check=serial.Serial(1)
data = "test"
check.write(bytes(data, 'UTF-8'))

当机器(你的电脑)使用较低级别的数据(串口,插座等)时,它用于处理二进制代码,这是你可能听说过的01010101
但是你习惯于使用"Hello world"之类的字符串。 中间有一个中间层,它更接近机器代码,但我们的人类仍然可以使用和理解,那就是byte对象。

a -> 97 -> 01100001

以前(如上所述)python会将您的a转换为97,以便为处理机器代码的驱动程序做好准备。这在Python源代码中引起了很多问题,因此决定你需要在需要时转换数据而不是Python试图为你解决问题。 因此,在将它发送到套接字层之前(串口也使用套接字),您只需将其转换为机器将理解的内容更近一步:)

  • Here您将找到每个角色所拥有的值的完整列表。

Ps:如果我把术语搞砸了,或者只是留下评论并且我会纠正它,这是对过程如何工作的过度简化。这只是为了解释为什么要在字符串前放置b:)