我无法在Android Things中通过I2C总线获取数据

时间:2017-11-10 05:15:52

标签: raspberry-pi i2c android-things 1wire

我无法通过Raspberry Pi 3上的Android Things中的I2C总线获取数据。

我在RPi和DS18B20(温度传感器)上连接Android Things。 Connect to RPi

并运行I2C地址扫描应用程序(https://github.com/dennisg/i2c-address-scanner),但找不到可用的地址。

    for (int address = 0; address < 256; address++) {

        //auto-close the devices
        try (final I2cDevice device = peripheralManagerService.openI2cDevice(BoardDefaults.getI2cBus(), address)) {

            try {
                device.readRegByte(TEST_REGISTER);
                Log.i(TAG, String.format(Locale.US, "Trying: 0x%02X - SUCCESS", address));
            } catch (final IOException e) {
                Log.i(TAG, String.format(Locale.US, "Trying: 0x%02X - FAIL", address));
            }

        } catch (final IOException e) {
            //in case the openI2cDevice(name, address) fails
        }
    }

如何通过I2C获取数据?

2 个答案:

答案 0 :(得分:2)

链接的测试项目似乎在几个方面使用the I2C protocol

首先,它假设特定电路板上只有一个I2C总线。虽然现在确实如此,但它可能无法扩展到将来支持Android Things的其他SOM。

其次,它假设寄存器地址从(0x00)读取。这可能适用于开发人员开始使用的任何设备,但是大量I2C外设可能无法响应该地址。

您应该查看此设备的the datasheet。粗略检查后,似乎没有与0x00对应的寄存器。此外,它具有自定义读取流程,这将使得难以使用上面的代码段。微控制器在传感器上获取这些值可能会将它们抛弃并且不会返回任何信号。

再次阅读数据表可能很有用。看起来传感器是“单线”而不是I2C。虽然这两个协议可能相似,但使用内置的readByte方法可能会在数据传输中做出一些可能与外围协议不完全匹配的假设。

答案 1 :(得分:0)

正如Nick Felker在他的answer DS18B20中写的那样有1-Wire接口,你无法直接将它连接到带有Android Things的Raspberry Pi。您应该使用工业(例如DS2482-100)或基于定制MCU(如that项目中)1-Wire&lt; - &gt; I2C转换器或其他(例如USB&lt; 1&Wire,1-Wire,UART&lt; 1-Wire)转换器。