Back to Ruview

ruv-neural-esp32

rust-port/wifi-densepose-rs/crates/ruv-neural/ruv-neural-esp32/README.md

0.7.04.2 KB
Original Source

ruv-neural-esp32

ESP32 edge integration for neural sensor data acquisition and preprocessing.

Overview

ruv-neural-esp32 provides lightweight processing modules designed to run on ESP32 microcontrollers for real-time neural sensor data acquisition and preprocessing at the edge. It handles ADC sampling, time-division multiplexing for multi-sensor coordination, IIR filtering and downsampling on-device, power management for battery operation, a binary communication protocol for streaming data to the rUv Neural backend, and multi-node data aggregation.

Features

  • ADC interface (adc): AdcReader with configurable AdcConfig including sample rate, resolution, attenuation levels, and multi-channel support via AdcChannel
  • TDM scheduling (tdm): TdmScheduler and TdmNode for time-division multiplexed multi-sensor coordination with configurable SyncMethod (GPIO trigger, I2S clock, software timer)
  • Edge preprocessing (preprocessing): EdgePreprocessor with fixed-point IIR filters (IirCoeffs), downsampling, and DC offset removal optimized for constrained embedded environments
  • Communication protocol (protocol): NeuralDataPacket with PacketHeader and ChannelData for efficient binary data streaming to the backend over UART, SPI, or WiFi
  • Power management (power): PowerManager with PowerConfig and PowerMode (active, light sleep, deep sleep, hibernate) for battery-powered deployments
  • Multi-node aggregation (aggregator): NodeAggregator for combining data from multiple ESP32 nodes into synchronized multi-channel streams

Usage

rust
use ruv_neural_esp32::{
    AdcReader, AdcConfig, Attenuation,
    TdmScheduler, TdmNode, SyncMethod,
    EdgePreprocessor, IirCoeffs,
    NeuralDataPacket, PacketHeader, ChannelData,
    PowerManager, PowerConfig, PowerMode,
    NodeAggregator,
};

// Configure ADC for 4-channel acquisition
let config = AdcConfig {
    sample_rate_hz: 1000,
    resolution_bits: 12,
    attenuation: Attenuation::Db11,
    channels: vec![
        AdcChannel { pin: 32, gain: 1.0 },
        AdcChannel { pin: 33, gain: 1.0 },
        AdcChannel { pin: 34, gain: 1.0 },
        AdcChannel { pin: 35, gain: 1.0 },
    ],
};
let mut adc = AdcReader::new(config);

// Set up TDM scheduling for multi-sensor sync
let scheduler = TdmScheduler::new(SyncMethod::GpioTrigger);
let node = TdmNode::new(0, scheduler);

// Preprocess on-device with IIR filter
let mut preprocessor = EdgePreprocessor::new(1000.0);
let filtered = preprocessor.process(&raw_samples);

// Build a data packet for transmission
let packet = NeuralDataPacket {
    header: PacketHeader::new(4, 250),
    channels: vec![ChannelData { samples: filtered }],
};

// Power management
let mut power = PowerManager::new(PowerConfig::default());
power.set_mode(PowerMode::LightSleep);

API Reference

ModuleKey Types
adcAdcReader, AdcConfig, AdcChannel, Attenuation
tdmTdmScheduler, TdmNode, SyncMethod
preprocessingEdgePreprocessor, IirCoeffs
protocolNeuralDataPacket, PacketHeader, ChannelData
powerPowerManager, PowerConfig, PowerMode
aggregatorNodeAggregator

Feature Flags

FeatureDefaultDescription
stdYesStandard library (desktop simulation)
no_stdNoBare-metal ESP32 target
simulatorNoSimulated ADC for testing (requires std)

Integration

Depends on ruv-neural-core for shared types. Preprocessed data packets are sent to the host system where ruv-neural-sensor or ruv-neural-signal can consume them for further processing. Designed to run independently on ESP32 hardware or in simulation mode on desktop for testing.

License

MIT OR Apache-2.0