首页 > 解决方案 > 如何使用 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 的情况下多次运行我的程序?还是我的代码中还有其他错误?

谢谢你的帮助

标签: pythonraspberry-pigpiospi

解决方案


推荐阅读