lib_nrf24 heittää OSError-virheen (Errno 9) Virheellinen tiedostokuvaaja radiossa. käytettävissä (0)

Käytän BLaveryn lib_nrf24-kirjasto nRF24L01-moduulilla pi-laitteessani, joka käyttää Octopia (se on melko rasbpian tässä tarkoituksessa, AFAIK – tässä on os-release -komennon tulos).

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" 

Voin asettaa radion tämän opetusohjelman , mutta koodin mukaan, joka odottaa radiota vastaanottaa tietoja;

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

heittää OSE-virheen (virhe 9) Virheellinen tiedostokuvaaja. Tässä on täysi virheen jäljitys:

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 

Löysin tämän pinoverflow-viestin mistä OSErrorista on ja tarkoittaa, mutta en ole varma, miten tämä auttaisi minua selvittämään, mitä lib_nrf24-kirjastossa tapahtuu, ja kuinka saada se toimimaan niin, että radio käyttäytyy normaalisti.

Viestissä sanotaan, että tämä virhe voidaan heittää, jos tiedosto avataan ja suljetaan muualla, joten nykyinen ympäristö luulee sen olevan edelleen auki, ja heittää tämän virheen, kun se yrittää sulkea tiedoston. Kirjaston implisiittinen koodi on vain palautuslauseke;

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

Enkä opi mitään enempää tarkastelemalla käytettävissä olevaa menetelmää, joka kutsuu get_status

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

Olen etsinyt viestejä, joissa mainitaan sekä lib_nrf24-kirjasto että kaikki OSError-tiedostot, ”errno 9” tai ”Bad file descriptor”, ja olen keksinyt nolla osumaa näiden kahden ongelman leikkauspisteeseen.

Ymmärrän, että lib_nrf24 github -sivulla sanotaan lib Rary on tuesta toukokuussa 2018. Olenko epäonninen? En voinut löytää uudempaa python-kirjastoa näille RF-moduuleille. Ainoa toinen lähestymistapa, jonka olen nähnyt, on selvittää, miten c ++ -korotuskirjastoja käytetään tmrh20-kirjaston käyttöön … mutta en ole sitä katsonut enkä pystynyt selvittämään sitä.

Kommentit

  • Älä ' älä esitä vain linkkejä ongelmasi ymmärtämiseen. Suurin osa meistä ei noudata sitä kovin vaivattomasti .. Selitä mikä ' s itse ongelman jotta voimme ymmärtää sen vain kysymyksestä. Käy lyhyellä kiertueella ja käy ohjekeskuksessa saadaksesi käsityksen siitä, miten asiat toimivat täällä.
  • @Ingo I ' olen todella yrittänyt tehdä sen, totesin nimenomaisesti saamani virheet, ja Yhteenveto linkitetystä viestistä sanomalla, mikä sillä on merkitystä. Laitoin linkitetyn kirjaston koodin myös tähän viestiin. Luulen, että kaikki on tässä viestissä – voitko tarkentaa, mitä voisin ' tehdä eri tavalla?
  • @ tlfong01 Kyllä, tiedän, että virhe johtuu python-koodista kirjasto. Käytän tässä projektissa vain pythonia. Yritin tulostaa tiedot, jotka get_status-menetelmän on palautettava, mutta sitten tulostuslauseke heittää saman virheen; Virheellinen tiedostokuvaaja. Mistä löydän lisätietoja spidev.xfer2-tiedostosta? Minulla on spidev-kirjasto github.com/Gadgetoid/py-spidev, enkä ' tiedä, mitä minun pitäisi etsiä tässä kirjastossa ongelman ratkaisemiseksi.
  • Yritin linkittämäsi viestin liitteestä E saatavaa SPI-silmukkatestiä. Saan kaikki nollat. ' En ole varma, mitä minun pitäisi saada. Pitäisikö MOSI yhdistää MISO: han? Käytän recv.py-ohjelmaa.
  • Olen ' tarkastellut PyPi spidev -käyttöohjelmaa (vaikka käytän Gadgetoid ' s py-spidev, kuten opetusohjelmassa). En voi ' selvittää, mitä spidev.xfer2: n on tarkoitus palata. NRF24.NOP-arvo on vain 0xFF. Jos yritän tulostaa (itse.spidev.xfer2 ([NRF24.NOP])) (ts. Ilman lisenssia 0-elementin saamiseksi), tulosteet eivät tulosta mitään, ja virhe johtuu edelleen tästä tuloslausekkeesta, ei palautuslausekkeesta se seuraa.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *