Estou usando Biblioteca lib_nrf24 do BLavery com um módulo nRF24L01 no meu pi rodando Octopi (é muito rasbpian para os propósitos aqui, AFAIK – aqui está o resultado do comando 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"
Eu sou capaz de configurar o rádio de acordo com este tutorial , mas o código que aguarda o rádio para receber dados;
while not radio.available(0): time.sleep(1/100)
lança um OSError (errno 9) Descritor de arquivo inválido. Aqui está o rastreamento completo do erro:
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
Eu encontrei esta postagem stackoverflow sobre o OSError é e significa, mas não tenho certeza de como isso me ajudaria a descobrir o que está acontecendo na biblioteca lib_nrf24 e como fazê-la funcionar para que o rádio se comporte normalmente.
A postagem diz que isso pode ser gerado um erro se um arquivo for aberto e fechado em outro lugar, de modo que o ambiente atual pense que ainda está aberto e emita esse erro quando tentar fechar o arquivo. O código implicante na biblioteca é apenas uma instrução de retorno;
def get_status(self): return self.spidev.xfer2([NRF24.NOP])[0]
E não estou aprendendo mais nada olhando para o método disponível que chama get_status
def available(self, pipe_num=None): if not pipe_num: pipe_num = [] status = self.get_status() result = False ...
Eu pesquisei qualquer postagem que mencionasse a biblioteca lib_nrf24 e qualquer “OSError” “errno 9” ou “Descritor de arquivo inválido” e não encontrei nenhuma ocorrência para a interseção desses dois problemas.
Percebi que na página lib_nrf24 do github está escrito lib rary está sem suporte desde maio de 2018. Estou sem sorte? Não consegui encontrar uma biblioteca python mais recente para esses módulos rf. A única outra abordagem que vi é descobrir como usar as bibliotecas boost c ++ para usar a biblioteca tmrh20 … mas eu olhei para isso e não consegui descobrir.
Comentários
- Por favor, não ' apresente apenas links para entender o seu problema. A maioria de nós não seguirá porque faz muito esforço. Explique qual ' é o problema sozinho para que possamos entender apenas pela pergunta. Faça o breve Tour e visite a Central de Ajuda para ter uma ideia de como as coisas funcionam aqui.
- @Ingo I ' eu realmente tentei fazer isso, declarei explicitamente os erros que estou recebendo e Resumi o post ao qual criei um link, dizendo o que é relevante nele. Coloquei o código da biblioteca que criei um link neste post também. Realmente acho que está tudo neste post – você pode ser mais específico sobre o que eu poderia ' ter feito de forma diferente?
- @ tlfong01 Sim, eu sei que o erro é do código python em a biblioteca. Estou usando apenas python neste projeto. Tentei imprimir as informações que o método get_status precisa retornar, mas a instrução print gerou o mesmo erro; Descritor de arquivo incorreto. Onde posso encontrar mais informações sobre spidev.xfer2? A biblioteca spidev que possuo é github.com/Gadgetoid/py-spidev, e eu não ' não sei o que devo procurar nesta biblioteca para resolver esse problema.
- Tentei o teste de loopback SPI do Apêndice E do post que você vinculou. Recebo todos os zeros. Eu ' não tenho certeza do que devo receber. O MOSI deve ser conectado ao MISO? Estou usando o programa recv.py.
- Eu ' vi o manual do PyPi spidev (embora esteja usando o Gadgetoid ' s py-spidev, conforme o tutorial). Não consigo ' não descobrir o que spidev.xfer2 deve retornar. O valor NRF24.NOP é apenas 0xFF. Se eu tentar imprimir (self.spidev.xfer2 ([NRF24.NOP])) (ou seja, sem o acessador para obter o elemento 0), a saída não imprime nada e o erro ainda é gerado por esta instrução de impressão, não a instrução de retorno que se segue.