传感器信息采集项目到了一定的节点,总结一下iOS中传感器信息采集的相关知识。
代码下载:https://github.com/haojinming/SensorInIOS
- Accelerometer
- Gyroscope
- Magnetometer
- Pedometer
- Barometer
- GPS
- Bluetooth
- MotionActivity observer
- Audio decibel
- Wifi status and strength
- Ambient Light
- Shake status and times
- Steps/Pace/Distance
- Pressure
- NFC
一、 首先是运动传感器,加速度仪、陀螺仪和罗盘。
主要使用Core Motion模块进行采集,有Pull和Push两种模式。
另外有原始数据和经过系统处理两种模式,主要区别在于系统对重力加速度进行了处理,只保留手机用户对手机的输入,在游戏和判断用户运动状态时很有用。
代码示例(原数据):
可以指定数据更新的频率,实时性比较好。
if self.motionManager.isAccelerometerAvailable{
self.motionManager.accelerometerUpdateInterval = timeIntervalUpdate
self.motionManager.startAccelerometerUpdates()
}
if self.motionManager.isGyroAvailable {
self.motionManager.gyroUpdateInterval = timeIntervalUpdate
self.motionManager.startGyroUpdates()
}
if self.motionManager.isMagnetometerAvailable{
self.motionManager.magnetometerUpdateInterval = timeIntervalUpdate
self.motionManager.startMagnetometerUpdates()
}
//get the motion sensor data
if let data = self.motionManager.accelerometerData{
self.realTimeData.sensorData.accelerometerData = data.acceleration
}
if let data = self.motionManager.gyroData{
self.realTimeData.sensorData.gyroscopeData = data.rotationRate
}
if let data = self.motionManager.magnetometerData{
self.realTimeData.sensorData.magnetometerData = data.magneticField
}
代码示例(系统过滤掉重力加速度):
if self.motionManager.isDeviceMotionAvailable{
self.motionManager.deviceMotionUpdateInterval = timeIntervalUpdate
self.motionManager.startDeviceMotionUpdates()
}
if let motionData = motionManager.deviceMotion{
self.realTimeData.sensorData.accelerometerData = motionData.userAcceleration
self.realTimeData.sensorData.gyroscopeData = motionData.rotationRate
}
二、气压,海拔
气压海拔数据更新无法制定更新频率,只能通过Block的方式获取,实际会有几秒钟的延迟。
if CMAltimeter.isRelativeAltitudeAvailable(){
self.altitudeSensor.startRelativeAltitudeUpdates(to: OperationQueue.main, withHandler: {
data, error in
if error != nil{
print("Error occurs within altitude sensor.")
}
if let dataTemp = data{
self.realTimeData.sensorData.altitudeData = dataTemp
}
})
}
else{
print("Altitude sensor is not available.")
}
三、步行相关的传感器,计步器(
Pedometer
)采集