lib_nrf24 gooit OSError (Errno 9) Slechte bestandsbeschrijving op radio.available (0)

Ik gebruik BLavery “s lib_nrf24 bibliotheek met een nRF24L01 module op mijn pi met Octopi (het is vrij rasbpisch voor de doeleinden hier, AFAIK – hier is het resultaat van het os-release commando).

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" 

Ik kan de radio instellen volgens deze tutorial , maar de code die wacht tot de radio data ontvangen;

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

genereert een OSError (errno 9) Slechte bestandsdescriptor. Hier is de volledige foutopsporing:

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 

Ik vond dit stackoverflow-bericht over wat OSError is en betekent, maar ik weet niet zeker hoe dit me zou helpen erachter te komen wat er aan de hand is in de lib_nrf24 bibliotheek, en hoe het werkt zodat de radio zich normaal gedraagt.

Het bericht zegt dat dit Er kan een fout optreden als een bestand wordt geopend en ergens anders wordt gesloten, zodat de huidige omgeving denkt dat het nog steeds open is, en deze fout genereert wanneer het probeert het bestand te sluiten. De implicerende code in de bibliotheek is slechts een retourinstructie;

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

En ik “leer niets meer van het kijken naar de beschikbare methode die de get_status aanroept

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

Ik heb naar berichten gezocht die zowel de bibliotheek lib_nrf24 als een van de “OSError”, “errno 9” of “Bad file descriptor” vermelden en ik heb geen treffers gevonden voor de kruising van deze twee problemen.

Ik realiseer me dat op de lib_nrf24 github-pagina het lib rary wordt niet meer ondersteund vanaf mei 2018. Heb ik pech? Ik kon geen recentere python-bibliotheek vinden voor deze rf-modules. De enige andere benadering die ik heb gezien is om erachter te komen hoe de c ++ boost-bibliotheken te gebruiken om de tmrh20-bibliotheek te gebruiken … maar ik heb ernaar gekeken en kwam er niet uit.

Reacties

  • Don ' t presenteren alleen links om uw probleem te begrijpen. De meesten van ons zullen het niet volgen omdat ze te veel moeite doen. Leg zelf uit wat ' het probleem is dus we kunnen het alleen uit de vraag begrijpen. Volg de korte Tour en bezoek het Helpcentrum om een idee te krijgen hoe de dingen hier werken.
  • @Ingo Ik ' heb echt geprobeerd dat te doen, ik heb expliciet de fouten vermeld die ik krijg, en Ik heb het bericht waarnaar ik heb gelinkt samengevat en gezegd wat er relevant is. Ik heb de code van de bibliotheek die ik heb gelinkt ook in dit bericht geplaatst. Ik denk echt dat alles is in dit bericht – kun je specifieker zijn over wat ik ' anders zou kunnen hebben gedaan?
  • @ tlfong01 Ja, ik weet dat de fout afkomstig is van de python-code in de bibliotheek. Ik gebruik alleen python in dit project. Ik heb geprobeerd de informatie af te drukken die de get_status-methode nodig heeft om te retourneren, maar dan geeft de print-instructie dezelfde foutmelding; Slechte bestandsdescriptor. Waar kan ik meer informatie vinden over spidev.xfer2? De spidev-bibliotheek die ik heb is github.com/Gadgetoid/py-spidev, en ik weet niet ' waar ik naar moet zoeken in deze bibliotheek om dit probleem op te lossen.
  • Ik heb de SPI-loopback-test geprobeerd uit bijlage E van het bericht dat je hebt gelinkt. Ik krijg allemaal nullen. Ik ' weet niet zeker wat ik zou moeten krijgen. Moet MOSI worden verbonden met MISO? Ik gebruik het programma recv.py.
  • Ik ' heb de PyPi spidev-handleiding bekeken (hoewel ik Gadgetoid gebruik ' s py-spidev, zoals in de tutorial). Ik kan ' niet achterhalen wat spidev.xfer2 moet retourneren. De NRF24.NOP-waarde is slechts 0xFF. Als ik probeer af te drukken (self.spidev.xfer2 ([NRF24.NOP])) (dwz zonder de accessor om het 0-element te krijgen), drukt de uitvoer niets af, en de fout wordt nog steeds gegenereerd door deze printinstructie, niet de return-instructie dat volgt.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *