🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Raspberry Pi

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

Python

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

Q&A

解決済

1回答

1680閲覧

温度センサーで取得した値でヒーターをON/OFFする

Kaki_

総合スコア5

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Raspberry Pi

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

Python

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

0グッド

2クリップ

投稿2019/11/04 08:21

前提・実現したいこと

 0度を超えるとヒーターの電源が入るといったプログラムを作成しようとしています。
使用している、温度センサーは(DHT11)です。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "dht11_auto_heater.py", line 20, in <module> result = instance.read() File "/home/pi/DHT11_Python/dht11.py", line 34, in read RPi.GPIO.setup(self.__pin, RPi.GPIO.OUT) RuntimeError: Please set pin numbering mode using GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)

該当のソースコード

python

1import RPi.GPIO as GPIO 2import dht11 3import time 4import datetime 5import subprocess 6 7# initialize GPIO 8GPIO.setwarnings(False) 9GPIO.setmode(GPIO.BCM) 10GPIO.setup(17,GPIO.OUT) 11 12# read data using pin 14 13instance = dht11.DHT11(pin=14) 14HotTemp = 5 15ColdTemp = 0 16hubFlg = False 17sleepSecond = 6 18 19while True: 20 result = instance.read() 21 if result.is_valid(): 22 tmp = result.temperature 23 print(tmp) 24 if tmp == ColdTemp: 25 # Heater running 26 GPIO.output(17,1) 27 print("Heater ON") 28 sleepSecond = 60 29 print("missing") 30 elif tmp >= HotTemp: 31 # Heater stop 32 GPIO.output(17,0) 33 print("Heater OFF") 34 sleepSecond = 10 35 else : 36 time.sleep(sleepSecond) 37GPIO.cleanup()

試したこと

特になし

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

 Raspberry Pi

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

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

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

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

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

guest

回答1

0

ベストアンサー

起きたこと

このエラーは、

  • 参照先のdht11.pyRPi.GPIO.setup(self.__pin, RPi.GPIO.OUT)をする際にGPIOの番号を設定しますが、どのモードで番号を設定するか指定がありません。
  • 設定はGPIO.setmode(GPIO.BOARD)GPIO.setmode(GPIO.BCM)でできますよ。

と訴えています。

解決策

dht11_auto_heater.pyの参照先のdht11.pyを修正ください。

Python3

1# dht11.py 2import RPi.GPIO as GPIO 3 4# initialize GPIO 5GPIO.setmode(GPIO.BCM) <--これをGPIOのimport後に挟んでください。 6 7# ここがエラーの元 8RPi.GPIO.setup(self.__pin,RPi.GPIO.OUT)

投稿2019/11/04 21:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

maai

2019/11/06 05:06

(ベストアンサー済みなので質問者が納得していればそれで良いのですが、) 質問者のコードでは既に`GPIO.setmode(GPIO.BCM)` していませんか?
Kaki_

2019/11/06 07:27

また新たにエラーが表示されるようになりました。 ``` pi@camHokkaido110:~/DHT11_Python$ python dht11_auto_heater.py Traceback (most recent call last): File "dht11_auto_heater.py", line 20, in <module> result = instance.read() File "/home/pi/DHT11_Python/dht11.py", line 36, in read RPi.GPIO.setup(self.__pin, RPi.GPIO.OUT) NameError: global name 'RPi' is not defined ```
退会済みユーザー

退会済みユーザー

2019/11/06 12:58 編集

maaiさん: 元のpythonコードのさらに参照先のdht11.pyに、ご指摘のコードが抜け落ちた場合のエラーが報告のあったエラーだと読んで回答しました。上のコメントを見る限り、あっていたようです。 Kaki_さん: dht11.pyの一番初めに import RPi.GPIO as GPIO を加えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問