A lib_nrf24 dobja az OSError hibát (9. hiba) Rossz fájlleíró a rádión. elérhető (0)

BLavery lib_nrf24 könyvtára egy nRF24L01 modullal az oktopit futtató pi-n (ez itt nagyjából rasbpian, AFAIK – itt az os-release parancs eredménye).

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" 

Be tudom állítani a rádiót ennek az útmutatónak megfelelően, de a rádiót megváró kód szerint adatok fogadása;

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

OSError-t dob (9. hiba) Rossz fájlleíró. Itt van a teljes hibaelhárítás:

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 

ezt a stackoverflow bejegyzést találtam arról, hogy mi az OSError és azt jelenti, de nem vagyok biztos benne, hogy ez hogyan segítene rájönni, mi folyik a lib_nrf24 könyvtárban, és hogyan lehetne úgy működtetni, hogy a rádió normálisan viselkedjen.

A bejegyzés szerint ez hibát lehet dobni, ha egy fájlt megnyitnak, és bezárnak máshova, így a jelenlegi környezet azt hiszi, hogy még mindig nyitva van, és ezt a hibát dobja, amikor megpróbálja bezárni a fájlt. A könyvtár kódoló kódja csak visszatérési utasítás;

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

És nem tanulok többet abból, ha megnézem az elérhető módszert, amely hívja a get_status

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

Olyan bejegyzések után kutattam, amelyek mind a lib_nrf24 könyvtárat, mind az “OSError” “errno 9” vagy “Bad file descriptor” -t megemlítik, és nulla találatot találtam e két kérdés metszéspontjára.

Tudom, hogy a lib_nrf24 github oldalon azt mondja, hogy a lib A rary 2018. májusától már nem támogatott. Nincs szerencsém? Nem találtam egy újabb python könyvtárat ezekhez az rf modulokhoz. Az egyetlen másik megközelítés, amelyet láttam, az az, hogy kitaláljuk, hogyan használhatom a c ++ boost könyvtárakat a tmrh20 könyvtár használatára … de ezt megnéztem és nem tudtam rájönni.

Megjegyzések

  • Kérjük, ne ' csak linkeket mutat be a probléma megértéséhez. Legtöbben nem fogjuk követni, mert sok erőfeszítésre van szükség. Magyarázza el, mi ' maga a problémát így csak a kérdésből tudjuk megérteni. Kérjük, tegyen egy rövid túrát , és keresse fel a Súgót , hogy képet kapjak arról, hogyan működnek itt a dolgok.
  • @Ingo I ' ezt valóban megpróbáltam megtenni, kifejezetten kimondtam a kapott hibákat, és Összefoglaltam azt a bejegyzést, amelyhez linkeltem, mondván, mi a lényeges tőle. Ebben a bejegyzésben is feltettem az általam linkelt könyvtár kódját. ebben a bejegyzésben – tudsz pontosabban elmondani, mit tudnék ' másképp csinálni?
  • @ tlfong01 Igen, tudom, hogy a hiba a A könyvtár. Csak a Python-ot használom ebben a projektben. Megpróbáltam kinyomtatni azokat az információkat, amelyeknek a get_status metódusnak vissza kell térnie, de a nyomtatási utasítás ugyanazt a hibát dobja; Rossz fájlleíró. Hol találhatok további információt a spidev.xfer2 fájlról? A rendelkezésemre álló spidev könyvtár a github.com/Gadgetoid/py-spidev, és nem tudom, hogy ' mit kell keresnem ebben a könyvtárban a probléma megoldásához.
  • Kipróbáltam az SPI loopback tesztet az Ön által összekapcsolt bejegyzés E. függelékéből. Megkapom az összes nullát. ' nem vagyok biztos benne, mit kellene kapnom. Csatlakoztatnia kell a MOSI-t a MISO-hoz? A recv.py programot használom.
  • Megnéztem a PyPi spidev kézikönyvet (bár a Gadgetoid ' s py-spidev, az oktatóanyagnak megfelelően). Nem tudom megtudni ', hogy a spidev.xfer2 mit kell visszaadnia. Az NRF24.NOP értéke csak 0xFF. Ha megpróbálom kinyomtatni (self.spidev.xfer2 ([NRF24.NOP])) (azaz anélkül, hogy az accessor megkapná a 0 elemet), a kimenet nem nyomtat semmit, és a hibát továbbra is ez a nyomtatási utasítás dobja, nem a return utasítás ez következik.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük