python - 将 HEX 值发送到 Raspberry PI B+ 上的 SPI

标签 python raspberry-pi raspbian spi

我有一个 LED 灯条,我想用我的 Raspberry PI 控制它。我已将它连接到 GPIO10 (MOSI) 和 GPIO11 (CLK)。 SPI 模块加载到 Raspbian 中。

我创建了一个文件并发送到 /dev/spidev-0.0,当我这样做时我可以控制 LED。

如果我发送的文件看起来像下面的文件,我会关闭 LED。

00000000   00 00 00 00  80 00 80 00  80 00 80 00  80 00 80 00  ................
00000010   80 00 80 00  80 00 80 00  80 00 80 00  80 00 80 00  ................
00000020   80 00 80 00  80 00 80 00  80 00 80 00  80 00 80 00  ................
00000030   80 00 80 00  80 00 80 00  80 00 80 00  80 00 80 00  ................
00000040   80 00 80 00  80 00 80 00  80 00 80 00  80 00 80 00  ................
00000050   80 00 80 00  80 00 80 00  80 00 80 00  80 00 80 00  ................
00000060   80 00 80 00  80 00 80 00  80 00                     ..........

如果我发送的文件看起来像下面的文件,我会打开 LED。

00000000   00 00 00 00  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
00000010   FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
00000020   FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
00000030   FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
00000040   FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
00000050   FF FF FF FF  FF FF FF FF  FF FF FF FF  FF FF FF FF  ................
00000060   FF FF FF FF  FF FF FF FF  FF FF                     ..........

我的问题是如何在 Python 中执行此操作?我想即时创建这个字符串并将它们发送到 SPI 接口(interface)。

最佳答案

构造这些字节串很简单:只需使用 \x 转义码即可。

这是一个简单的例子,我在 Python 2.6 上测试过,但它在 Python 3 上应该也能正常工作。

hdr = b'\x00' * 4
blocksize = 51
leds = (
    #LED off
    hdr + b'\x80\x00' * blocksize,
    #LED on
    hdr + b'\xff\xff' * blocksize,
)

fname = '/dev/stdout'
with open(fname, 'wb') as f:
    f.write(leds[0])

该代码创建文件以关闭 LED;要打开它,只需执行 f.write(leds[1])

字符串上的b前缀表示该字符串是字节串。 Python 2 不需要该前缀,因为 Python 2 字符串是字节字符串对象,但它应该在 Python 3 中使用,因为 Python 3 字符串是 Unicode 字符串对象。

我的代码写入 /dev/stdout 以简化测试,因为我没有 Raspberry Pi,但您可以轻松地将文件名更改为 /dev/spidev-0.0.

这是其输出的十六进制转储:

00000000  00 00 00 00 80 00 80 00  80 00 80 00 80 00 80 00  |................|
00000010  80 00 80 00 80 00 80 00  80 00 80 00 80 00 80 00  |................|
00000020  80 00 80 00 80 00 80 00  80 00 80 00 80 00 80 00  |................|
00000030  80 00 80 00 80 00 80 00  80 00 80 00 80 00 80 00  |................|
00000040  80 00 80 00 80 00 80 00  80 00 80 00 80 00 80 00  |................|
00000050  80 00 80 00 80 00 80 00  80 00 80 00 80 00 80 00  |................|
00000060  80 00 80 00 80 00 80 00  80 00                    |..........|
0000006a

关于python - 将 HEX 值发送到 Raspberry PI B+ 上的 SPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34546949/

相关文章:

python - 如何从轮廓中分割圆?

python - 如何使用电视马拉松获取特定私有(private) channel 的更新?

python - 如何使用 Pandas 将两个时间列加在一起

javascript - 如何从客户端向树莓派发送数据?

Linux 脚本在重启后无法正常执行

Python - 从子包导入文件

python-3.x - 带圆形图案的相机校准

c - 在嵌入式 Linux 中是否可以同时导出多个 GPIO?

python - Linux实时优先运行Python程序的方法

c - 从一个简单的网页在 C 程序中设置变量