0

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

我在 RPi 和 DS18B20(温度传感器)上连接 Android Things。 连接到树莓派

并运行 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 获取数据?

4

2 回答 2

2

链接的测试项目似乎在几个方面都不好地使用了 I2C 协议。

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

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

您应该查看此设备的数据表。粗略一查,似乎没有对应的寄存器0x00。此外,它有一个自定义的读取流程,这使得使用上面的代码片段变得困难。在您的传感器上获取这些值的微控制器可能会将它们丢弃并且不返回任何信号。

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

于 2017-11-10T07:08:29.457 回答
0

正如Nick Felker在他的回答中所写, DS18B20具有 1-Wire 接口,您无法使用 Android Things 直接将其连接到 Raspberry Pi。您应该使用工业(例如DS2482-100)或基于定制 MCU(如项目中)的 1-Wire <-> I2C 转换器,或其他(例如 USB <-> 1-Wire、UART<-> 1-Wire)转换器。

于 2017-11-10T09:36:49.383 回答