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