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

因此,我猜 I2C 模块没问题,而我的答案是“bus.read_byte”(这里是 17)。特别是, i2cdetec -y 1 完全有效(输出是地址 49。

如果我使用 ads1115 的另一个地址(在 adafruit 的示例中使用另一个接线),问题仍然存在。

更新:模块 ADS1115 与 Arduino(和 Adafruit 库)一起使用并提供良好的测量结果。

你有想法吗?

4

2 回答 2

0

解决方案:将 ADDR-Pin (ADS1115) 接地到您的 RaspberryPi Ground(我使用 PIN9)

Details of the Issue:
I had the same issue. But there is much more... 
I noticed when i run the python code, 
then run i2cdetect -y 1, my device changes address it becomes 48, 49, 4a, 4b (random) 

我真的希望这对某些人有所帮助,因为我花了几天时间才知道问题所在。顺便说一句,将所有未使用的通道接地也是一种最佳做法。

于 2019-10-17T09:29:43.730 回答
0

这是我在 Windows 10 iot 和树莓派上阅读 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 回答