Jeg bruger BLavery “s lib_nrf24-bibliotek med et nRF24L01-modul på min pi, der kører Octopi (det er stort set rasppian til formålene her, AFAIK – her er resultatet af os-release-kommandoen).
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"
Jeg er i stand til at indstille radioen i henhold til denne tutorial , men koden, der venter på, at radioen skal modtage data;
while not radio.available(0): time.sleep(1/100)
kaster en OSError (errno 9) Dårlig filbeskrivelse. Her er den fulde fejlsporing:
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
Jeg fandt dette stackoverflow-indlæg om, hvad OSError er og betyder, men jeg er ikke sikker på, hvordan dette kan hjælpe mig med at finde ud af, hvad der foregår i lib_nrf24-biblioteket, og hvordan jeg får det til at fungere, så radioen opfører sig normalt.
Indlægget siger, at dette fejl kan kastes, hvis en fil åbnes og lukkes et andet sted, så det aktuelle miljø mener, at den stadig er åben, og kaster denne fejl, når den forsøger at lukke filen. Den implicerende kode i biblioteket er bare en returerklæring;
def get_status(self): return self.spidev.xfer2([NRF24.NOP])[0]
Og jeg lærer ikke noget mere af at se på den tilgængelige metode, der kalder get_status
def available(self, pipe_num=None): if not pipe_num: pipe_num = [] status = self.get_status() result = False ...
Jeg har søgt efter indlæg, der nævner både lib_nrf24-biblioteket og ethvert af “OSError” “errno 9” eller “Bad file descriptor” og kommer med nul hits til skæringspunktet mellem disse to udgaver.
Jeg er klar over på lib_nrf24 github-siden, at der står lib rary er ude af støtte fra maj 2018. Har jeg held og lykke? Jeg kunne ikke finde et nyere python-bibliotek til disse rf-moduler. Den eneste anden tilgang, jeg har set, er at finde ud af, hvordan man bruger c ++ boost-bibliotekerne til at bruge tmrh20-biblioteket … men jeg har set på det og kunne ikke finde ud af det.
Kommentarer
- Don ' t præsenterer kun links for at forstå dit problem. De fleste af os vil ikke følge det på grund af meget indsats .. Forklar hvad ' selv er problemet så vi kun kan forstå det ud fra spørgsmålet. Tag den korte Tour og besøg Hjælp for at få en idé om, hvordan ting fungerer her.
- @Ingo I ' Jeg har virkelig forsøgt at gøre det, jeg udtrykte udtrykkeligt de fejl, jeg får, og Jeg opsummerede det indlæg, jeg linkede til, og sagde, hvad der er relevant fra det. Jeg lagde også koden fra biblioteket, jeg linkede til, i dette indlæg. Jeg tror virkelig, at alt er i dette indlæg – kan du være mere specifik om, hvad jeg kunne ' har gjort anderledes?
- @ tlfong01 Ja, jeg ved, at fejlen er fra pythonkoden i biblioteket. Jeg bruger kun python i dette projekt. Jeg forsøgte at udskrive de oplysninger, som get_status-metoden skal returnere, men så kaster udskriftserklæringen den samme fejl; Dårlig filbeskrivelse. Hvor kan jeg finde mere information om spidev.xfer2? Spidev-biblioteket, jeg har, er github.com/Gadgetoid/py-spidev, og jeg ved ikke ' hvad jeg skal se efter i dette bibliotek for at løse dette problem.
- Jeg prøvede SPI loopback-testen fra bilag E til det indlæg, du linkede. Jeg får alle nuller. Jeg ' er ikke sikker på, hvad jeg skal få. Skal MOSI forbindes til MISO? Jeg bruger programmet recv.py.
- Jeg ' har kigget på PyPi spidev-manualen (selvom jeg bruger Gadgetoid ' s py-spidev, som i vejledningen). Jeg kan ' ikke finde ud af, hvad spidev.xfer2 skal returnere. NRF24.NOP-værdien er kun 0xFF. Hvis jeg forsøger at udskrive (self.spidev.xfer2 ([NRF24.NOP])) (dvs. uden accessoren for at få 0-elementet) udskriver outputtet intet, og fejlen kastes stadig af denne udskrivningserklæring, ikke retursætningen der følger.