In the wake of more and more people using LoRa the lack of a reliable source for PIN mappings became obvious. A lot of projects need to maintain their own set of configurations which leads to inconsistencies and the need to maintain this data.
A config "database" for radio modules with a sane naming scheme so we can all benefit from it: LoRa32
This incorporates ideas and configs from RadioLib, @matthias-bs (BresserWeatherSensorReceiver) plus some vendor/architecture specific extensions.
The name stems from the fact that most boards are based on an ESP32 with a LoRa capabale radio module.
- File Naming Scheme
LoRa32.h- Main include file- Vendor/Architecture specifics should be kept in separate files like
LoRa32_HelTec.horLoRa32_RP2040.hvendor/LoRa32_*.h- Vendor/Board specific filesarch/Lora32_$Architecture.h- Architechture specific filesLora32_$Library.h- Library specific files that could by used by all (or most) implementations
LoRa32.hshould only contain the bare minimum which are the board configs- Needs to be usable without any specific includes: Easier to include into other projects. Just copy&paste and adopt to your own needs instead of using a lib.
- Because of this a version number (incl. date + git revision) needs to inside every file
#define/#ifare used to take care of the flow
LoRa32_*.hfiles are optional but:- Included by default
- Configurable in the main
LoRa32.hfile or from the project itself- Project settings always overwrite lib settings
LoRa32.hsettings always overwriteLoRa32_*.hsettings
- PIN Naming Scheme (
$prefix_$group_$function)- All uppercase to differentiate from other settings
$prefix- Standard is
LORA32_ - Compatability mode removes prefix
- Can be changed if needed (eg. adopt to own project)
- Standard is
$group- Undefined if a function (
RADIO,I2C, etc.) is not defined/used - Example: A board without a radio module has its
$prefix_RADIOundefined - Can hold additional config data
- Example:
LORA32_RADIO = SX1276defines RadioLibs RADIO_TYPE (LORA32_RADIO radio = new Module(...)).
- Example:
- Predefined
$groupsPINS(eg.$prefix_PINS_SPI): Defines a group of PINs for the same functionality (eg. SPI) with the PIN definitions as array dataPIN(eg.$prefix_PIN_MOSI): Compatability mode only: Additional definition of the PIN name- LORA32 definition:
LORA32_SPI_MOSI - Compatability mode:
PIN_MOSI
- LORA32 definition:
SPI: SPI name (HSPI/VSPI)DISPLAY: Display geometry informationRADIO: RadioLib RADIO_TYPETBD: ... TBD ...
- Undefined if a function (
- Targets
- Tool: VSCode with PlatformIO / Arduino
- Framework: Arduino
- Main Platform: ESP32(S2/S3)
- Other:
- ESP8266
- RPi
- Arduino Mega
- TBD
- Other:
- Same & Sane PIN naming for boards from different vendors and platforms
- PIN definitions for/from some common libs (
#define esphome) - Sane standard PIN definitions for DIY builds based on already established standards
- PIN definitions for/from some common libs (
- Workaround for Bugs (eg. set input only PINs to input which could cause radio interrupt errors)
- Deep Sleep Support
- Persistant Storage support
- Battery measurement
- Basic Display config (nothing i care about..)
- Optional Automatic Lib Configs based used defines
- RadioLib module configuration
- Some standard display lib setups
- TBD
- tinyGS ConfigManager
- Projects with a board pin configs
- meshtastic
- ExpressLRS
- HomeSpan
- tasmota
- esphome
- BresserWeatherSensorReceiver
Original Discussion: PIN „Database“ @ RadioLib