- Designed for use with the embedded-hal crate
- Safe and declarative register definitions
- Chip operation modes lifted to the type-level
- Lets you go straight into RX/TX with the default config
- Auto-ack support
Get the *-hal crate for your micro-controller unit. Figure out how
to get to the peripherals implementing these embedded-hal traits:
-
embedded_hal::blocking::spi::Transferfor the SPI peripheralWe provide a
mod setupwith a few constants for SPI. -
embedded_hal::digital::OutputPinfor the CE pin -
embedded_hal::digital::OutputPinfor the CSN pin(Although that one belongs to the SPI, we found it much more reliable to implement in software.)
let mut nrf24 = NRF24L01::new(ce, csn, spi).unwrap();This will provide an instance of Standby. You can use .rx() or
.tx() to transfer into a RXMode and TXMode instances. They
implement .standby() methods to get back to Standby and then
switch to the other mode.
Before you start transmission, the device must be configured. Example:
nrf24.set_channel(8)?;
nrf24.set_auto_retransmit(0, 0)?;
nrf24.set_rf(&nrf24::DataRate::R2Mbps, 3)?;
nrf24.set_pipes_rx_enable(&[true, false, false, false, false, false])?;
nrf24.set_auto_ack(&[false; 6])?;
nrf24.set_crc(&nrf24::CrcMode::Disabled)?;
nrf24.set_tx_addr(&b"fnord"[..])?;Use rx.can_read() to poll (returning the pipe number), then
rx.read() to receive payload.
Use tx.send() to enqueue a packet.
Use tx.can_send() to prevent sending on a full queue, and
tx.wait_empty() to flush.