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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Python 3.x

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

Raspberry Pi

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

Python

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

解決済

ターミナルでsudo python 〇〇.pyとするとモジュールがないと言われる。

meJ15
meJ15

総合スコア55

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Python 3.x

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

Raspberry Pi

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

Python

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

1回答

0評価

0クリップ

9711閲覧

投稿2018/12/07 13:16

編集2018/12/08 08:11

前提・実現したいこと

センサデータをble通信でラズパイで受け取ろうと考えています。
このサイトを参考に
ラズベリーパイのターミナルでsudoをつけてpythonのコードを動かそうとするとエラーになる。

sudoをつけずに実行するとうまくいきます。
何がいけないのでしょうか?

とりあえずはラズパイでBLEデータを受け取れることが確認したいのですが、、、

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

pi@raspberrypi:~ $ sudo python 123.py Traceback (most recent call last): File "123.py", line 7, in <module> from bluepy.btle import Peripheral, DefaultDelegate, Scanner, BTLEException, UUID ImportError: No module named bluepy.btle
pi@raspberrypi:~ $ python 123.py esp32 BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning. BTLE Exception while scannning.

該当のソースコード

python

# -*- coding: shift-jis -*- # 環境センサーをLimited Broadcasterモードにして # 10秒アドバタイズ、290秒休み(開発中は50秒休み)に設定 # 常時スキャンし、データーを取得したらAmbientに送信する # 1台(Single)のセンサー端末に対応 from bluepy.btle import Peripheral, DefaultDelegate, Scanner, BTLEException, UUID import bluepy.btle import sys import struct from datetime import datetime import argparse import ambient import requests import time channelID = 100 writeKey = 'writeKey' am = ambient.Ambient(channelID, writeKey) devs = { 'omron': {'companyID': 'd502'}, 'esp32': {'companyID': 'ffff'} } target = 'esp32' Debugging = False def DBG(*args): if Debugging: msg = " ".join([str(a) for a in args]) print(msg) sys.stdout.flush() Verbose = True def MSG(*args): if Verbose: msg = " ".join([str(a) for a in args]) print(msg) sys.stdout.flush() def sendWithRetry(data): for retry in range(6): # 10秒間隔で6回リトライして、ダメならこの回は送信しない try: ret = am.send(data) MSG('sent to Ambient (ret = %d)' % ret.status_code) break except requests.exceptions.RequestException as e: MSG('request failed.') time.sleep(10) def send2ambient(dataRow): if companyID == 'ffff': (temp, humid, press) = struct.unpack('<hhh', bytes.fromhex(dataRow)) MSG(temp / 100, humid / 100, press / 10) sendWithRetry({'d1': temp / 100, 'd2': humid / 100, 'd3': press / 10}) else: (temp, humid, light, uv, press, noise, accelX, accelY, accelZ, batt) = struct.unpack('<hhhhhhhhhB', bytes.fromhex(dataRow)) MSG(temp / 100, humid / 100, light, uv / 100, press / 10, noise / 100, (batt + 100) / 100) sendWithRetry({'d1': temp / 100, 'd2': humid / 100, 'd3': press / 10, 'd4': (batt + 100) / 100, 'd5': light, 'd6': noise / 100}) class ScanDelegate(DefaultDelegate): def __init__(self): DefaultDelegate.__init__(self) self.lastseq = None self.lasttime = datetime.fromtimestamp(0) def handleDiscovery(self, dev, isNewDev, isNewData): if isNewDev or isNewData: for (adtype, desc, value) in dev.getScanData(): # print(adtype, desc, value) if target in ('omron', 'esp32'): if desc == 'Manufacturer' and value[0:4] == devs[target]['companyID']: delta = datetime.now() - self.lasttime if value[4:6] != self.lastseq and delta.total_seconds() > 11: # アドバタイズする10秒の間に測定が実行されseqが加算されたものは捨てる self.lastseq = value[4:6] self.lasttime = datetime.now() send2ambient(value[6:]) elif target in ('microbit', 'microbit+BME280'): if desc == '16b Service Data' and value[0:4] == 'aafe' and value[8:28] == '000000000000616d6269': print(value) seq = (int(value[32:33], 16) & 0xC) >> 2 print(seq) if seq != self.lastseq: self.lastseq = seq if target == 'microbit': temp = int(value[38:40], 16) print('Micro:bit %d' % temp) sendWithRetry({'d1': temp}) elif target == 'microbit+BME280': temp = (int(value[37:40], 16) & 0x3FF) / 10 humid = ((int(value[35:38], 16) & 0xFFC) >> 2) / 10 press = (int(value[32:35], 16) & 0x3FF) + 400 print('Micro:bit t: %f, h: %f, p: %f' % (temp, humid, press)) sendWithRetry({'d1': temp, 'd2': humid, 'd3': press}) def main(): parser = argparse.ArgumentParser() parser.add_argument('-d',action='store_true', help='debug msg on') parser.add_argument('-o',action='store_true', help='device is omron env sensor') parser.add_argument('-b',action='store_true', help='device is BBC micro:bit') parser.add_argument('-bb',action='store_true', help='device is BBC micro:bit + BME280') args = parser.parse_args(sys.argv[1:]) global Debugging Debugging = args.d bluepy.btle.Debugging = args.d global target if args.o: target = 'omron' elif args.b: target = 'microbit' elif args.bb: target = 'microbit+BME280' print(target) scanner = Scanner().withDelegate(ScanDelegate()) while True: try: scanner.scan(5.0) # スキャンする。デバイスを見つけた後の処理はScanDelegateに任せる except BTLEException: MSG('BTLE Exception while scannning.') if __name__ == "__main__": main()

試したこと

sudo をつけることでBLEデバイスにアクセスできるようになるらしいです。

補足
回答者から聞かれたことを試してみました。

イメージ説明

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

1T2R3M4

2018/12/07 14:30

sudo時のPATHはどうなってますか。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Python 3.x

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

Raspberry Pi

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

Python

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