我遇到了ads1115(在raspberry pi下)的问题。 这是我的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 librairy)配合使用,并提供了良好的测量结果。
你有个主意吗?
答案 0 :(得分:0)
这是我在Windows 10物联网和强奸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);
答案 1 :(得分:0)
解决方案: 将ADDR-Pin(ADS1115)接地到RaspberryPi地面(我使用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)
我真的希望这对某些人有所帮助,因为我花了几天时间才知道问题所在。同时,将所有未使用的通道接地也是一种最佳做法。