lora-phy 3.0.0

A LoRa physical layer implementation enabling utilization of a range of MCU/LoRa board combinations within embedded frameworks supporting embedded-hal-async.
docs.rs failed to build lora-phy-3.0.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: lora-phy-2.1.2

LoRa physical layer (the rustaceous radio)

CI

Why?

  • provide one straight-forward LoRa physical layer API which supports both LoRaWAN and point-to-point (P2P) use cases;
  • support a variety of microcontroller unit (MCU) and LoRa chip combinations behind one API;
  • enable LoRa features for any embedded framework which supports embedded-hal-async for the desired MCU/LoRa chip combination.

How?

  • separate out modulation parameters and packet parameters as separate concerns to address the nuances in LoRa chip support and to allow flexible specification of various LoRaWAN and P2P send/receive channels, even in the same use case;
  • allow the user to specify a LoRa chip kind (for example, Sx1261/2) and specific LoRa board type (for example, Stm32wlSx1262) and hide the control of that LoRa board behind the LoRa physical layer API;
  • provide a minimal trait which must be implemented for each desired embedded framework/MCU type/LoRa chip type to allow this crate to interface to the LoRa chip within the embedded framework.

Wheretofore?

  • while the current examples use the Embassy embedded framework, nrf52840, rp pico, stm32l0, and stm32wl MCUs, and Sx127x/Sx126x chips, this crate provides a path forward for other embedded frameworks, MCU types, and LoRa chips in a Rust development environment.

Examples

Please see examples for usage.

Chat

A public chat on LoRa/LoRaWAN topics using Rust is here:

  • Matrix room

LoRa physical layer API

For users wishing to implement a LoRaWAN or P2P solution, the following implementation files provide the necessary context for lora-phy version 2.

  • the API itself;
  • pertinent ancillary information.

Examples of API usage:

  • stm32wl P2P send and sleep;
  • stm32wl LoRaWAN using rust-lorawan;
  • stm32l0 P2P receive continuous;
  • nrf52840 duty cycle receive;
  • nrf52840 channel activity detection;
  • rp pico P2P send and sleep using the second core.

Embedded framework/MCU support

For embedded framework developers wishing to add LoRa support as a feature for one or more MCU/LoRa chip combinations:

  • the InterfaceVariant trait, which enables this lora-phy crate to interface to a specific embedded framework/MCU/LoRa chip combination.

Example InterfaceVariant implementations:

  • Implementations based on embedded-hal and embedded-hal-async traits. These are usable with any HAL crate that implements the embedded-hal traits.
  • STM32WL + Embassy implementation. STM32WL is special because LoRa uses an internal SPI, this implementation shows how to use it with embassy-stm32.

LoRa chip support

For developers wishing to add support for new LoRa chips or enhance support for existing chips:

  • the RadioKind trait, which must be implemented for each kind of LoRa chip for access through the lora-phy crate API;
  • the interface implementation, which captures the three key read/write operations allowing control of the LoRa chip from this crate through either opcode or register operations.

Example RadioKind implementations and ancillary information:

  • the Sx1261/2 radio kind;
  • the Sx1276/7/8/9 radio kind.

LoRa board-specific support

Board-specific configuration can be handled via the chip driver specific Config struct.