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

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

ただいまの
回答率

87.61%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,007

score 7

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • uuu1010

    2020/10/11 17:57

    Takutakuya様、ありがとうございます。追加しました!

    Yasutakatou様、ありがとうございます。最後の段落にサンプルプログラムとの差分コードを追加しました。

    また、暫定解決方法としてsmbus2をsmbusにしたらこの部分のエラーは無くなりましたが、他の部分にエラーがあったので、根本的な解決方法を模索してます!
    詳細は最後の文章の方に追加してます。

    お手数をおかけしますがよろしくお願いします。

    キャンセル

  • takutakuya

    2020/10/11 18:31

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

    キャンセル

  • takutakuya

    2020/10/11 19:16

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

    キャンセル

回答 1

checkベストアンサー

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/10/11 19:15

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

    キャンセル

  • 2020/10/11 19:19

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

    キャンセル

  • 2020/10/11 19:30

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

    キャンセル

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る