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