【发布时间】:2020-12-09 22:56:21
【问题描述】:
我试图在我的 PC 和传感器设备之间建立 SPI 通信。为此,我使用 TCP/IP 到 SPI 转换器。项目的这一方面已经开始工作。我可以通过 TCP/IP 向转换器发送一些东西,它就完成了它的工作。
那么问题出在哪里?我使用套接字库。在 Python 3.8 中做 TCP/IP 端:
import socket, sys
TCP_IP = '192.168.100.100'
TCP_PORT = 1003
BUFFER_SIZE = 1024
s = socket.socket()
try:
s.connect((TCP_IP, TCP_PORT))
except socket.error as mag:
print (" Socket Erroer: " + str(mag))
s.send(b'\x8000')
data = s.recv(BUFFER_SIZE)
print(data)
我想要做的是发送(二进制)1000 0000 0000 0000(= 8000 十六进制)。 但是 python 将 \x8000 拆分为 \x80\x00 并将其作为两个 8 位字发送为 1000 0000,然后是第二个包 0000 0000。但是转换器需要它作为 16 位字,否则它会将其填满。 SPI信号是0000 0000 1000 0000 0000 0000 0000 0000,太可怕了,没有前8位我无法读取单个寄存器。
那么有没有办法将 /x8000 作为一个 16 位字发送? 我还想了解更多关于数据类型(或其他)的信息 b' something ' 那是什么?它有什么作用?
感谢您阅读本文!我对所有的建议和批评持开放态度。我希望你能帮助我谢谢你的每一次尝试!
【问题讨论】:
-
不,您不能通过套接字发送一个 16 位字,但您可以发送两个 8 位字。
-
好吧...这不酷,两个 8 位之间的转换器时间太长了
-
这是 TCP/IP 的一般特性吗?或者我可以用不同的库或语言解决它吗?
-
它是一个 TCP 的东西,虽然是一个流,但每个单元都是一个八位字节,通常称为一个字节。现在,您可以通过 TCP 形成另一个协议并将流转回数据包。必须有数百个选项。首先寻找protocol buffers
标签: python sockets binary hex spi