NebulaNebula
Miniapp APIs

Sensors

Subscribe to accelerometer, gyroscope, magnetometer, and barometer data with Nebula sensor APIs.

Nebula provides four sensor subscription APIs: accelerometer, gyroscope, magnetometer, and barometer.

Accelerometer

Listen for device acceleration changes:

import { onAccelerometerChange } from '@nebula-rn/client';

const unsubscribe = onAccelerometerChange((data) => {
  console.log(`x: ${data.x}, y: ${data.y}, z: ${data.z}`);
}, 200); // sampling interval: 200ms

// Stop listening
unsubscribe();

Gyroscope

Listen for angular velocity changes:

import { onGyroscopeChange } from '@nebula-rn/client';

const unsubscribe = onGyroscopeChange((data) => {
  console.log(`x: ${data.x}, y: ${data.y}, z: ${data.z}`);
}, 100);

unsubscribe();

Magnetometer

Listen for magnetic field intensity:

import { onMagnetometerChange } from '@nebula-rn/client';

const unsubscribe = onMagnetometerChange((data) => {
  console.log(`x: ${data.x}, y: ${data.y}, z: ${data.z}`);
}, 100);

unsubscribe();

Barometer

Listen for atmospheric pressure changes:

import { onBarometerChange } from '@nebula-rn/client';

const unsubscribe = onBarometerChange((data) => {
  console.log(`Pressure: ${data.pressure} hPa`);
});

unsubscribe();

The barometer does not support a custom sampling interval.

Callback data types

// Accelerometer / gyroscope / magnetometer
type SensorData = {
  x: number;
  y: number;
  z: number;
  timestamp?: number;
};

// Barometer
type BarometerData = {
  pressure: number;
};

Sampling intervals

SensorDefault intervalCustomizable
Accelerometer100msYes
Gyroscope100msYes
Magnetometer100msYes
BarometerSystem defaultNo

Complete example

import React, { useState, useEffect } from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { onAccelerometerChange } from '@nebula-rn/client';

export default function SensorDemoPage() {
  const [accel, setAccel] = useState({ x: 0, y: 0, z: 0 });

  useEffect(() => {
    const unsubscribe = onAccelerometerChange((data) => {
      setAccel({ x: data.x, y: data.y, z: data.z });
    }, 200);

    return () => { unsubscribe(); };
  }, []);

  return (
    <View style={styles.container}>
      <Text style={styles.title}>Accelerometer data</Text>
      <Text>X: {accel.x.toFixed(4)}</Text>
      <Text>Y: {accel.y.toFixed(4)}</Text>
      <Text>Z: {accel.z.toFixed(4)}</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: { padding: 20 },
  title: { fontSize: 18, fontWeight: '600', marginBottom: 12 },
});

Notes

  • Sensor subscriptions continuously consume battery, so unsubscribe when no longer needed.
  • Call unsubscribe() in the cleanup function of useEffect to avoid memory leaks.
  • High-frequency sampling increases CPU and battery cost, so choose intervals carefully.
  • Sensor availability depends on device hardware, and some devices may not support a barometer.