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"
Puedo configurar la radio de acuerdo con este tutorial , pero el código que espera a que la radio recibir datos;
while not radio.available(0): time.sleep(1/100)
arroja un OSError (errno 9) Descriptor de archivo incorrecto. Aquí está el rastreo completo del error:
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
Encontré esta publicación de stackoverflow sobre lo que OSError es y significa, pero no estoy seguro de cómo esto me ayudaría a averiguar qué está pasando en la biblioteca lib_nrf24, y cómo hacer que funcione para que la radio se comporte normalmente.
La publicación dice que esto se puede generar un error si se abre un archivo y se cierra en otro lugar para que el entorno actual crea que todavía está abierto y arroja este error cuando intenta cerrar el archivo. El código implicado en la biblioteca es solo una declaración de retorno;
def get_status(self): return self.spidev.xfer2([NRF24.NOP])[0]
Y no estoy aprendiendo nada más mirando el método disponible que llama a get_status
def available(self, pipe_num=None): if not pipe_num: pipe_num = [] status = self.get_status() result = False ...
He buscado publicaciones que mencionen tanto la biblioteca lib_nrf24 como «OSError», «errno 9» o «Descriptor de archivo incorrecto» y no encontré ningún resultado para la intersección de estos dos problemas.
Me doy cuenta de que en la página de github lib_nrf24 dice lib rary no tiene soporte en mayo de 2018. ¿No tengo suerte? No pude encontrar una biblioteca de Python más reciente para estos módulos de RF. El único otro enfoque que he visto es averiguar cómo usar las bibliotecas de refuerzo de C ++ para usar la biblioteca tmrh20 … pero lo he visto y no he podido entenderlo.
Comentarios
- Por favor, no ' t presente solo enlaces para comprender su problema. La mayoría de nosotros no lo seguiremos porque nos esforzamos mucho. Explique cuál ' es el problema usted mismo para que solo podamos entenderlo a partir de la pregunta. Realice el breve Tour y visite el Centro de ayuda para tener una idea de cómo funcionan las cosas aquí.
- @Ingo I ' realmente he intentado hacer eso, indiqué explícitamente los errores que obtengo y Resumí la publicación a la que vinculé, diciendo lo que es relevante de ella. También puse el código de la biblioteca que vinculé en esta publicación. en esta publicación, ¿puede ser más específico acerca de lo que podría ' haber hecho de manera diferente?
- @ tlfong01 Sí, sé que el error proviene del código de Python en la biblioteca. Solo estoy usando Python en este proyecto. Intenté imprimir la información que el método get_status necesita devolver, pero luego la declaración de impresión arroja el mismo error; Descriptor de archivo incorrecto. ¿Dónde puedo encontrar más información sobre spidev.xfer2? La biblioteca de spidev que tengo es github.com/Gadgetoid/py-spidev y no ' no sé qué debo buscar en esta biblioteca para resolver este problema.
- Probé la prueba de bucle invertido SPI del Apéndice E de la publicación que vinculó. Recibo todos los ceros. ' no estoy seguro de lo que debería recibir. ¿Debe MOSI estar conectado a MISO? Estoy usando el programa recv.py.
- Yo ' he consultado el manual de PyPi spidev (aunque estoy usando Gadgetoid ' s py-spidev, según el tutorial). No puedo ' averiguar qué se supone que devuelve spidev.xfer2. El valor NRF24.NOP es solo 0xFF. Si intento imprimir (self.spidev.xfer2 ([NRF24.NOP])) (es decir, sin el descriptor de acceso para obtener el elemento 0), la salida no imprime nada y el error sigue apareciendo en esta declaración de impresión, no en la declaración de devolución. que sigue.