Používám Knihovna BLavery lib_nrf24 s modulem nRF24L01 na mém pi se systémem Octopi (pro účely zde je to docela rasbpické, AFAIK – zde je výsledek příkazu 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"
Rádio mohu nastavit podle tohoto tutoriálu , ale kódu, který čeká na rádio přijímat data;
while not radio.available(0): time.sleep(1/100)
vyvolá chybný deskriptor souboru OSError (errno 9). Zde je úplné zpětné sledování chyb:
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
Našel jsem tento příspěvek stackoverflow o tom, co OSError je a znamená, ale nejsem si jistý, jak by mi to pomohlo zjistit, co se děje v knihovně lib_nrf24, a jak to zajistit, aby se rádio chovalo normálně.
Příspěvek říká, že toto Chyba může být vyvolána, pokud je soubor otevřen a uzavřen jinde, takže si aktuální prostředí myslí, že je stále otevřený, a při pokusu o zavření souboru vyvolá tuto chybu. Implicitní kód v knihovně je jen návratový příkaz;
def get_status(self): return self.spidev.xfer2([NRF24.NOP])[0]
A nedozvídám se nic jiného, když se podívám na dostupnou metodu, která volá get_status
def available(self, pipe_num=None): if not pipe_num: pipe_num = [] status = self.get_status() result = False ...
Hledal jsem všechny příspěvky, které zmiňují jak knihovnu lib_nrf24, tak některý z „OSError“, „errno 9“ nebo „Bad deskriptor souboru“, a pro průnik těchto dvou problémů nenajdu žádné zásahy.
Uvědomuji si, že na stránce lib_nrf24 github je napsáno lib rary je od května 2018 mimo podporu. Mám smůlu? Nemohl jsem najít novější knihovnu pythonu pro tyto RF moduly. Jediným dalším přístupem, který jsem viděl, je zjistit, jak používat knihovny C ++ boost k použití knihovny tmrh20 … ale já jsem se na to podíval a nemohl jsem na to přijít.
Komentáře
- Prosím, ' neposkytujeme pouze odkazy, které by váš problém pochopily. Většina z nás jej nebude následovat, protože vynaloží velké úsilí .. Vysvětlete, v čem je ' problém sám abychom tomu porozuměli pouze z otázky. Vyplňte krátkou prohlídku a navštivte centrum nápovědy získat představu o tom, jak to tady funguje.
- @Ingo I ' jsem se o to opravdu pokusil, výslovně jsem uvedl chyby, které dostávám, a Shrnul jsem příspěvek, na který jsem odkazoval, s tím, co je od něj relevantní. Vložil jsem také kód z knihovny, na kterou jsem odkazoval. Opravdu si myslím, že všechno je v tomto příspěvku – můžete být konkrétnější o tom, co bych mohl ' udělat jinak?
- @ tlfong01 Ano, vím, že chyba je z kódu pythonu v Knihovna. V tomto projektu používám pouze python. Snažil jsem se vytisknout informace, které musí metoda get_status vrátit, ale pak příkaz print vyvolá stejnou chybu; Špatný deskriptor souboru. Kde najdu více informací o spidev.xfer2? Knihovna spidev, kterou mám, je github.com/Gadgetoid/py-spidev a já ' nevím, co bych měl v této knihovně hledat, abych tento problém vyřešil.
- Zkoušel jsem test zpětné vazby SPI z přílohy E příspěvku, který jste propojili. Mám všechny nuly. ' si nejsem jistý, co bych měl dostávat. Měl by být MOSI připojen k MISO? Používám program recv.py.
- Podíval jsem se
do příručky PyPi spidev (i když používám Gadgetoid ' s py-spidev, podle tutoriálu). Nemohu ' zjistit, co má spidev.xfer2 vrátit. Hodnota NRF24.NOP je pouze 0xFF. Pokud se pokusím vytisknout (self.spidev.xfer2 ([NRF24.NOP])) (tj. Bez přístupového prvku k získání prvku 0), výstup nevytiskne nic a chyba je stále vyvolána tímto tiskovým příkazem, nikoli návratovým příkazem to následuje.