lib_nrf24 löst OSError aus (Errno 9) Ungültiger Dateideskriptor auf radio.available (0)

Ich verwende BLaverys lib_nrf24-Bibliothek mit einem nRF24L01-Modul auf meinem Pi, auf dem Octopi ausgeführt wird (es ist ziemlich rasbpian für die Zwecke hier, AFAIK – hier ist das Ergebnis des Befehls os-release).

PRETTY_NAME="Raspbian GNU/Linux 10 (buster)" NAME="Raspbian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs" 

Ich kann das Radio gemäß dieses Tutorials einrichten, aber den Code, der auf das Radio wartet Daten empfangen;

 while not radio.available(0): time.sleep(1/100) 

löst einen OSError (errno 9) aus. Hier ist der vollständige Fehler-Traceback:

Traceback (most recent call last): File "main.py", line 72, in <module> main() File "main.py", line 18, in main while not radio.available(0): File "/home/pi/smarthome/lib_nrf24.py", line 506, in available status = self.get_status() File "/home/pi/smarthome/lib_nrf24.py", line 293, in get_status return self.spidev.xfer2([NRF24.NOP])[0] OSError: [Errno 9] Bad file descriptor 

Ich habe diesen Stackoverflow-Beitrag über welchen OSError gefunden ist und bedeutet, aber ich bin nicht sicher, wie dies mir helfen würde, herauszufinden, was in der lib_nrf24-Bibliothek vor sich geht und wie es funktioniert, damit sich das Radio normal verhält.

Der Beitrag sagt dies Ein Fehler kann ausgelöst werden, wenn eine Datei geöffnet und an anderer Stelle geschlossen wird, sodass die aktuelle Umgebung denkt, dass sie noch geöffnet ist, und dieser Fehler wird ausgelöst, wenn versucht wird, die Datei zu schließen. Der implizite Code in der Bibliothek ist nur eine return-Anweisung;

 def get_status(self): return self.spidev.xfer2([NRF24.NOP])[0] 

Und ich lerne nichts mehr, wenn ich mir die verfügbare Methode ansehe, die den get_status

 def available(self, pipe_num=None): if not pipe_num: pipe_num = [] status = self.get_status() result = False ... 

aufruft

Ich habe nach Posts gesucht, in denen sowohl die lib_nrf24-Bibliothek als auch „OSError“, „errno 9“ oder „Bad File Descriptor“ erwähnt werden, und habe keine Treffer für den Schnittpunkt dieser beiden Probleme gefunden.

Mir ist klar, dass auf der lib_nrf24-Github-Seite die lib steht Seit Mai 2018 hat Rary keine Unterstützung mehr. Habe ich kein Glück? Ich konnte keine neuere Python-Bibliothek für diese HF-Module finden. Der einzige andere Ansatz, den ich gesehen habe, besteht darin, herauszufinden, wie die c ++ – Boost-Bibliotheken zur Verwendung der Bibliothek tmrh20 verwendet werden … aber ich habe mir das angeschaut und konnte es nicht herausfinden.

Kommentare

  • Bitte nicht ' Es werden nur Links angezeigt, um Ihr Problem zu verstehen. Die meisten von uns werden es wegen zu viel Aufwand nicht befolgen. Erklären Sie, was ' das Problem selbst ist Daher können wir es nur anhand der Frage verstehen. Bitte nehmen Sie an der kurzen -Tour teil und besuchen Sie die -Hilfecenter um eine Vorstellung davon zu bekommen, wie die Dinge hier funktionieren.
  • @Ingo Ich ' habe wirklich versucht, dies zu tun. Ich habe ausdrücklich die Fehler angegeben, die ich erhalte, und Ich habe den Beitrag, auf den ich verlinkt habe, zusammengefasst und gesagt, was daraus relevant ist. Ich habe den Code aus der Bibliothek, die ich verlinkt habe, auch in diesen Beitrag eingefügt. Ich denke wirklich, dass alles so ist in diesem Beitrag – können Sie genauer sagen, was ich ' anders machen könnte?
  • @ tlfong01 Ja, ich weiß, dass der Fehler vom Python-Code in stammt die Bibliothek. Ich benutze nur Python in diesem Projekt. Ich habe versucht, die Informationen zu drucken, die die Methode get_status zurückgeben muss, aber dann gibt die print-Anweisung denselben Fehler aus. Ungültiger Dateideskriptor. Wo finde ich weitere Informationen zu spidev.xfer2? Die Spidev-Bibliothek, die ich habe, ist github.com/Gadgetoid/py-spidev, und ich ' weiß nicht, wonach ich in dieser Bibliothek suchen soll, um dieses Problem zu lösen.
  • Ich habe den SPI-Loopback-Test aus Anhang E des von Ihnen verlinkten Beitrags ausprobiert. Ich bekomme alle Nullen. Ich ' bin mir nicht sicher, was ich bekommen soll. Sollte MOSI mit MISO verbunden sein? Ich verwende das Programm recv.py.
  • Ich ' habe im PyPi-Spidev-Handbuch nachgesehen (obwohl ich Gadgetoid ' s py-spidev, wie im Tutorial beschrieben). Ich kann ' nicht herausfinden, was spidev.xfer2 zurückgeben soll. Der NRF24.NOP-Wert ist nur 0xFF. Wenn ich versuche zu drucken (self.spidev.xfer2 ([NRF24.NOP])) (dh ohne den Accessor, um das 0-Element zu erhalten), gibt die Ausgabe nichts aus, und der Fehler wird immer noch von dieser print-Anweisung ausgelöst, nicht von der return-Anweisung das folgt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.