lib_nrf24 lance OSError (Errno 9) Mauvais descripteur de fichier sur la radio. Disponible (0)

Jutilise La bibliothèque lib_nrf24 de BLavery avec un module nRF24L01 sur mon pi exécutant Octopi (cest plutôt rasbpian pour les besoins ici, AFAIK – voici le résultat de la commande 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" 

Je peux configurer la radio selon ce tutoriel , mais le code qui attend que la radio recevoir des données;

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

lance un OSError (errno 9) Mauvais descripteur de fichier. Voici le suivi complet des erreurs:

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 

Jai trouvé ce post de stackoverflow sur ce OSError est et signifie, mais je ne sais pas comment cela pourrait maider à comprendre ce qui se passe dans la bibliothèque lib_nrf24, et comment le faire fonctionner pour que la radio se comporte normalement.

Le message dit que ceci une erreur peut être générée si un fichier est ouvert et fermé ailleurs, de sorte que lenvironnement actuel pense quil est toujours ouvert et renvoie cette erreur lorsquil tente de fermer le fichier. Le code impliqué dans la bibliothèque est juste une instruction de retour;

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

Et je « napprends rien de plus en regardant la méthode disponible qui appelle le get_status

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

Jai recherché tous les messages qui mentionnent à la fois la bibliothèque lib_nrf24 et lun des « OSError » « errno 9 » ou « Bad file descriptor » et je nai trouvé aucun résultat pour lintersection de ces deux problèmes.

Je me rends compte que sur la page github lib_nrf24, il est dit la lib rary na plus de support en mai 2018. Suis-je pas de chance? Je nai pas pu trouver de bibliothèque python plus récente pour ces modules rf. La seule autre approche que jai vue est de comprendre comment utiliser les bibliothèques boost c ++ pour utiliser la bibliothèque tmrh20 … mais jai « regardé ça et je nai pas pu le comprendre.

Commentaires

  • Veuillez ne pas ' t ne présente que des liens pour comprendre votre problème. La plupart dentre nous ne le suivront pas parce que trop defforts. Expliquez en quoi ' est le problème par vous-même afin que nous puissions le comprendre uniquement à partir de la question. Veuillez participer à la courte Visite et visiter le Centre daide pour avoir une idée de la façon dont les choses fonctionnent ici.
  • @Ingo Jai ' vraiment essayé de le faire, jai explicitement indiqué les erreurs que je reçois, et Jai résumé le message auquel jai lié, en disant ce qui est pertinent. Jai également mis le code de la bibliothèque que jai liée dans ce message. dans cet article – pouvez-vous être plus précis sur ce que je pourrais ' avoir fait différemment?
  • @ tlfong01 Oui, je sais que lerreur provient du code python dans la bibliothèque. Jutilise uniquement python dans ce projet. Jai essayé dimprimer les informations que la méthode get_status doit renvoyer, mais linstruction print renvoie la même erreur; Mauvais descripteur de fichier. Où puis-je trouver plus dinformations sur spidev.xfer2? La bibliothèque spidev dont je dispose est github.com/Gadgetoid/py-spidev, et je ne ' pas ce que je dois rechercher dans cette bibliothèque pour résoudre ce problème.
  • Jai essayé le test de bouclage SPI de lannexe E de larticle que vous avez lié. Je reçois tous les zéros. Je ' ne suis pas sûr de ce que je devrais obtenir. Faut-il connecter MOSI à MISO? Jutilise le programme recv.py.
  • Jai ' regardé dans le manuel PyPi spidev (bien que jutilise Gadgetoid ' s py-spidev, selon le tutoriel). Je ne peux ' t découvrir ce que spidev.xfer2 est censé renvoyer. La valeur NRF24.NOP est juste 0xFF. Si jessaie dimprimer (self.spidev.xfer2 ([NRF24.NOP])) (cest-à-dire sans laccesseur pour obtenir lélément 0), la sortie nimprime rien et lerreur est toujours générée par cette instruction dimpression, pas par linstruction de retour qui suit.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *