lib_nrf24 lansează OSError (Errno 9) Descriptor de fișier greșit pe radio.available (0)

Folosesc Biblioteca lib_nrf24 BLavery cu un modul nRF24L01 pe pi-ul meu care rulează Octopi (este destul de rasbpian în scopurile de aici, AFAIK – iată rezultatul comenzii 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" 

Sunt capabil să configurez radioul în conformitate cu acest tutorial , dar codul care așteaptă ca radioul să fie primiți date;

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

aruncă un OSError (errno 9) Descriptor de fișier greșit. Iată urmărirea completă a erorilor:

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 

Am găsit această postare de flux de stivă despre ce OSError este și înseamnă, dar nu sunt sigur cum acest lucru mă va ajuta să-mi dau seama ce se întâmplă în biblioteca lib_nrf24 și cum să-l facă să funcționeze, astfel încât radioul să se comporte normal.

Postarea spune că acest lucru eroarea poate fi aruncată dacă un fișier este deschis și închis în altă parte, astfel încât mediul curent crede că este încă deschis și aruncă această eroare când încearcă să închidă fișierul. Codul implicat în bibliotecă este doar o instrucțiune return; >

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

Și „nu învăț nimic mai mult din analiza metodei disponibile care apelează get_status

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

Am căutat orice postări care menționează atât biblioteca lib_nrf24, cât și oricare dintre „OSError” „errno 9” sau „Descriptor de fișiere greșit” și am găsit zero accesări pentru intersecția acestor două numere.

Îmi dau seama pe pagina github lib_nrf24 scrie lib rary nu mai are suport din mai 2018. Nu am noroc? Nu am putut găsi o bibliotecă Python mai recentă pentru aceste module RF. Singura altă abordare pe care am văzut-o este să dau seama cum să folosesc bibliotecile boost c ++ pentru a utiliza biblioteca tmrh20 … dar m-am uitat la asta și nu am putut să-mi dau seama.

Comentarii

  • Vă rugăm să nu ' nu prezintă numai link-uri pentru a înțelege problema ta. Majoritatea dintre noi nu o vor urmări, deoarece depun eforturi mari. Explică-ți singuri care este ' deci o putem înțelege numai din întrebare. Vă rugăm să faceți scurtul tur și să vizitați Centrul de ajutor să-mi fac o idee despre cum funcționează lucrurile aici.
  • @Ingo Am ' am încercat cu adevărat să fac asta, am declarat în mod explicit erorile pe care le primesc și Am rezumat postarea la care am legat, spunând ce este relevant din ea. Am pus și codul din biblioteca pe care am legat-o și în această postare. Chiar cred că totul este în această postare – puteți fi mai precis despre ceea ce aș putea ' să fac diferit?
  • @ tlfong01 Da, știu că eroarea provine din codul python din Librăria. Eu folosesc doar python în acest proiect. Am încercat să tipăresc informațiile pe care trebuie să le returneze metoda get_status, dar apoi instrucțiunea print aruncă aceeași eroare; Descriptor de fișier greșit. Unde pot găsi mai multe informații despre spidev.xfer2? Biblioteca spidev pe care o am este github.com/Gadgetoid/py-spidev și nu ' nu știu ce ar trebui să caut în această bibliotecă pentru a rezolva această problemă.
  • Am încercat testul SPI loopback din Anexa E a postării pe care ați conectat-o. Primesc toate zero-urile. Nu ' nu sunt sigur ce ar trebui să primesc. Ar trebui ca MOSI să fie conectat la MISO? Folosesc programul recv.py.
  • Am ' m-am uitat în manualul PyPi spidev (deși folosesc Gadgetoid ' s py-spidev, conform tutorialului). Nu pot ' să aflu ce ar trebui să returneze spidev.xfer2. Valoarea NRF24.NOP este doar 0xFF. Dacă încerc să imprim (self.spidev.xfer2 ([NRF24.NOP])) (adică fără accesorul pentru a obține elementul 0), ieșirea nu imprimă nimic, iar eroarea este încă aruncată de această instrucțiune de imprimare, nu de instrucțiunea de returnare asta urmează.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *