将 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 发送视频