0

私はads1115(ラズベリーパイの下)に問題があります。ここに私のpythonコードがあります

import smbus
bus = smbus.SMBus(1)
address = 0x49
print bus.read_byte(address)
print bus.read_i2c_block_data(address, 0x00, 2)

そして次の問題:

17
Traceback (most recent call last):
  File "test.py", line 8, in <module>
    data = bus.read_i2c_block_data(address, 0x00, 2)
IOError: [Errno 121] Remote I/O error

したがって、「bus.read_byte」(ここでは17)の回答がある間、I2Cモジュールは問題ないと思います。特に、 i2cdetec -y 1 はまったく機能します (出力はアドレス 49 です。

ads1115の別のアドレスを使用する場合(adafruitの例で述べられているように別の配線を使用)、問題は依然として存在します。

更新: モジュール ADS1115 は Arduino (および Adafruit ライブラリ) で動作し、適切な測定値を提供します。

アイデアはありますか?

4

2 に答える 2

0

これは、windows 10 iot と raspbery pi で ads1115 を読んでいる私のサンプル コードです。参考になると思います。

var i2CSettings1 = new I2cConnectionSettings(0x48)
            {
                BusSpeed = I2cBusSpeed.FastMode,
                SharingMode = I2cSharingMode.Shared
            };



var i2C1 = I2cDevice.GetDeviceSelector("I2C1");
                var devices = await DeviceInformation.FindAllAsync(i2C1);
                var gpio = GpioController.GetDefault();

// ここが重要です。最初に i2c デバイスをセットアップします

 _converter1 = await I2cDevice.FromIdAsync(devices[0].Id, i2CSettings1);
                _converter1.Write(new byte[] { 0x01, 0xc4, 0x60 });
                _converter1.Write(new byte[] { 0x02, 0x00, 0x00 }); //rate
                _converter1.Write(new byte[] { 0x03, 0xff, 0xff });

// このバイトを送信する必要があります。これは一度だけ送信する必要があります

// データを読み取っています。ループ内でデータを読み取ることができますが、最善の方法はアラート ピンを使用することです。ads1115 にはアラート ピンがあり、読み取りの準備ができたらアラートを送信します。このコードでデジタル入力トリガーを使用してアラート ピンを読み取ることができます。

_converter1.WriteRead(new byte[] { 0x0 }, bytearray1);
                            if (BitConverter.IsLittleEndian)
                                Array.Reverse(bytearray1);
                            var value1 = BitConverter.ToInt16(bytearray1, 0);
于 2019-04-02T05:48:17.053 に答える