python - 如何使用 Python 在 Raspberry Pi 上执行正确的 GPIO 和 SPI 清理
问题描述
我正在尝试在 Arduino 和 Raspberry Pi 之间使用 NRF24L01+ 进行无线通信。我能够建立连接并将数据发送到 RPi,但是当我停止并启动我的程序时,没有收到任何数据。不显示错误或警告消息。重新启动后一切正常,所以我认为我的清理代码有问题。
这是我的代码:
import RPi.GPIO as GPIO
import time
import spidev
from libs.lib_nrf24 import NRF24
try:
GPIO.setmode(GPIO.BCM)
pipes = [[0xE8, 0xE8, 0xF0, 0xF0, 0xE1], [0xF0, 0xF0, 0xF0, 0xF0, 0xE1]]
radio = NRF24(GPIO, spidev.SpiDev())
radio.begin(0, 25)
radio.setPayloadSize(32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_250KBPS)
radio.setPALevel(NRF24.PA_MIN)
radio.setAutoAck(True)
radio.enableDynamicPayloads()
radio.enableAckPayload()
radio.openReadingPipe(1, pipes[1])
radio.printDetails()
radio.startListening()
while True:
while not radio.available(0):
time.sleep(1/100)
receivedMessage = []
radio.read(receivedMessage, radio.getDynamicPayloadSize())
print("Received: {}".format(receivedMessage))
print("Translating our received Message into unicode characters...")
string = ""
for n in receivedMessage:
if (n >= 32 and n <= 126):
string += chr(n)
print("Our received message decodes to: {}".format(string))
finally:
print("Performing cleanup...")
radio.end()
GPIO.cleanup()
print("Cleanup done...")
我正在使用的库 lib_nrf24 是这个:https ://github.com/BLavery/lib_nrf24
在这两种情况下,输出radio.printDetails()
都正确显示。
我正在使用 Ctrl+C 停止程序并打印两条消息 -Performing cleanup...
而且Cleanup done...
我应该如何执行清理才能在不重新启动 RPi 的情况下多次运行我的程序?还是我的代码中还有其他错误?
谢谢你的帮助
解决方案
推荐阅读
- python-3.x - python中迭代器的用途是什么?我们已经有循环了
- python-3.x - 使用选项解析多个值
- javascript - 如何使用 JavaScript 为不同的选项创建两个不同的计算。?
- reactjs - React Route - cannot assign to "render" because it is not a variable
- html - 如何强制flexbox最后一行的项目选择所有剩余高度(在flex-row模式下)?
- youtube - 如何使用 YouTube Data API v3 获取我的观看记录?
- javascript - Moment.js 打开一个不同日期的文件
- typescript - 为什么不在 typescript 声明文件中使用 declare 关键字作为接口或类型?
- haskell - 为什么GHC会做这么懒惰的静态分析?
- spring - 如何使用多个网络调用和有条件的信号完成 flatMapMany?