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

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

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

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

Python

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

Q&A

解決済

1回答

5219閲覧

Raspberry Pi 4 で"from smbus2 import SMBus"のコードにエラー発生。(smbus2インストール済)

uuu1010

総合スコア7

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2020/10/11 07:05

編集2020/10/11 10:14

Raspberry pi 4 で温湿度センサーを付けて、気温湿度に合わせてLEDを点灯させたいです。

Raspberry Pi 4にインストールしたOSはMac用のRaspbian です。
センサーはBME280、LEDはNeo Pixel 16連リングを使用、通信はi2cを使ってます。

python3で実行した際に以下のエラーメッセージが出ます。

from smbus2 import SMBus ModuleNotFoundError: No module named ‘smbus2’

smbus2はインストール済で、同じコードを使ったサンプルプログラムでは実行出来るので原因が分かりません。
※インストール時のコマンドは次の通りです。

sudo pip install smbus2

ラズパイ内にインストールされてるか格納先も確認済です。
※格納先の確認コマンドと返答内容は次の通りです。

pip show smbus2 Location: /user/local/lib/python2.7/dist-packages

しかしどのサイトを見ても、「smbus2をインストールしましょう」としか回答が出てこず困っております。

どなたか早急に教えてくださると助かります。

なお、今回のプログラミングで参考にしたコードが全部書いてあるサイトは以下です。
リンク内容

こちらのサイトの指示に従い、サンプルプログラムをコピーし(動作確認済)、そこにコードを追加し、最後にpython3で実行する流れです。
具体的に追加したコードは大きく分けて次の2つのまとまったコードです。

import RPi.GPIO as GPIO interrupted = False GPIO.setwarnings(False) import time import board import neopixel pixel_pin = board.D18 num_pixels = 16 ORDER = neopixel.GRB pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=ORDER)
setup() get_calib_param() if __name__ == '__main__': try: temp, press, hum = readData() except KeyboardInterrupt: pass if temp: msg = "今の室温は、" + str(round(temp,1)) + "度、湿度は、" + str(round(hum,1)) + "パーセントです!" if temp > 25: msg += "暑くないですか?" pixels.fill((255, 0, 0)) elif temp < 15: msg += "寒いですね!" pixels.fill((0, 0, 255)) elif hum > 70: msg += "蒸し蒸ししますね" pixels.fill((255, 0, 0)) else: msg += "快適です!" pixels.fill((0, 255, 0)) pixels.show() print (msg) time.sleep(3) pixels.fill((0, 0, 0)) pixels.show()

★暫定解決方法(根本解決せず)★
解決方法をご教示いただき、pip3でsmbus2をインストールし直すと"from smbus2 import SMBus"の部分のコードのエラーは無くなりました。
しかし、代わりに別のコードにエラーが出ました。

temp, press, hum = readData() TypeError: cannot unpack non-iterable NoneType object

このエラー内容は変数の定義がないと言う意味と解釈しましたが、何故定義されてないことになるか分からず困っており、根本解決に至っていない状況です。

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

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

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

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

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

y_waiwai

2020/10/11 07:25

質問文は編集できます 追記修正しましょう
takutakuya

2020/10/11 07:30

「Python」タグも追加すると、より回答を得られやすくなると思います。
uuu1010

2020/10/11 07:31

ありがとうございます! 初めてですぐ投稿されてしまってました。修正して出しました!
takutakuya

2020/10/11 07:39

smbus2 をインストールした時のコマンド、実行できるコードとその時のコマンド、エラーになるコードとその時のコマンド、などもあると、解決しやすいと思います。 どこか違いがあるはずですので、情報が多いほうが助かります。
takutakuya

2020/10/11 07:54

何度もすみません。 「ラズパイ内にインストールされてるか格納先も確認済です。」 これも、何を確認して、どういう結果だった、かも記載されると良いと思います。
yasutakatou

2020/10/11 07:57

記載頂いたサイトのサンプルプログラムは動作しているのでパッケージなどは問題ないと思います。となると調査には変更点がどうしても必要です。 全部載せられないのであればサンプルプログラムとのdiffとかで変更点を 掲載頂くことは難しいでしょうか。
uuu1010

2020/10/11 08:57

Takutakuya様、ありがとうございます。追加しました! Yasutakatou様、ありがとうございます。最後の段落にサンプルプログラムとの差分コードを追加しました。 また、暫定解決方法としてsmbus2をsmbusにしたらこの部分のエラーは無くなりましたが、他の部分にエラーがあったので、根本的な解決方法を模索してます! 詳細は最後の文章の方に追加してます。 お手数をおかけしますがよろしくお願いします。
takutakuya

2020/10/11 09:31

コードは「コードの挿入」ボタン(見た目は「<code>」)があるので、そちらを押して出てくる「```」の中に記載すると見やすくなるので、ぜひ試してみてください。
takutakuya

2020/10/11 10:16

コード見やすくなってGoodです。
guest

回答1

0

ベストアンサー

>pip show smbus2 Location: /user/local/lib/python2.7/dist-packages

これを見る限り、Python2系もインストールされているようです。
pip3でインストールすると解決するかもしれません。

投稿2020/10/11 09:22

takutakuya

総合スコア979

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

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

uuu1010

2020/10/11 10:07

ありがとうございます! しかし、これを試した後、今度は別のエラーが出てしまいました…。 詳細は質問文の最後に記載してます。 お手数をおかけしますが、もし可能であれば引き続きご教示いただきたいです。 なにとぞよろしくお願いいたします。
takutakuya

2020/10/11 10:12

当初の問題とは別なので、質問を分けていただけると嬉しいです。 ちなみに「変数の定義がないと言う意味」のエラーではないですよ。 temp, press, hum = 1, 2, 3 という書き方で、 temp = 1 press = 2 hum = 3 と同じになるのですが、readData()がこれに合わない形になっているのだと思います。
uuu1010

2020/10/11 10:15

失礼しました! ありがとうございます。分けて質問出し直します。
takutakuya

2020/10/11 10:19

readData()の中身がどうなってるかをprint文などで確認して、それでも解決しなければ、その確認結果も一緒に質問に記載すると、解決しやすいと思います。
uuu1010

2020/10/11 10:30

何度もアドバイスいただきありがたいです。 一旦質問は出してしまったのですが、ご教示通りにprint文等で確認してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問