lib_nrf24 zgłasza OSError (Errno 9) Zły deskryptor pliku w radio.available (0)

Używam Biblioteka BLavery s lib_nrf24 z modułem nRF24L01 na moim pi z systemem Octopi (do celów tutaj jest to raczej rasbpian, AFAIK – tutaj jest wynik polecenia 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" 

Mogę skonfigurować radio zgodnie z tym samouczkiem , ale kod, który czeka na odbierać dane;

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

generuje błąd OSError (errno 9) Zły deskryptor pliku. Oto pełne śledzenie błędów:

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 

Znalazłem ten post o przepływie stosu o tym, co OSError jest i oznacza, ale nie jestem pewien, jak to pomogłoby mi dowiedzieć się, co się dzieje w bibliotece lib_nrf24 i jak sprawić, by działała, aby radio zachowywało się normalnie.

Post mówi, że to błąd może zostać zgłoszony, jeśli plik zostanie otwarty i zamknięty w innym miejscu, więc bieżące środowisko uważa, że jest nadal otwarty, i zgłasza ten błąd, gdy próbuje zamknąć plik. Implikujący kod w bibliotece to po prostu instrukcja return;

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

A ja nie dowiem się niczego więcej, patrząc na dostępną metodę, która wywołuje get_status

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

Szukałem jakichkolwiek postów, które wspominały zarówno o bibliotece lib_nrf24, jak i dowolnym z „OSError”, „errno 9” lub „Bad file descriptor”, i otrzymałem zero trafień dla przecięcia tych dwóch problemów.

Zdaję sobie sprawę, że na stronie github lib_nrf24 jest napisane lib rary nie jest obsługiwane w maju 2018 r. Czy nie mam szczęścia? Nie mogłem znaleźć nowszej biblioteki Pythona dla tych modułów rf. Jedyne inne podejście, jakie widziałem, to dowiedzieć się, jak używać bibliotek c ++ boost do korzystania z biblioteki tmrh20 … ale patrzyłem na to i nie mogłem tego rozgryźć.

Komentarze

  • Proszę nie ' nie prezentuj tylko linków, aby zrozumieć Twój problem. Większość z nas nie podąży za nim z powodu dużego wysiłku .. Wyjaśnij samodzielnie ' problem więc możemy to zrozumieć tylko na podstawie pytania. Weź udział w krótkiej prezentacji i odwiedź Centrum pomocy aby dowiedzieć się, jak to działa.
  • @Ingo I ' naprawdę próbowałem to zrobić, wyraźnie wskazałem błędy, które otrzymuję, i Podsumowałem post, do którego umieściłem link, mówiąc, co jest z niego istotne. W tym poście umieściłem również kod z biblioteki, do której dołączyłem. Naprawdę myślę, że wszystko jest w tym poście – czy możesz bardziej precyzyjnie określić, co mogłem ' zrobić inaczej?
  • @ tlfong01 Tak, wiem, że błąd pochodzi z kodu Pythona w Biblioteka. W tym projekcie używam tylko Pythona. Próbowałem wydrukować informacje, które metoda get_status musi zwrócić, ale wtedy instrukcja print zgłasza ten sam błąd; Zły deskryptor pliku. Gdzie mogę znaleźć więcej informacji na temat spidev.xfer2? Biblioteka spidev, którą mam, to github.com/Gadgetoid/py-spidev i nie ' nie wiem, czego powinienem szukać w tej bibliotece, aby rozwiązać ten problem.
  • Wypróbowałem test sprzężenia zwrotnego SPI z dodatku E do posta, do którego utworzyłeś link. Mam wszystkie zera. ' Nie wiem, co powinienem otrzymać. Czy MOSI powinien być podłączony do MISO? Używam programu recv.py.
  • ' zajrzałem do podręcznika PyPi spidev (chociaż używam Gadgetoid ' s py-spidev, zgodnie z tutorialem). Nie mogę ' dowiedzieć się, co ma zwrócić plik spidev.xfer2. Wartość NRF24.NOP to po prostu 0xFF. Jeśli spróbuję wydrukować (self.spidev.xfer2 ([NRF24.NOP])) (tj. Bez metody dostępu do elementu 0) wynik nie drukuje nic, a błąd jest nadal zgłaszany przez tę instrukcję print, a nie instrukcję return co następuje.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *