Разница между классами Bmx280 и Bmx280SensorDriver в драйвере Android Things bmx280?


person Karakuri    schedule 13.12.2016    source источник


Ответы (1)


Bmx280 позволяет вам напрямую взаимодействовать с периферийным устройством датчика, чтобы вы могли вручную считывать с него образцы температуры:

private Bmx280 bmx280;

try {
    bmx280 = new Bmx280(i2cBusName);
    bmx280.setTemperatureOversampling(Bmx280.OVERSAMPLING_1X);
    float temperature = bmx280.readTemperature();
} catch (IOException e) {
    // handle errors
}

// remember to close bmx280 later

Bmx280SensorDriver предназначен для регистрации в системе. В этом случае вы не взаимодействуете с оборудованием напрямую, а используете стандартный Android SensorManager API для прослушивания показаний температуры:

private Bmx280SensorDriver sensorDriver;
private SensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

try {
    sensorDriver = new Bmx280SensorDriver(BoardDefaults.getI2cBus());
    sensorManager.registerDynamicSensorCallback(mDynamicSensorCallback);
    sensorDriver.registerTemperatureSensor();
} catch (IOException e) {
    // handle errors
}

private SensorManager.DynamicSensorCallback mDynamicSensorCallback
        = new SensorManager.DynamicSensorCallback() {
    @Override
    public void onDynamicSensorConnected(Sensor sensor) {
        if (sensor.getType() == Sensor.TYPE_AMBIENT_TEMPERATURE) {
            // Our sensor is connected. Start receiving temperature data.
            sensorManager.registerListener(mTemperatureListener, sensor,
                    SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    /* other callbacks omitted */
};

// remember to unregister and close sensorDriver later

Преимущество последнего подхода заключается в том, что у устройства могут быть другие способы генерирования показаний датчика, поэтому вам не нужно полагаться только на Bmx280 в случае, если что-то другое дает лучшие показания, или Bmx280 перестает работать и т. д. (Вы можете подумайте об этом как об объединенном провайдере определения местоположения в Android: данные о местоположении могут определяться разными провайдерами в разных условиях, и система пытается сообщать наилучшую информацию в любой момент времени.) Кроме того, система заботится о таких вещах, как опрос данных датчиков, поэтому вам не нужно создавать свою собственную логику для этого.

TL;DR -- Если вы хотите вручную считывать данные датчика по запросу, вы можете напрямую использовать Bmx280. Если вам нужен регулярный опрос показаний датчиков и вам все равно, что генерирует данные, используйте API Bmx280SensorDriver и SensorManager.

person Karakuri    schedule 13.12.2016