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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

8454閲覧

pythonでThreadingを使ってナンバリング設定がうまくいきません。

surarinmon

総合スコア20

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/07 03:20

編集2018/11/07 12:48

pythonに詳しい方に質問です。
写真を撮る瞬間にLEDで点灯するために、LEDを光らせて、写真を撮るという二つを並行して行おうとしてるのですがナンバリング設定をしてくださいとエラーが出ます。

初心者ですので変なミスかもしれないんですが、助言をお願いします。
以下プログラムです。

import time import picamera import datetime import RPi.GPIO as GPIO import threading USER_NAME = "pi/"; HOME_DIR = "/home/" + USER_NAME SAVE_DIR = HOME_DIR + "cameradata/"; datetime = datetime.datetime.today() datetime_formatted = datetime.strftime("%Y%m%d%H%M%S") file_name ="IMG_" datetime_formatted".jpg" def camera(): with picamera.PiCamera() as camera: camera.start_preview() time.sleep(2) camera.capture(SAVE_DIR file_name) camera.stop_preview() def LED(): GPIO.setmode(GPIO.BOARD) GPIO.setup(11,GPIO.OUT) for i in range(1): GPIO.output(11,GPIO.HIGH) time.sleep(2) GPIO.output(11,GPIO.LOW) time.sleep(2) if __name__ == "__main__": p1 = threading.Thread(target = camera) p2 = threading.Thread(target = LED) p1.start() p2.start() GPIO.cleanup()

以下が表示されるエラーです。
Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 754, in run
self.__target(*self.__args, **self.__kwargs)
File "camera3.py", line 38, in LED
GPIO.output(11,GPIO.LOW)
RuntimeError: Please set pin numbering mode using GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)

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

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

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

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

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

surarinmon

2018/11/07 05:44

申し訳ありません、修正しました。
can110

2018/11/07 06:08

「'」が「&quot」に、またインデントもなくなっています。実行できるコードに修正ください。
surarinmon

2018/11/07 06:15

おそらく修正できたと思います、申し訳ありません
can110

2018/11/07 06:19

修正ありがとうございます。しかしfor i in range(1):のあとの文がインデントされていないので実行できないはずです。本当にそのコードは実際のコードでしょうか?
surarinmon

2018/11/07 06:21

ラズベリーパイを使って行っているのを別のパソコンにコピーしたものです、誤字が多くて申し訳ないです。
guest

回答2

0

ベストアンサー

スレッドが実行中なのにメインスレッドでGPIO.cleanupを呼び出しているからです。
GPIO.cleanupをLED関数の最後で呼ぶようにしてみてください。
それから、LEDスレッドかcameraスレッドはメインスレッド上での実行でも問題ないと思います。

投稿2018/11/08 03:54

編集2018/11/08 03:57
frodo821

総合スコア322

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

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

0

もしかして以下のようなインデントになっていませんか?

Python

1# 略 2 3def LED(): 4 print('GPIO.setmode(GPIO.BOARD)') # 確認! 5 GPIO.setmode(GPIO.BOARD) 6 GPIO.setup(11,GPIO.OUT) 7 for i in range(1): 8 print('GPIO.output(11,GPIO.HIGH)') # 確認! 9 GPIO.output(11,GPIO.HIGH) 10 time.sleep(2) 11print('GPIO.output(11,GPIO.LOW)') # 確認! 12GPIO.output(11,GPIO.LOW) # ここ! 13time.sleep(2) 14 15# 略

であればGPIO.setmode(GPIO.BOARD)が呼ばれる前にGPIO.output(11,GPIO.LOW)が実行されてしまいます。
print文を間に入れて、処理の流れを確認ください。
またインデントの空白の数は4つでも2つでもどちらでもかまいません。

投稿2018/11/07 06:14

編集2018/11/07 06:24
can110

総合スコア38262

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

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

surarinmon

2018/11/07 06:16

インデントはそのようにずれてなかったです...
can110

2018/11/07 06:20

つまりGPIO.output(11,GPIO.LOW)の前に確実にGPIO.setmode(GPIO.BOARD)が実行されているということでしょうか? よく分からない場合は、間にprint関数を入れて実際の動作の流れを確認ください。
surarinmon

2018/11/07 06:25

なるほど、そのようにすれば確かめられるのですね...ありがとうございますやってみます。
surarinmon

2018/11/07 06:32

GPIO.output(11,GPIO.HIGH)の下のprint関数は動作しましたが、GPIO.output(11,GPIO.LOW)の下のprint関数は動作しませんでした。
can110

2018/11/07 06:35

つまり意図していない処理の流れになっているようですね。 インデントなど間違っていないかよく確認し、コード修正する必要があります。具体的にどこが間違っているかは実際のコードが見れないのでこちらではこれ以上は分かりかねますが。。。 あるいはイチから書き直した方が早いかもしれません。
surarinmon

2018/11/07 07:23

わかりました、丁寧にありがとうございます頑張ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問