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

Posted

技术标签:

【中文标题】将 HEX 值发送到 Raspberry PI B+ 上的 SPI【英文标题】:Send HEX values to SPI on a Raspberry PI B+ 【发布时间】:2016-04-05 10:57:28 【问题描述】:

我有一个 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 接口。

【问题讨论】:

【参考方案1】:

构造这些字节字符串很容易:只需使用\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

【讨论】:

谢谢,非常好的例子!

以上是关于将 HEX 值发送到 Raspberry PI B+ 上的 SPI的主要内容,如果未能解决你的问题,请参考以下文章

Raspberry pi不会使用minicom或python将串行数据发送到arduino

我如何让Raspberry Pi用python发送带有图片的电子邮件

在 USB 端口上读取串行通信时接收空数据 - Raspberry Pi 3 型号 B+

在 Raspberry Pi 中使用 OpenCV 和套接字通过 TCP 发送视频

如何从 Raspberry Pi Zero 向 PC 发送实时传感器数据?

无法通过 BLE 将 Android 应用程序连接到 Raspberry Pi 3