0

我正在使用语音识别模块 - 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用于开始录制。由于红色LED快速闪烁,我的设备似乎处于等待模式。即使我这样做0xaa00,它也没有多大作用。我什至尝试将字节顺序更改为0x00aa0x11aa等等,但我从未收到我的0xcc0xe0错误代码。

在文档中它说以十六进制发送它,所以我的猜测是 accessport 将十六进制转换为Short使用两个字节的 a。0xaa00是一个两个字节的数字。我什至尝试将波特率更改为38400以防我之前的某个人将其设置为这个速度。

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

截至目前,我将尝试使用交叉安装 AccessPort。如果它仍然不起作用,我将不得不找到一个 Windows 盒子。我什至可以用我的 Arduino 板编写自己的桥接器,因为我使用的驱动程序可能有问题。

以防万一,我使用的是 USB 转串行 PL2303。

编辑

  • 我插入了输出和输入引脚来测试我的 USB 转串口。我确实阅读了我写的内容,因此驱动程序工作正常。

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

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

  • 另一方面,文档没有说明位字节序,所以它也可能是问题所在。

4

1 回答 1

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" 中使用了网络字节序,它将 0xaa00 更改为 0xaa 0x00,就像它应该的那样。

但这里真正的问题不在脚本中。由于USB转串口确实有效,我认为模块没有响应任何东西很奇怪......甚至没有一个字节的错误。这个模块中的每个命令都必须返回一些东西。这就是为什么我回头查看我的电缆并检查针脚……gndgnd,电源到电源,然后rxdtxdtxdrxd……虽然一切似乎都很好……我应该收到一些东西……然后我真的想。 ..如果它不应该使用交叉电缆并且应该txd插入txd和插入怎么办......显然它确实如此。rxdrxd

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

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

于 2012-06-24T19:49:14.863 回答