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

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

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

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

Python

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

Q&A

解決済

3回答

4444閲覧

raspberrypiでADS1015を使用したい

Nicoa

総合スコア10

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2020/05/19 14:14

前提・実現したいこと

raspberry piでADS1015(A-Dコンバータ)を使用しようとしています。

最終的にraspberry piで距離センサを使用したいです。

Adafruitのサイトを参考に、サンプルプログラム(Adafruitのもの)を
実行しましたがエラーが起き、解決方法が判らず
教えていただけないでしょうか。

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

Reading ADS1x15 values, press Ctrl-C to quit... | 0 | 1 | 2 | 3 | ------------------------------------- Traceback (most recent call last): File "simpletest.py", line 42, in <module> values[i] = adc.read_adc(i, gain=GAIN) File "/usr/local/lib/python3.5/dist-packages/Adafruit_ADS1x15-1.0.2-py3.5.egg/Adafruit_ADS1x15/ADS1x15.py", line 192, in read_adc File "/usr/local/lib/python3.5/dist-packages/Adafruit_ADS1x15-1.0.2-py3.5.egg/Adafruit_ADS1x15/ADS1x15.py", line 128, in _read File "/usr/local/lib/python3.5/dist-packages/Adafruit_GPIO-1.0.4-py3.5.egg/Adafruit_GPIO/I2C.py", line 129, in writeList File "/usr/local/lib/python3.5/dist-packages/Adafruit_PureIO-1.1.5-py3.5.egg/Adafruit_PureIO/smbus.py", line 363, in write_i2c_block_data File "/usr/local/lib/python3.5/dist-packages/Adafruit_PureIO-1.1.5-py3.5.egg/Adafruit_PureIO/smbus.py", line 163, in _select_device OSError: [Errno 16] Device or resource busy

該当のソースコード

以下、実行したプログラムです。

python

1# Simple demo of reading each analog input from the ADS1x15 and printing it to 2# the screen. 3# Author: Tony DiCola 4# License: Public Domain 5import time 6 7# Import the ADS1x15 module. 8import Adafruit_ADS1x15 9 10 11# Create an ADS1115 ADC (16-bit) instance. 12adc = Adafruit_ADS1x15.ADS1115() 13 14# Or create an ADS1015 ADC (12-bit) instance. 15#adc = Adafruit_ADS1x15.ADS1015() 16 17# Note you can change the I2C address from its default (0x48), and/or the I2C 18# bus by passing in these optional parameters: 19#adc = Adafruit_ADS1x15.ADS1015(address=0x49, busnum=1) 20 21# Choose a gain of 1 for reading voltages from 0 to 4.09V. 22# Or pick a different gain to change the range of voltages that are read: 23# - 2/3 = +/-6.144V 24# - 1 = +/-4.096V 25# - 2 = +/-2.048V 26# - 4 = +/-1.024V 27# - 8 = +/-0.512V 28# - 16 = +/-0.256V 29# See table 3 in the ADS1015/ADS1115 datasheet for more info on gain. 30GAIN = 1 31 32print('Reading ADS1x15 values, press Ctrl-C to quit...') 33# Print nice channel column headers. 34print('| {0:>6} | {1:>6} | {2:>6} | {3:>6} |'.format(*range(4))) 35print('-' * 37) 36# Main loop. 37while True: 38 # Read all the ADC channel values in a list. 39 values = [0]*4 40 for i in range(4): 41 # Read the specified ADC channel using the previously set gain value. 42 values[i] = adc.read_adc(i, gain=GAIN) 43 # Note you can also pass in an optional data_rate parameter that controls 44 # the ADC conversion time (in samples/second). Each chip has a different 45 # set of allowed data rate values, see datasheet Table 9 config register 46 # DR bit values. 47 #values[i] = adc.read_adc(i, gain=GAIN, data_rate=128) 48 # Each value will be a 12 or 16 bit signed integer value depending on the 49 # ADC (ADS1015 = 12-bit, ADS1115 = 16-bit). 50 # Print the ADC values. 51 print('| {0:>6} | {1:>6} | {2:>6} | {3:>6} |'.format(*values)) 52 # Pause for half a second. 53 time.sleep(0.5)ソースコード

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

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

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

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

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

guest

回答3

0

ベストアンサー

Nicoaさん、

sudo i2cdetect -y 1 で、デバイスの接続確認はされましたか?
あと、sudo をつけて、Pythonのプログラムを実行するとどうでしょうか。

投稿2020/05/20 02:46

mt08

総合スコア1825

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

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

Nicoa

2020/05/22 12:17

頂いたコマンドで、接続はされていることを確認しました。 いろいろなサイトを参考にしてインストールなどを複数回行ったことが 原因かもしれません。 インストールしたデータを消去した後、再確認してみます。 それでも解決しなければ、また質問させて頂きます。 御回答有難う御座いました。
guest

0

PythonスクリプトをADCのカーネルモジュールを組み込んだ状態で走らせてはいませんか。

i2cdetectの実行結果でデバイスIDが数字で表示されず、UUとなっているとカーネルモジュールに
デバイスが取られて(busy)います。

カーネルモジュールを外すとIDが数字で表示され、スクリプトが動くと思います。

投稿2020/08/19 02:32

inugami.mamoru

総合スコア20

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

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

0

ラズパイとAdafruitはCPUは別物なのでそのままでは動きません
ラズパイのI2Cユニットがありますんで、それで使えるようにコードを修正する必要があります

投稿2020/05/19 14:35

y_waiwai

総合スコア88042

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問