Bmx280 和 Bmx280SensorDriver 的区别 类 Android 事情 bmx280 驱动程序?
Difference between Bmx280 and Bmx280SensorDriver classes in Android Things bmx280 driver?
我正在使用 Android Things 编写应用程序并希望使用 bmx280
driver 读取环境值(温度、气压等)。似乎有两个不同的驱动程序:Bmx280
和 Bmx280SensorDriver
。我应该使用哪一个来读取温度 values/pressure?
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
和 SensorManager
API。
我正在使用 Android Things 编写应用程序并希望使用 bmx280
driver 读取环境值(温度、气压等)。似乎有两个不同的驱动程序:Bmx280
和 Bmx280SensorDriver
。我应该使用哪一个来读取温度 values/pressure?
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
和 SensorManager
API。