Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Arduino和Mac OS X系统之间通过RS-232发送十六进制数据_Python_Macos_Serial Port_Arduino - Fatal编程技术网

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

Python 在Arduino和Mac OS X系统之间通过RS-232发送十六进制数据,python,macos,serial-port,arduino,Python,Macos,Serial Port,Arduino,我正在使用。上面说可以使用AccessPort,但因为我使用的是Mac OS X,所以无法使用。我不知道还有什么其他的解决方案,但我可以用Python编写自己的解决方案,同时我也可以使用任何其他有效的语言 我在这里找到了一些解决方案,但到目前为止,它似乎不起作用 import serial import struct def C(val): return struct.pack('H', val) ser = serial.Serial(port='/dev/tty.PL2303-0

我正在使用。上面说可以使用AccessPort,但因为我使用的是Mac OS X,所以无法使用。我不知道还有什么其他的解决方案,但我可以用Python编写自己的解决方案,同时我也可以使用任何其他有效的语言

我在这里找到了一些解决方案,但到目前为止,它似乎不起作用

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用于开始录制。由于红色快速闪烁,我的设备似乎处于等待模式。即使我做了
0xaa00
,也没什么作用。我甚至尝试将字节顺序更改为
0x00aa
0x11aa
等等,但我从未收到我的
0xcc
0xe0
错误代码

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

我很乐意从这个串口读任何东西,因为现在我可以写了,它什么也不做,什么也不读

现在,我将尝试使用crossover安装AccessPort。如果它仍然不起作用,我将不得不找到一个Windows框。我甚至可以用我的Arduino板写我自己的桥,因为我使用的驱动程序可能有车

以防万一,我正在使用USB连接串行PL2303

编辑
  • 我插入我的输出和输入引脚,测试我的USB到串行。我确实读了我写的东西,所以司机工作得很好

  • 我将尝试直接与Arduino进行设置,并直接从那里进行测试

  • 发送
    0xaa11
    与先发送
    0xaa
    再发送
    0x11
    不同。序列号似乎颠倒了字节顺序

  • 另一方面,文档中并没有说明位endianess,所以这可能也是问题所在


我解决了我的问题,但它毕竟相当愚蠢

这是我最后的剧本:

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”中使用了network endianess,将0xaa00更改为0xaa0x00

但真正的问题不在剧本里。由于usb到串行接口没有工作,我觉得奇怪的是模块没有任何响应。。。甚至连一个字节的错误都没有。此模块中的每个命令都必须返回某些内容。这就是为什么我回头看了看我的电缆并检查了针脚
gnd
gnd
,电源至电源,然后
rxd
txd
txd
rxd
。。。虽然一切似乎都很好。。。我应该收到一些东西。。。然后我真的想。。。如果它不应该使用交叉电缆,
txd
应插入
txd
rxd
rxd
,该怎么办。。。显然是的

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


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

在黑暗中查看您提到的URL-它提到setup()-可能值得尝试这些序列,看看这是否真的会使设备在发送其他序列之前开始接受命令/侦听。这是一个想法,我可以尝试按下0xAA,然后按下下一个值,就像在setup函数中一样。。。无论如何,如果什么都不起作用,我可能会写一个从arduino到这个模块的桥接器,并直接使用arduino的串行。如果我的txin插入我的txout引脚,它应该会直接接收我写入串行的内容,对吗?谢谢你的信息。-我相信我永远都不需要使用这样的设备,但感谢您报告您的结果和解决方案。现在这确实令人困惑。根据我的经验,通常情况下,只有电缆管脚到设备管脚,您才应该匹配类型。