lib_nrf24 kastar OSError (Errno 9) Dålig filbeskrivning på radio. tillgänglig (0)

Jag använder BLaverys lib_nrf24-bibliotek med en nRF24L01-modul på min pi som kör Octopi (det är ganska mycket raspian för ändamålen här, AFAIK – här är resultatet av kommandot 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" 

Jag kan ställa in radion enligt denna handledning , men koden som väntar på att radion ska ta emot data;

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

kastar en OSError (errno 9) Dålig filbeskrivare. Här är fullständig spårning av fel:

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 

Jag hittade detta stackoverflödesinlägg om vad OSError är och betyder, men jag är inte säker på hur detta skulle hjälpa mig att räkna ut vad som händer i biblioteket lib_nrf24 och hur man får det att fungera så att radion beter sig normalt.

Inlägget säger att detta fel kan kastas om en fil öppnas och stängs någon annanstans så att den nuvarande miljön tror att den fortfarande är öppen och kastar det här felet när den försöker stänga filen. Den implicerande koden i biblioteket är bara ett returuttalande;

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

Och jag lär mig inte mer av att titta på den tillgängliga metoden som kallar get_status

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

Jag har letat efter inlägg som nämner både biblioteket lib_nrf24 och något av ”OSError” ”errno 9” eller ”Dålig filbeskrivare” och kommer med noll träffar för skärningspunkten mellan dessa två nummer.

Jag inser att det på lib_nrf24 github-sidan står att lib rary saknar stöd i maj 2018. Har jag tur? Jag kunde inte hitta ett nyare pythonbibliotek för dessa RF-moduler. Det enda andra tillvägagångssättet jag har sett är att ta reda på hur man använder c ++ boost-biblioteken för att använda tmrh20-biblioteket … men jag har tittat på det och kunde inte ta reda på det.

Kommentarer

  • Vänligen ' t presenterar bara länkar för att förstå ditt problem. De flesta av oss kommer inte att följa det för mycket ansträngning .. Förklara vad ' är problemet själv så att vi bara kan förstå det från frågan. Ta en kort Tour och besök Hjälpcenter för att få en uppfattning om hur saker och ting fungerar här.
  • @Ingo I ' Jag har verkligen försökt att göra det, jag uttryckte de fel jag får och Jag sammanfattade inlägget som jag länkade till och sa vad som är relevant från det. Jag lägger också koden från biblioteket jag länkade till i det här inlägget. Jag tror verkligen att allt är i det här inlägget – kan du vara mer specifik om vad jag kunde ' har gjort annorlunda?
  • @ tlfong01 Ja, jag vet att felet är från pythonkoden i biblioteket. Jag använder bara python i det här projektet. Jag försökte skriva ut informationen som get_status-metoden behöver returnera, men då ger utskriftsuttalandet samma fel; Dålig filbeskrivare. Var kan jag hitta mer information om spidev.xfer2? Spidev-biblioteket jag har är github.com/Gadgetoid/py-spidev och jag vet inte ' vad jag ska leta efter i det här biblioteket för att lösa problemet.
  • Jag testade SPI loopback-testet från bilaga E till det inlägg du länkade. Jag får alla nollor. Jag ' är inte säker på vad jag ska få. Ska MOSI anslutas till MISO? Jag använder recv.py-programmet.
  • Jag ' har tittat på PyPi spidev-manualen (även om jag använder Gadgetoid ' s py-spidev, enligt handledningen). Jag kan ' inte ta reda på vad spidev.xfer2 ska returnera. NRF24.NOP-värdet är bara 0xFF. Om jag försöker skriva ut (self.spidev.xfer2 ([NRF24.NOP])) (dvs utan accessorn för att hämta 0-elementet) skriver utskriften ingenting, och felet kastas fortfarande av detta utskriftsuttalande, inte retursedeln som följer.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *