2016-12-13 10 views
1

Я пишу приложение с использованием Android Things и хочу использовать bmx280 driver для чтения значений окружающей среды (температура, барометрическое давление и т. Д.). Кажется, существуют два разных драйвера: Bmx280 и Bmx280SensorDriver. Какой из них следует использовать для считывания значений температуры/давления?Разница между классами Bmx280 и Bmx280SensorDriver в драйвере Android Things bmx280?

ответ

4

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 APIs для прослушивания показаний температуры:

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. Если вы хотите регулярно проверять показания датчиков и не заботитесь о том, что генерирует данные, используйте Bmx280SensorDriver и API SensorManager.