or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

device-motion.mdenvironmental-sensors.mdindex.mdmagnetic-sensors.mdmotion-sensors.mdpedometer.md
tile.json

tessl/npm-expo-sensors

Provides access to hardware device sensors including accelerometer, gyroscope, magnetometer, barometer, light sensor, and pedometer for React Native and Expo applications.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/expo-sensors@15.0.x

To install, run

npx @tessl/cli install tessl/npm-expo-sensors@15.0.0

index.mddocs/

Expo Sensors

Expo Sensors provides comprehensive hardware sensor access for React Native and Expo applications. It offers JavaScript/TypeScript APIs for accessing device accelerometer, gyroscope, magnetometer, barometer, light sensor, and pedometer functionality with unified interfaces across Android, iOS, and web platforms.

Package Information

  • Package Name: expo-sensors
  • Package Type: npm
  • Language: TypeScript
  • Installation: npx expo install expo-sensors

Core Imports

import { 
  Accelerometer, 
  Gyroscope, 
  DeviceMotion, 
  Magnetometer, 
  Barometer, 
  LightSensor, 
  Pedometer 
} from "expo-sensors";

For individual sensor imports with types:

import { Accelerometer, AccelerometerMeasurement } from "expo-sensors";
import { Gyroscope, GyroscopeMeasurement } from "expo-sensors";
import { DeviceMotion, DeviceMotionMeasurement, DeviceMotionOrientation } from "expo-sensors";
import { Magnetometer, MagnetometerMeasurement } from "expo-sensors";
import { Barometer, BarometerMeasurement } from "expo-sensors";
import { LightSensor, LightSensorMeasurement } from "expo-sensors";

Basic Usage

import { Accelerometer, DeviceMotion, Pedometer } from "expo-sensors";

// Subscribe to accelerometer updates
const subscription = Accelerometer.addListener(({ x, y, z, timestamp }) => {
  console.log(`Acceleration: x=${x}, y=${y}, z=${z}`);
});

// Check sensor availability
const isAvailable = await Accelerometer.isAvailableAsync();
if (isAvailable) {
  // Set update interval (in milliseconds)
  Accelerometer.setUpdateInterval(100);
}

// Clean up subscription
subscription.remove();

// Use pedometer for step counting
Pedometer.watchStepCount(({ steps }) => {
  console.log(`Steps: ${steps}`);
});

Architecture

Expo Sensors is built around several key components:

  • DeviceSensor Base Class: Generic base class providing common sensor functionality like listeners, permissions, and availability checks
  • Individual Sensor Classes: Specialized implementations for each sensor type (Accelerometer, Gyroscope, etc.)
  • Measurement Types: TypeScript interfaces defining the data structure for each sensor
  • Platform-Specific Modules: Native implementations for Android, iOS, and web with unified JavaScript API
  • Permission System: Consistent permission handling across platforms with async/await patterns

Capabilities

Motion Sensors

Core motion sensing capabilities including accelerometer, gyroscope, and combined device motion tracking. Essential for fitness apps, games, and augmented reality applications.

// Accelerometer - measures device acceleration in g-forces
interface AccelerometerMeasurement {
  x: number;        // g-forces in X axis
  y: number;        // g-forces in Y axis  
  z: number;        // g-forces in Z axis
  timestamp: number; // measurement timestamp in seconds
}

// Gyroscope - measures device rotation in radians per second
interface GyroscopeMeasurement {
  x: number;        // rotation in rad/s around X axis
  y: number;        // rotation in rad/s around Y axis
  z: number;        // rotation in rad/s around Z axis
  timestamp: number; // measurement timestamp in seconds
}

Motion Sensors

Device Motion

Combined motion sensor providing comprehensive device orientation, acceleration, and rotation data. Ideal for applications requiring precise motion tracking and orientation awareness.

interface DeviceMotionMeasurement {
  acceleration: null | {
    x: number; y: number; z: number; timestamp: number;
  };
  accelerationIncludingGravity: {
    x: number; y: number; z: number; timestamp: number;
  };
  rotation: {
    alpha: number; beta: number; gamma: number; timestamp: number;
  };
  rotationRate: null | {
    alpha: number; beta: number; gamma: number; timestamp: number;
  };
  interval: number;
  orientation: DeviceMotionOrientation;
}

enum DeviceMotionOrientation {
  Portrait = 0,
  RightLandscape = 90,
  UpsideDown = 180,
  LeftLandscape = -90,
}

Device Motion

Magnetic Field Sensors

Magnetometer functionality for compass applications and magnetic field detection, available in both calibrated and uncalibrated forms.

interface MagnetometerMeasurement {
  x: number;        // magnetic field strength in μT (X axis)
  y: number;        // magnetic field strength in μT (Y axis)
  z: number;        // magnetic field strength in μT (Z axis)
  timestamp: number; // measurement timestamp in seconds
}

interface MagnetometerUncalibratedMeasurement {
  x: number;        // uncalibrated magnetic field strength in μT (X axis)
  y: number;        // uncalibrated magnetic field strength in μT (Y axis)
  z: number;        // uncalibrated magnetic field strength in μT (Z axis)
  timestamp: number; // measurement timestamp in seconds
}

Magnetic Field Sensors

Environmental Sensors

Barometer and light sensor capabilities for measuring atmospheric pressure, altitude, and ambient light conditions.

interface BarometerMeasurement {
  pressure: number;           // atmospheric pressure in hPa
  relativeAltitude?: number;  // altitude in meters (iOS only)
  timestamp: number;          // measurement timestamp in seconds
}

interface LightSensorMeasurement {
  illuminance: number;  // ambient light level in lux (lx)
  timestamp: number;    // measurement timestamp in seconds
}

Environmental Sensors

Step Counting

Pedometer functionality for fitness and health applications with step counting and historical data access.

interface PedometerResult {
  steps: number;  // number of steps taken
}

type PedometerUpdateCallback = (result: PedometerResult) => void;

// Functions for step counting
function watchStepCount(callback: PedometerUpdateCallback): Subscription;
function getStepCountAsync(start: Date, end: Date): Promise<PedometerResult>; // iOS only
function isAvailableAsync(): Promise<boolean>;

Step Counting

Common Types

// Base sensor interface
interface DeviceSensor<Measurement> {
  addListener(listener: (event: Measurement) => void): Subscription;
  hasListeners(): boolean;
  getListenerCount(): number;
  removeAllListeners(): void;
  removeSubscription(subscription: Subscription): void;
  setUpdateInterval(intervalMs: number): void;
  isAvailableAsync(): Promise<boolean>;
  getPermissionsAsync(): Promise<PermissionResponse>;
  requestPermissionsAsync(): Promise<PermissionResponse>;
}

// Subscription for event listeners
interface Subscription {
  remove(): void;
}

// Permission system types
interface PermissionResponse {
  granted: boolean;
  expires: 'never' | number;
  canAskAgain: boolean;
  status: PermissionStatus;
}

enum PermissionStatus {
  UNDETERMINED = 'undetermined',
  GRANTED = 'granted',
  DENIED = 'denied',
}

// Listener function type
type Listener<E> = (event: E) => void;

Platform Support

  • Android: Full sensor support with HIGH_SAMPLING_RATE_SENSORS permission for <200ms intervals on Android 12+
  • iOS: Full sensor support with NSMotionUsageDescription required for DeviceMotion
  • Web: Limited sensor support, requires HTTPS and user interaction for permission requests