在 Raspberry PI B+ 上将十六进制值发送到 SPI
Send HEX values to SPI on a Raspberry PI B+
我有一个 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 接口。
构建这些字节串很简单:只需使用 \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
我有一个 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 接口。
构建这些字节串很简单:只需使用 \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