首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将换行符终止的字符串从Python发送到Arduino

将换行符终止的字符串从Python发送到Arduino
EN

Stack Overflow用户
提问于 2019-10-03 04:04:00
回答 1查看 551关注 0票数 0

使用serial.write()将换行符(\n)终止字符串发送到Arduino。

将python 2.x脚本转换为python 3.x会产生“不支持unicode”错误:

代码语言:javascript
复制
cmd = "a string" 
cmd = cmd + "\n"
serial.write(cmd)

更改为

代码语言:javascript
复制
serial.write(cmd.encode('ascii'))

消除了错误

然而,我不清楚到底是由什么传播的

代码语言:javascript
复制
serial.write(cmd.encode('ascii'))

控制台会话产生了以下内容:

代码语言:javascript
复制
>>>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'

如果我要执行:

代码语言:javascript
复制
>>>serial.write(cmd.encode('ascii'))

确切地说会发送什么?它是否会像print语句中那样包含首字母b?它会包括单引号吗?它会发送换行符(0x0A)的ascii字节码,还是反斜杠(0x5C)和"n“(0x6E)的ascii字节码?

EN

回答 1

Stack Overflow用户

发布于 2019-10-04 02:11:16

呃。当您第一次遇到字符串和字节字符串时,在Python3中使用它们可能会非常令人沮丧和困惑。This answer对此有一个很好的解释。

PySerial使用字节字符串。要将字符串写入串行端口,您必须将其encode()为字节字符串。要从串口读入字符串,您必须使用decode()命令。

在您的代码中,如果您可以将所有内容都保存为字节字符串,则可以避免进行所有的编码和解码。但是你要记得多键入一个b字符:

代码语言:javascript
复制
cmd = b"a string" 
cmd = cmd + b"\n"
serial.write(cmd)

或者您也可以选择编码/解码:

代码语言:javascript
复制
cmd = "a string" 
cmd = cmd + "\n"
serial.write(cmd.encode('ascii'))

Python交互式shell将把众所周知的ascii字符表示为它们的转义代码:

代码语言:javascript
复制
>>> '\x0a';'\x0d'
'\n'
'\r'

并且许多字符将保留为字节表示形式:

代码语言:javascript
复制
>>> '\x00'; '\x01'
'\x00'
'\x01'

回到你的问题,如果你发送

代码语言:javascript
复制
serial.write(b"a string\n")

b不能发送,\n将作为chr(10)或b'\x0a‘发送。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58208631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档