使用serial.write()将换行符(\n)终止字符串发送到Arduino。
将python 2.x脚本转换为python 3.x会产生“不支持unicode”错误:
cmd = "a string"
cmd = cmd + "\n"
serial.write(cmd)更改为
serial.write(cmd.encode('ascii'))消除了错误
然而,我不清楚到底是由什么传播的
serial.write(cmd.encode('ascii'))控制台会话产生了以下内容:
>>>cmd = "a string"
>>>print(cmd)
a string
>>>cmd = cmd + "\n"
>>>print(cmd)
a string
#note following blank line
>>>print(cmd.encode('ascii'))
b'a string\n'如果我要执行:
>>>serial.write(cmd.encode('ascii'))确切地说会发送什么?它是否会像print语句中那样包含首字母b?它会包括单引号吗?它会发送换行符(0x0A)的ascii字节码,还是反斜杠(0x5C)和"n“(0x6E)的ascii字节码?
发布于 2019-10-04 02:11:16
呃。当您第一次遇到字符串和字节字符串时,在Python3中使用它们可能会非常令人沮丧和困惑。This answer对此有一个很好的解释。
PySerial使用字节字符串。要将字符串写入串行端口,您必须将其encode()为字节字符串。要从串口读入字符串,您必须使用decode()命令。
在您的代码中,如果您可以将所有内容都保存为字节字符串,则可以避免进行所有的编码和解码。但是你要记得多键入一个b字符:
cmd = b"a string"
cmd = cmd + b"\n"
serial.write(cmd)或者您也可以选择编码/解码:
cmd = "a string"
cmd = cmd + "\n"
serial.write(cmd.encode('ascii'))Python交互式shell将把众所周知的ascii字符表示为它们的转义代码:
>>> '\x0a';'\x0d'
'\n'
'\r'并且许多字符将保留为字节表示形式:
>>> '\x00'; '\x01'
'\x00'
'\x01'回到你的问题,如果你发送
serial.write(b"a string\n")b不能发送,\n将作为chr(10)或b'\x0a‘发送。
https://stackoverflow.com/questions/58208631
复制相似问题