1

我正在尝试通过 xbee 从 pc 向 arduino 发送一些数据。

我有一个测试包,我知道它做得很好,它是:

7E 00 7D 33 10 01 00 7D 33 A2 00 40 69 76 DD FF FE 00 00 01 52 B8 DA 41 1A

如果我使用:

ser.write(b'\x7E\x00\x7D\x33\x10\x01\x00\x7D\x33\xA2\x00\x40\x69\x76\xDD\xFF\xFE\x00\x00\x01\x52\xB8\xDA\x41\x1A')

我的数据包到达 arduino。

但现在我想通过命令行传递这个数据包。就像是:

python test.py '\x7E\x00\x7D\x33\x10\x01\x00\x7D\x33\xA2\x00\x40\x69\x76\xDD\xFF\xFE\x00\x00\x01\x52\xB8\xDA\x41\x1A'

每次我想都可以通过这种方式更改数据。

我试过:

ser.write(sys.argv[1])
ser.write(sys.argv[1].encode('ascii'))

和其他尝试但总是失败。

关于我必须如何传递数据的任何想法?我认为问题与 ser.write 中的初始 b 有关...

我正在使用 python 2.6 或 2.7 ...不是 3。

4

1 回答 1

1

这行得通,但我觉得有更好的解决方案(有;见编辑)

import ast
import sys

ser.write(ast.literal_eval("'{0}'".format(sys.argv[1])))

我们使用模块中的保险箱literal_evalast字符串评估"'\x7E\x00\x7D...'"为 python 文字,这得到了我们想要的。

编辑:啊-哈哈在这里找到了更好的解决方案:

ser.write(sys.argv[1].decode("string-escape"))
于 2013-05-01T11:27:22.150 回答