在Arduino和Mac OS X系统之间通过RS-232发送十六进制数据

时间:2012-06-24 12:42:09

标签: python macos serial-port arduino

我正在使用 Voice Recognition Module -- Arduino Compatible 。它说要使用AccessPort,但由于我在Mac OS X上它不起作用。我不知道任何其他解决方案,但是我在Python中编写自己的解决方案,而我对任何其他有用的语言都是开放的。

我在这里找到了一些关于pySerial的解决方案,但截至目前它似乎没有用。

import serial
import struct

def C(val):
    return struct.pack('H', val)

ser = serial.Serial(port='/dev/tty.PL2303-00001004', baudrate=9600, timeout=1)
ser.nonblocking()

ser.write(C(0xaa11))
print ser.read().__repr__()
ser.close()

它打开,写两个字节,不读任何东西。 0xaa11用于开始录制。我的设备似乎处于等待模式,因为红色LEDs快速闪烁。即使我做0xaa00,它也没有做太多。我甚至尝试将字节顺序更改为0x00aa0x11aa,依此类推,但我从未收到0xcc0xe0错误代码。

在文档中它表示将其发送为十六进制,所以我的猜测是,accessport将十六进制转换为使用两个字节的Short0xaa00是一个两个字节的数字。我甚至试图将baud费率更改为38400,以防有人在我之前确定这个速度。

我很乐意从该串口读取任何东西,因为到目前为止我可以写,它什么都不做,什么都不读......

截至目前,我将尝试使用交叉安装AccessPort。如果它仍然不起作用,我将不得不找到一个Windows框。我甚至可以用我的Arduino板写自己的桥,​​因为我正在使用的驱动程序可能是错误的。

如果重要,我正在使用USB转串口PL2303。

修改

  • 我插入输出和输入引脚以测试我的USB转串口。我确实读过我写的东西,所以司机工作正常。

  • 我会尝试直接用Arduino进行设置并直接从那里进行测试。

  • 发送0xaa11与发送0xaa然后发送0x11不同。串口似乎颠倒了字节顺序。

  • 另一方面,文档没有说明比特结束,所以也可能是问题。

1 个答案:

答案 0 :(得分:1)

我解决了我的问题,毕竟它很愚蠢。

这是我的最终剧本:

import serial
import struct
from time import sleep

def C(val):
    return struct.pack('!H', val)

ser = serial.Serial(port='/dev/tty.PL2303-00002006', baudrate=9600)

sleep(2)

ser.write(C(0xaa00))

sleep(1)
ser.write(C(0xaa36))

sleep(1)
ser.write(C(0xaa11))

sleep(1)

while True:
    print ser.readline()

如果有人想要使用该模块,它可以工作。它将切换到一个模式,它放置输出单词而不是字节,这样你就可以使用readline读取它......

我在struct.pack中使用“!H”使用网络endianess它将0xaa00改为0xaa 0x00就像它应该的那样。

但这里的真正问题不在于剧本中。由于usb到serial的工作,我认为模块没有响应任何东西是奇怪的...甚至没有错误的字节。此模块中的每个命令都必须返回一些内容这就是为什么我回头查看电缆并检查引脚...... gndgnd,电源供电,然后rxdtxd,{{1} } txd ...虽然一切似乎都没问题......我应该收到一些东西......然后我真的想......如果它不应该使用交叉电缆而rxd应该是已插入txdtxdrxd ...显然确实如此。

我切换电缆,现在发送和接收数据。

所以使用该模块的任何人都应该检查它是否正确插入。如果它不起作用,请切换数据引脚。