質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

2回答

16120閲覧

gpioが使われているというエラーがラズベリーパイで出ます

masi

総合スコア13

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/02/09 08:20

編集2019/02/09 09:52

gpioが使われているエラーが出ます

ラズベリーパイ初心者で画像認識、QRコード読み取り、モーター起動のプログラミングを作っている高1です。知識がない為教えてくださると幸いです。

発生している問題・エラーコード

Warning (From warnings module): File/home/pi/Desktop/qrswitch2. py", line 13 GPI0. setup (8, GPIO.OUT) RuntimeWarning: This channe l is already in use, continuing anyway. Use GPIO, set warnings (False) to disable warnings. Warning (from warnings modu le) File/home/pi/Desk top/qrswitch2. py", line 14 GP 10. setup (24, GP10,OUT) RuntimeWarning: This channel is already in use, cont inuing anyway. Use GPIO, set warnings (False) to disable warnings True Ln: 43 Col: 0 SHARP

該当のソースコード

import sys sys. path. append(' /usr/local/lib/python2. 7/dist-packages') from pyzbar.pyzbar import decode from pyzbar.pyzbar import ZBarSymbol from tkinter import messagebox import cv2 import numpy as np import RPi. GPIO as GPIO import time GPIO. setmode (GPIO. BCM) GPIO. setup (8, GPIO. OUT) GPIO. setup (24, GPIO. OUT) def edit_contrast (image, gamma): ''''''コントラクト調整'''''' look-up-table: [np. uint8(255,0 / (1 + np.exp(-gamma * (i - 128.) / 255.))) for i in range (256)] result image =np. array ([ look_up_table[value] for value in image. flat], dtype=np. uint8) result image =result image. reshape(image. shape) return result image try: if _ name_==''_main_ '': capture = cv2. VideoCapture(0) print (capture. is0pened()) if capture. is0pened() is False: raise (''I0 Error") while True: ret, frame = capture.read() # messagebox. showinfo('' main '',''2'') if ret == False: # messagebox, showinfo('' main '',"2") continue #グレースケール化してコントラクトを調整する gray scale = cv2.cvtColor(frame, cv2. COLOR BGR2GRAY) image=edit contrast (gray scale, 5) #加工した画像からフレームQRコードを取得してデコードする codes=decode (image) if len(codes) > 0: for code in codes print(code) print(code[0]. decode (' utf-8', ' ignore')) GPIO. output (8, GPIO. HIGH) time. sleep (10) GPIO. output (8, GPIO. LOW) time. sleep (60) GPIO. cleanup() except ValueError as e: print (e) GPIO. cleanup () except: import traceback traceback. print exc() GPIO.cleanup

試したこと

学校の先生やプログラミングに詳しい方に聞いてもわからないと言われてしまったので、お願いします。
明日発表で本当に困っています。
お願いします…

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/02/09 09:13

このままではコードが見づらいので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
masi

2019/02/09 09:20

修正しました、よろしくお願いします
matsuand

2019/02/09 09:30

gpio を全く承知していませんが、例えば "This channe l is already in use" を検索キーワードにすればいくらかヒットします。GPIO.cleanup() が適切でないために警告メッセージが発生するようです。そもそも警告メッセージなのですが、何か支障があるのでしょうか? cleanup() の書き方についても、(1) GPIO.cleanup()、(2) GPIO cleanup() (ピリオドなし空白)、(3) GPIO,cleanup() (ピリオドなしカンマ)と3通りを書かれています。これはこれで上手く動作しないのでは?
masi

2019/02/09 09:54

全てgpio.cleanupです。 誤字訂正しました。 ありがとうございます。
guest

回答2

0

ベストアンサー

masiさん、

This channel is already in use, ~ というワーニングですが、ほかにGPIOを操作するプログラムを使っていなければ、とりあえず、無視しても動作すると思います。(すでにGPIOが使われているようだけど、設定を上書きするよ、みたいな警告)

GPIO.setup(~~~) で、GPIOを使用したあとに、GPIO.cleanup()を実行しないで抜けると、次のGPIO.setup時に警告が出ると思います。

表示が気になるなら、GPIO.setwarnings(False)を追加で表示されなくなります。

import RPi.GPIO as GPIO GPIO.setwarnings(False) # <<== 追加 GPIO.setmode(GPIO.BCM)

ところで、上にあげられてるコードの最後の行のGPIO.cleanup()括弧がついてませんが、ついてないと、うまく処理されません。

ちなみに、実際に表示してるのは、このあたりで、
https://sourceforge.net/p/raspberry-gpio-python/code/ci/default/tree/source/py_gpio.c#l209

gpio_function()で、現在のGPIOの設定値(0=input, 1=output, 4=alt0)をハードウェアレジスタから読み出して、現在ラズパイの設定が、実行されているプログラムから行われていない(と考えられる)場合、警告を表示しているようです。

... func = gpio_function(gpio); if (gpio_warnings && // warnings enabled and ((func != 0 && func != 1) || // (already one of the alt functions or # alt設定になっている(Inputでも、Outputでもない) (gpio_direction[gpio] == -1 && func == 1))) // already an output not set from this program) # Output設定だが、このプログラムから行われていない { PyErr_WarnEx(NULL, "This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.", 1); } ...

発表が無事終わったら、ソースを追ってみるのも面白いかと思いますよ。
(PythonのRPi.GPIOの実体は、C言語で処理されてます)

投稿2019/02/09 22:38

編集2019/02/09 22:45
mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

参考情報

  • Raspberry PiでPythonのRPi.GPIOを使ってLチカする

https://qiita.com/masato/items/715e28e0c0c945a54297

...
RPi.GPIOのプログラムを実行するとThis channel is already in useの警告がでる場合があります。これは以前GPIO.setup()を実行してポートのセットアップをした後、クリアしていないときに発生します。
...
プログラムの最後にポートのクリアを行います。
GPIO.cleanup()
...

投稿2019/02/09 23:00

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問