Crate nrf24l01 [−] [src]
A pure Rust user space driver for NRF24L01(+) transceivers on Linux.
The aim of this driver is to provide a rustic, easy to use, no non-sense API to drive an NRF24L01(+) transceiver.
This is not a port another language, this driver has been written from scratch based on the device specs.
For the moment, the driver only exposes an API for the most reliable communication scheme offered by NRF24L01 chips, that is Enhanced Shockburst ™: automatic (hardware) packet acknowlegement with optional payload, dynamic payload length and long CRC (2 bytes).
Usage
Add a dependency to nrf24l01
to your Cargo.toml
:
[dependencies]
nrf24l01 = "0.2.0"
If you plan to compile for a Raspberry Pi, you may want to enable the rpi_accel
feature for better
performance. In that case, replace the above by:
[dependencies.nrf24l01]
version = "0.2.0"
features = ["rpi_accel"]
default-features = false
Examples
Simple emitter
extern crate nrf24l01; use std::time::Duration; use std::thread::sleep; use nrf24l01::{TXConfig, NRF24L01, PALevel, OperatingMode}; fn main() { let config = TXConfig { channel: 108, pa_level: PALevel::Low, pipe0_address: *b"abcde", max_retries: 3, retry_delay: 2, ..Default::default() }; let mut device = NRF24L01::new(25, 0).unwrap(); let message = b"sendtest"; device.configure(&OperatingMode::TX(config)).unwrap(); device.flush_output().unwrap(); loop { device.push(0, message).unwrap(); match device.send() { Ok(retries) => println!("Message sent, {} retries needed", retries), Err(err) => { println!("Destination unreachable: {:?}", err); device.flush_output().unwrap() } }; sleep(Duration::from_millis(5000)); } }
Simple receiver listening to the simple emitter
extern crate nrf24l01; use std::time::Duration; use std::thread::sleep; use nrf24l01::{RXConfig, NRF24L01, PALevel, OperatingMode}; fn main() { let config = RXConfig { channel: 108, pa_level: PALevel::Low, pipe0_address: *b"abcde", ..Default::default() }; let mut device = NRF24L01::new(25, 0).unwrap(); device.configure(&OperatingMode::RX(config)).unwrap(); device.listen().unwrap(); loop { sleep(Duration::from_millis(500)); if device.data_available().unwrap() { device .read_all(|packet| { println!("Received {:?} bytes", packet.len()); println!("Payload {:?}", packet); }) .unwrap(); } } }
Structs
NRF24L01 |
The driver |
RXConfig |
Receiver mode configuration |
TXConfig |
Transmitter mode configuration |
Enums
DataRate |
Supported air data rates. |
OperatingMode |
The Operating mode, either Receiver or Transmitter. |
PALevel |
Supported power amplifier levels. |