rust-port/wifi-densepose-rs/crates/ruv-neural/ruv-neural-esp32/README.md
ESP32 edge integration for neural sensor data acquisition and preprocessing.
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.
adc): AdcReader with configurable AdcConfig including
sample rate, resolution, attenuation levels, and multi-channel support via
AdcChanneltdm): TdmScheduler and TdmNode for time-division
multiplexed multi-sensor coordination with configurable SyncMethod
(GPIO trigger, I2S clock, software timer)preprocessing): EdgePreprocessor with fixed-point
IIR filters (IirCoeffs), downsampling, and DC offset removal optimized
for constrained embedded environmentsprotocol): NeuralDataPacket with PacketHeader
and ChannelData for efficient binary data streaming to the backend over
UART, SPI, or WiFipower): PowerManager with PowerConfig and PowerMode
(active, light sleep, deep sleep, hibernate) for battery-powered deploymentsaggregator): NodeAggregator for combining data
from multiple ESP32 nodes into synchronized multi-channel streamsuse 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);
| Module | Key Types |
|---|---|
adc | AdcReader, AdcConfig, AdcChannel, Attenuation |
tdm | TdmScheduler, TdmNode, SyncMethod |
preprocessing | EdgePreprocessor, IirCoeffs |
protocol | NeuralDataPacket, PacketHeader, ChannelData |
power | PowerManager, PowerConfig, PowerMode |
aggregator | NodeAggregator |
| Feature | Default | Description |
|---|---|---|
std | Yes | Standard library (desktop simulation) |
no_std | No | Bare-metal ESP32 target |
simulator | No | Simulated ADC for testing (requires std) |
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.
MIT OR Apache-2.0