のファイル記述子が正しくありませんオクトピを実行している私のpiにnRF24L01モジュールを備えたBLaveryのlib_nrf24ライブラリ(ここでは、AFAIKの目的のためにかなりrasbpianです-これは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"
このチュートリアルに従って無線をセットアップできますが、無線を待機するコードはデータを受信します;
while not radio.available(0): time.sleep(1/100)
OSError(errno 9)不正なファイル記述子をスローします。完全なエラートレースバックは次のとおりです。
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
このスタックオーバーフローの投稿がOSErrorについて見つかりましたとは意味しますが、これがlib_nrf24ライブラリで何が起こっているのか、そしてラジオが正常に動作するようにそれを機能させる方法を理解するのにどのように役立つのかわかりません。
投稿によるとファイルが開かれ、他の場所で閉じられるとエラーがスローされる可能性があるため、現在の環境ではファイルがまだ開いていると見なされ、ファイルを閉じようとするとこのエラーがスローされます。ライブラリ内の関連コードは単なるreturnステートメントです。
def get_status(self): return self.spidev.xfer2([NRF24.NOP])[0]
そして、get_statusを呼び出す利用可能なメソッドを見ても何も学んでいません
def available(self, pipe_num=None): if not pipe_num: pipe_num = [] status = self.get_status() result = False ...
lib_nrf24ライブラリと「OSError」「errno9」または「Badfiledescriptor」の両方に言及している投稿を検索しました。これら2つの問題の共通部分のヒットはゼロです。
lib_nrf24 githubページで、libと表示されていることに気付きましたraryは2018年5月の時点でサポートされていません。私は運が悪いですか?これらのrfモジュール用の最新のPythonライブラリは見つかりませんでした。私が見た他の唯一のアプローチは、c ++ブーストライブラリを使用して tmrh20ライブラリを使用する方法を理解することです。 …しかし、私はそれを見て理解できませんでした。
コメント
- しないでください'問題を理解するためのリンクのみを表示します。多くの努力が必要なため、ほとんどの人はそれに従いません。'問題の内容を自分で説明してください。質問からのみ理解できるように、短いツアーに参加して、ヘルプセンター aにアクセスしてください。 a>ここで物事がどのように機能するかを理解するために。
- @Ingo I '実際にそれを試みましたが、発生したエラーを明示的に述べました。リンクした投稿を要約して、そこに関連するものを述べました。リンクしたライブラリのコードもこの投稿に入れました。本当にすべてがこの投稿では、'別の方法で何ができたかについて具体的に教えてください。
- @ tlfong01はい、エラーはのPythonコードによるものです。図書館。このプロジェクトではPythonのみを使用しています。 get_statusメソッドが返す必要のある情報を出力しようとしましたが、printステートメントは同じエラーをスローします。不正なファイル記述子。 spidev.xfer2に関する詳細情報はどこにありますか?私が持っているspidevライブラリはgithub.com/Gadgetoid/py-spidevであり、'この問題を解決するためにこのライブラリで何を探すべきかわかりません。
- リンクした投稿の付録EからSPIループバックテストを試しました。私はすべてゼロを取得します。 '何を取得すべきかわかりません。 MOSIをMISOに接続する必要がありますか?私はrecv.pyプログラムを使用しています。
- ' PyPi spidevのマニュアルを調べました(Gadgetoid ' s py-spidev、チュートリアルによる)。 ' spidev.xfer2が何を返すのかわかりません。 NRF24.NOP値は0xFFです。 (self.spidev.xfer2([NRF24.NOP]))を出力しようとすると(つまり、0要素を取得するためのアクセサーがない場合)、出力は何も出力せず、returnステートメントではなくこのprintステートメントによってエラーがスローされます。