lib_nrf24 lancia OSError (Errno 9) Descrittore di file non valido su radio.available (0)

Sto usando BLavery “la libreria lib_nrf24 con un modulo nRF24L01 sul mio pi che esegue Octopi (è praticamente rasbpian per gli scopi qui, AFAIK – ecco il risultato del comando 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" 

Sono in grado di configurare la radio secondo questo tutorial , ma il codice che attende che la radio ricevere dati;

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

lancia un OSError (errno 9) Descrittore di file non valido. Ecco il traceback completo dellerrore:

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 

Ho trovato questo post stackoverflow su cosa OSError è e significa, ma non sono sicuro di come questo mi aiuterebbe a capire cosa sta succedendo nella libreria lib_nrf24 e come farlo funzionare in modo che la radio si comporti normalmente.

Il post dice che questo lerrore può essere generato se un file viene aperto e chiuso altrove in modo che lambiente corrente pensi che sia ancora aperto e genera questo errore quando tenta di chiudere il file. Il codice implicato nella libreria è solo unistruzione di ritorno;

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

E non sto imparando altro guardando il metodo disponibile che chiama get_status

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

Ho cercato tutti i post che menzionano sia la libreria lib_nrf24 che uno qualsiasi di “OSError” “errno 9” o “Bad file descriptor” e ho trovato zero risultati per lintersezione di questi due problemi.

Mi rendo conto che sulla pagina github lib_nrf24 cè scritto lib rary è fuori supporto a partire da maggio 2018. Sono sfortunato? Non sono riuscito a trovare una libreria python più recente per questi moduli rf. Lunico altro approccio che ho visto è capire come utilizzare le librerie boost c ++ per utilizzare la libreria tmrh20 … ma lho esaminato e non sono riuscito a capirlo.

Commenti

  • Per favore, don ' t presente solo link per comprendere il tuo problema. La maggior parte di noi non lo seguirà a causa di molti sforzi .. Spiega qual è ' il problema da solo quindi possiamo capirlo solo dalla domanda. Segui il breve Tour e visita il Centro assistenza per avere unidea di come funzionano le cose qui.
  • @Ingo I ' ho davvero provato a farlo, ho dichiarato esplicitamente gli errori che ricevo e Ho riassunto il post a cui ho collegato, dicendo cosa è rilevante. Ho inserito anche il codice della libreria che ho collegato in questo post. Penso davvero che sia tutto in questo post – puoi essere più specifico su ciò che potrei ' fare diversamente?
  • @ tlfong01 Sì, so che lerrore proviene dal codice Python in la Biblioteca. Sto usando solo python in questo progetto. Ho provato a stampare le informazioni che il metodo get_status deve restituire, ma poi listruzione print genera lo stesso errore; Descrittore di file errato. Dove posso trovare ulteriori informazioni su spidev.xfer2? La libreria spidev che ho è github.com/Gadgetoid/py-spidev e non ' so cosa dovrei cercare in questa libreria per risolvere questo problema.
  • Ho provato il test di loopback SPI dallAppendice E del post che hai collegato. Ottengo tutti gli zeri. ' non sono sicuro di cosa dovrei ricevere. MOSI dovrebbe essere collegato a MISO? Sto utilizzando il programma recv.py.
  • ' ho esaminato il manuale di PyPi spidev (anche se sto utilizzando Gadgetoid ' s py-spidev, come da tutorial). Non riesco ' a scoprire cosa dovrebbe restituire spidev.xfer2. Il valore NRF24.NOP è solo 0xFF. Se provo a stampare (self.spidev.xfer2 ([NRF24.NOP])) (cioè senza la funzione di accesso per ottenere lelemento 0) loutput non stampa nulla e lerrore viene comunque generato da questa istruzione print, non dallistruzione return che segue.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *