From 34b7580de199c883e75c43594e1eaf853f7f5307 Mon Sep 17 00:00:00 2001 From: brad Date: Thu, 13 Aug 2026 19:23:11 -0500 Subject: [PATCH 1/2] Initial commit for Modular Mesh Maker board with promicro nrf52 and NiceRF LR2021 radio --- .../modular_mesh_maker/MMMPromicroBoard.cpp | 25 +++ .../modular_mesh_maker/MMMPromicroBoard.h | 62 ++++++ variants/modular_mesh_maker/platformio.ini | 192 ++++++++++++++++++ variants/modular_mesh_maker/target.cpp | 60 ++++++ variants/modular_mesh_maker/target.h | 27 +++ variants/modular_mesh_maker/variant.cpp | 15 ++ variants/modular_mesh_maker/variant.h | 82 ++++++++ 7 files changed, 463 insertions(+) create mode 100644 variants/modular_mesh_maker/MMMPromicroBoard.cpp create mode 100644 variants/modular_mesh_maker/MMMPromicroBoard.h create mode 100644 variants/modular_mesh_maker/platformio.ini create mode 100644 variants/modular_mesh_maker/target.cpp create mode 100644 variants/modular_mesh_maker/target.h create mode 100644 variants/modular_mesh_maker/variant.cpp create mode 100644 variants/modular_mesh_maker/variant.h diff --git a/variants/modular_mesh_maker/MMMPromicroBoard.cpp b/variants/modular_mesh_maker/MMMPromicroBoard.cpp new file mode 100644 index 0000000000..866650181e --- /dev/null +++ b/variants/modular_mesh_maker/MMMPromicroBoard.cpp @@ -0,0 +1,25 @@ +#include +#include + +#include "MMMPromicroBoard.h" + +void MMMPromicroBoard::begin() { + NRF52Board::begin(); + btn_prev_state = HIGH; + + pinMode(PIN_VBAT_READ, INPUT); + + #ifdef BUTTON_PIN + pinMode(BUTTON_PIN, INPUT_PULLUP); + #endif + + #if defined(PIN_BOARD_SDA) && defined(PIN_BOARD_SCL) + Wire.setPins(PIN_BOARD_SDA, PIN_BOARD_SCL); + #endif + + Wire.begin(); + + pinMode(P_LORA_POWER_EN, OUTPUT); + digitalWrite(P_LORA_POWER_EN, HIGH); + delay(10); +} diff --git a/variants/modular_mesh_maker/MMMPromicroBoard.h b/variants/modular_mesh_maker/MMMPromicroBoard.h new file mode 100644 index 0000000000..d4429b0a71 --- /dev/null +++ b/variants/modular_mesh_maker/MMMPromicroBoard.h @@ -0,0 +1,62 @@ +#pragma once + +#include +#include +#include + +#define PIN_VBAT_READ 17 +#define ADC_MULTIPLIER (1.815f) // dependent on voltage divider resistors. TODO: more accurate battery tracking + +class MMMPromicroBoard : public NRF52BoardDCDC { +protected: + uint8_t btn_prev_state; + float adc_mult = ADC_MULTIPLIER; + +public: + MMMPromicroBoard() : NRF52Board("ProMicro_OTA") {} + void begin(); + + #define BATTERY_SAMPLES 8 + + uint16_t getBattMilliVolts() override { + analogReadResolution(12); + + uint32_t raw = 0; + for (int i = 0; i < BATTERY_SAMPLES; i++) { + raw += analogRead(PIN_VBAT_READ); + } + raw = raw / BATTERY_SAMPLES; + return (adc_mult * raw); + } + + bool setAdcMultiplier(float multiplier) override { + if (multiplier == 0.0f) { + adc_mult = ADC_MULTIPLIER;} + else { + adc_mult = multiplier; + } + return true; + } + float getAdcMultiplier() const override { + if (adc_mult == 0.0f) { + return ADC_MULTIPLIER; + } else { + return adc_mult; + } + } + + const char* getManufacturerName() const override { + return "ProMicro DIY"; + } + + int buttonStateChanged() { + #ifdef BUTTON_PIN + uint8_t v = digitalRead(BUTTON_PIN); + if (v != btn_prev_state) { + btn_prev_state = v; + return (v == LOW) ? 1 : -1; + } + #endif + return 0; + } +}; diff --git a/variants/modular_mesh_maker/platformio.ini b/variants/modular_mesh_maker/platformio.ini new file mode 100644 index 0000000000..d0a8b87e79 --- /dev/null +++ b/variants/modular_mesh_maker/platformio.ini @@ -0,0 +1,192 @@ +[mmm_promicro] +extends = nrf52_base +board = promicro_nrf52840 +build_flags = ${nrf52_base.build_flags} + -I variants/modular_mesh_maker + -D MMM_PROMICRO + -D RADIO_CLASS=CustomLR2021 + -D WRAPPER_CLASS=CustomLR2021Wrapper + -D USE_LR2021 + -D P_LORA_POWER_EN=2 + -D P_LORA_DIO_1=11 + -D LR2021_IRQ_DIO=9 + -D P_LORA_NSS=13 + -D P_LORA_SCLK=12 + -D P_LORA_MOSI=14 + -D P_LORA_MISO=15 + -D P_LORA_RESET=10 + -D P_LORA_BUSY=16 + -D LR2021_TCXO_VOLTAGE=3.3f + -D RF_SWITCH_TABLE + -D LORA_TX_POWER=22 + -D PIN_BOARD_SCL=7 + -D PIN_BOARD_SDA=8 + -D PIN_OLED_RESET=-1 + -D PIN_USER_BTN=6 +; GPS RX and TX are defined backwards by Meshcore +; PIN_GPS_RX is output to GPS uart +; PIN_GPS_TX is input from GPS uart + -D PIN_GPS_RX=4 + -D PIN_GPS_TX=3 + -D PIN_GPS_EN=5 + -D GPS_BAUD_RATE=115200 + -D ENV_INCLUDE_GPS=1 + -D ENV_INCLUDE_AHTX0=1 + -D ENV_INCLUDE_BME280=1 + -D ENV_INCLUDE_BMP280=1 + -D ENV_INCLUDE_INA3221=1 + -D ENV_INCLUDE_INA219=1 +build_src_filter = ${nrf52_base.build_src_filter} + + + +<../variants/modular_mesh_maker> +lib_deps= ${nrf52_base.lib_deps} + adafruit/Adafruit SSD1306 @ ^2.5.13 + adafruit/Adafruit INA3221 Library @ ^1.0.1 + adafruit/Adafruit INA219 @ ^1.2.3 + adafruit/Adafruit AHTX0 @ ^2.0.5 + adafruit/Adafruit BME280 Library @ ^2.3.0 + adafruit/Adafruit BMP280 Library@^2.6.8 + stevemarple/MicroNMEA @ ^2.0.6 + +[env:mmm_promicro_repeater] +extends = mmm_promicro +build_src_filter = ${mmm_promicro.build_src_filter} + +<../examples/simple_repeater> + + + + +build_flags = + ${mmm_promicro.build_flags} + -D ADVERT_NAME='"Modular Mesh Maker Repeater"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 + -D DISPLAY_CLASS=SSD1306Display +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +lib_deps = ${mmm_promicro.lib_deps} + adafruit/RTClib @ ^2.1.3 + +[env:mmm_promicro_repeater_bridge_rs232_serial1] +extends = mmm_promicro +build_src_filter = ${mmm_promicro.build_src_filter} + +<../examples/simple_repeater> + + + + + + +build_flags = + ${mmm_promicro.build_flags} + -D ADVERT_NAME='"RS232 Bridge"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 + -D DISPLAY_CLASS=SSD1306Display + -D WITH_RS232_BRIDGE=Serial1 + -D WITH_RS232_BRIDGE_RX=PIN_SERIAL1_RX + -D WITH_RS232_BRIDGE_TX=PIN_SERIAL1_TX + -UENV_INCLUDE_GPS +; -D BRIDGE_DEBUG=1 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +lib_deps = ${mmm_promicro.lib_deps} + adafruit/RTClib @ ^2.1.3 + +[env:mmm_promicro_room_server] +extends = mmm_promicro +build_src_filter = ${mmm_promicro.build_src_filter} + +<../examples/simple_room_server> + + + + +build_flags = ${mmm_promicro.build_flags} + -D ADVERT_NAME='"Modular Mesh Maker Room"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D ROOM_PASSWORD='"hello"' + -D DISPLAY_CLASS=SSD1306Display +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +lib_deps = ${mmm_promicro.lib_deps} + adafruit/RTClib @ ^2.1.3 + +[env:mmm_promicro_terminal_chat] +extends = mmm_promicro +build_flags = ${mmm_promicro.build_flags} + -D MAX_CONTACTS=100 + -D MAX_GROUP_CHANNELS=1 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${mmm_promicro.build_src_filter} + +<../examples/simple_secure_chat/main.cpp> +lib_deps = ${mmm_promicro.lib_deps} + densaugeo/base64 @ ~1.4.0 + adafruit/RTClib @ ^2.1.3 + +[env:mmm_promicro_companion_radio_usb] +extends = mmm_promicro +board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld +board_upload.maximum_size = 712704 +build_flags = ${mmm_promicro.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D DISPLAY_CLASS=SSD1306Display + -D ENABLE_USB_INTERFACE +; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 +; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 +build_src_filter = ${mmm_promicro.build_src_filter} + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = ${mmm_promicro.lib_deps} + adafruit/RTClib @ ^2.1.3 + densaugeo/base64 @ ~1.4.0 + +[env:mmm_promicro_companion_radio_ble] +extends = mmm_promicro +board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld +board_upload.maximum_size = 712704 +build_flags = ${mmm_promicro.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D BLE_PIN_CODE=123456 + -D BLE_DEBUG_LOGGING=1 + -D OFFLINE_QUEUE_SIZE=256 + -D DISPLAY_CLASS=SSD1306Display +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${mmm_promicro.build_src_filter} + + + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = ${mmm_promicro.lib_deps} + adafruit/RTClib @ ^2.1.3 + densaugeo/base64 @ ~1.4.0 + +[env:mmm_promicro_sensor] +extends = mmm_promicro +build_flags = + ${mmm_promicro.build_flags} + -D ADVERT_NAME='"Modular Mesh Maker Sensor"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D DISPLAY_CLASS=SSD1306Display +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${mmm_promicro.build_src_filter} + + + + + +<../examples/simple_sensor> +lib_deps = + ${mmm_promicro.lib_deps} + +[env:mmm_promicro_kiss_modem] +extends = mmm_promicro +build_src_filter = ${mmm_promicro.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/modular_mesh_maker/target.cpp b/variants/modular_mesh_maker/target.cpp new file mode 100644 index 0000000000..c510375748 --- /dev/null +++ b/variants/modular_mesh_maker/target.cpp @@ -0,0 +1,60 @@ +#include +#include "target.h" +#include + +MMMPromicroBoard board; + +RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); + +WRAPPER_CLASS radio_driver(radio, board); + +VolatileRTCClock fallback_clock; +AutoDiscoverRTCClock rtc_clock(fallback_clock); +#if ENV_INCLUDE_GPS + #include + MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, &rtc_clock); + EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); +#else + EnvironmentSensorManager sensors; +#endif + +#ifdef DISPLAY_CLASS + DISPLAY_CLASS display; + MomentaryButton user_btn(PIN_USER_BTN, 1000, true, true); +#endif + +const uint32_t rfswitch_dios[] = { + RADIOLIB_LR2021_DIO5, + RADIOLIB_LR2021_DIO6, + RADIOLIB_LR2021_DIO7, + RADIOLIB_LR2021_DIO8, + RADIOLIB_NC +}; + +static const Module::RfSwitchMode_t rfswitch_table[] = { + // mode DIO5 DIO6 DIO7 DIO8 + { LR2021::MODE_STBY, {LOW, LOW, LOW, LOW }}, + { LR2021::MODE_RX, {LOW, LOW, LOW, LOW }}, // sub-GHz RX is passive on the F33 + { LR2021::MODE_TX, {LOW, HIGH, LOW, LOW }}, // DIO6 = sub-GHz TXEN (PA key) + { LR2021::MODE_RX_HF, {HIGH, LOW, LOW, LOW}}, // 2.4G TX (never selected at 915MHz) + { LR2021::MODE_TX_HF, {LOW, LOW, HIGH, HIGH}}, // 2.4G TX (never selected at 915MHz) + END_OF_MODE_TABLE, +}; + +bool radio_init() { + rtc_clock.begin(Wire); + + int err = radio.std_init(&SPI); + if (err != 1) return err; + +#ifdef RF_SWITCH_TABLE + radio.setRfSwitchTable(rfswitch_dios, rfswitch_table); +#endif + + return true; +} + +mesh::LocalIdentity radio_new_identity() { + RadioNoiseListener rng(radio); + return mesh::LocalIdentity(&rng); // create new random identity +} diff --git a/variants/modular_mesh_maker/target.h b/variants/modular_mesh_maker/target.h new file mode 100644 index 0000000000..86e979ac45 --- /dev/null +++ b/variants/modular_mesh_maker/target.h @@ -0,0 +1,27 @@ +#pragma once + +#define RADIOLIB_STATIC_ONLY 1 +#include +#include +#include +#include +#include +#ifdef DISPLAY_CLASS + #include + #include +#endif + +#include + +extern MMMPromicroBoard board; +extern WRAPPER_CLASS radio_driver; +extern AutoDiscoverRTCClock rtc_clock; +extern EnvironmentSensorManager sensors; + +#ifdef DISPLAY_CLASS + extern DISPLAY_CLASS display; + extern MomentaryButton user_btn; +#endif + +bool radio_init(); +mesh::LocalIdentity radio_new_identity(); diff --git a/variants/modular_mesh_maker/variant.cpp b/variants/modular_mesh_maker/variant.cpp new file mode 100644 index 0000000000..0a4c3aac5b --- /dev/null +++ b/variants/modular_mesh_maker/variant.cpp @@ -0,0 +1,15 @@ +#include "variant.h" +#include "wiring_constants.h" +#include "wiring_digital.h" + +const uint32_t g_ADigitalPinMap[] = { + 8, 6, 17, 20, 22, 24, 32, 11, 36, 38, + 9, 10, 43, 45, 47, 2, 29, 31, + 33, 34, 37, + 13, 15 +}; + +void initVariant() +{ +} + diff --git a/variants/modular_mesh_maker/variant.h b/variants/modular_mesh_maker/variant.h new file mode 100644 index 0000000000..98489da193 --- /dev/null +++ b/variants/modular_mesh_maker/variant.h @@ -0,0 +1,82 @@ +/* + * variant.h + * Copyright (C) 2023 Seeed K.K. + * MIT License + */ + + #pragma once + + #include "WVariant.h" + + //////////////////////////////////////////////////////////////////////////////// + // Low frequency clock source + +#define VARIANT_MCK (64000000ul) + +//#define USE_LFXO // 32.768 kHz crystal oscillator +#define USE_LFRC // 32.768 kHz RC oscillator + +//////////////////////////////////////////////////////////////////////////////// +// Power + +#define PIN_EXT_VCC (21) +#define EXT_VCC (PIN_EXT_VCC) + +#define BATTERY_PIN (17) +#define ADC_RESOLUTION 12 + +//////////////////////////////////////////////////////////////////////////////// +// Number of pins + +#define PINS_COUNT (23) +#define NUM_DIGITAL_PINS (23) +#define NUM_ANALOG_INPUTS (3) +#define NUM_ANALOG_OUTPUTS (0) + +//////////////////////////////////////////////////////////////////////////////// +// UART pin definition + +#define PIN_SERIAL1_TX (1) +#define PIN_SERIAL1_RX (0) + +//////////////////////////////////////////////////////////////////////////////// +// I2C pin definition + +#define WIRE_INTERFACES_COUNT 2 + +#define PIN_WIRE_SDA (6) +#define PIN_WIRE_SCL (7) +#define PIN_WIRE1_SDA (13) +#define PIN_WIRE1_SCL (14) + +//////////////////////////////////////////////////////////////////////////////// +// SPI pin definition + +#define SPI_INTERFACES_COUNT 2 + +#define PIN_SPI_SCK (2) +#define PIN_SPI_MISO (3) +#define PIN_SPI_MOSI (4) + +#define PIN_SPI_NSS (5) + +#define PIN_SPI1_SCK (18) +#define PIN_SPI1_MISO (19) +#define PIN_SPI1_MOSI (20) + +//////////////////////////////////////////////////////////////////////////////// +// Builtin LEDs + +#define PIN_LED (22) +#define LED_PIN PIN_LED +#define LED_BLUE PIN_LED +#define LED_BUILTIN PIN_LED +#define LED_STATE_ON 1 + +//////////////////////////////////////////////////////////////////////////////// +// Builtin buttons + +#define PIN_BUTTON1 (6) +#define BUTTON_PIN PIN_BUTTON1 + + From 5bb39b603e26f4d60a7ca54b252b416d01b3844a Mon Sep 17 00:00:00 2001 From: brad Date: Thu, 20 Aug 2026 21:15:56 -0500 Subject: [PATCH 2/2] Add support for Xiao NRF52 and ProMicro with both NiceRF LR2021 and EByte E22P 1W radios --- .../{MMMPromicroBoard.cpp => MMMBoard.cpp} | 4 +- .../{MMMPromicroBoard.h => MMMBoard.h} | 6 +- variants/modular_mesh_maker/platformio.ini | 239 +++++++++--------- variants/modular_mesh_maker/target.cpp | 40 +-- variants/modular_mesh_maker/target.h | 12 +- variants/modular_mesh_maker/variant.cpp | 88 ++++++- variants/modular_mesh_maker/variant.h | 221 ++++++++++++---- 7 files changed, 410 insertions(+), 200 deletions(-) rename variants/modular_mesh_maker/{MMMPromicroBoard.cpp => MMMBoard.cpp} (87%) rename variants/modular_mesh_maker/{MMMPromicroBoard.h => MMMBoard.h} (90%) diff --git a/variants/modular_mesh_maker/MMMPromicroBoard.cpp b/variants/modular_mesh_maker/MMMBoard.cpp similarity index 87% rename from variants/modular_mesh_maker/MMMPromicroBoard.cpp rename to variants/modular_mesh_maker/MMMBoard.cpp index 866650181e..f88dfdd1b9 100644 --- a/variants/modular_mesh_maker/MMMPromicroBoard.cpp +++ b/variants/modular_mesh_maker/MMMBoard.cpp @@ -1,9 +1,9 @@ #include #include -#include "MMMPromicroBoard.h" +#include "MMMBoard.h" -void MMMPromicroBoard::begin() { +void MMMBoard::begin() { NRF52Board::begin(); btn_prev_state = HIGH; diff --git a/variants/modular_mesh_maker/MMMPromicroBoard.h b/variants/modular_mesh_maker/MMMBoard.h similarity index 90% rename from variants/modular_mesh_maker/MMMPromicroBoard.h rename to variants/modular_mesh_maker/MMMBoard.h index d4429b0a71..a3ba5e2442 100644 --- a/variants/modular_mesh_maker/MMMPromicroBoard.h +++ b/variants/modular_mesh_maker/MMMBoard.h @@ -7,13 +7,13 @@ #define PIN_VBAT_READ 17 #define ADC_MULTIPLIER (1.815f) // dependent on voltage divider resistors. TODO: more accurate battery tracking -class MMMPromicroBoard : public NRF52BoardDCDC { +class MMMBoard : public NRF52BoardDCDC { protected: uint8_t btn_prev_state; float adc_mult = ADC_MULTIPLIER; public: - MMMPromicroBoard() : NRF52Board("ProMicro_OTA") {} + MMMBoard() : NRF52Board("MMM_OTA") {} void begin(); #define BATTERY_SAMPLES 8 @@ -46,7 +46,7 @@ class MMMPromicroBoard : public NRF52BoardDCDC { } const char* getManufacturerName() const override { - return "ProMicro DIY"; + return MANUFACTURER_STRING; } int buttonStateChanged() { diff --git a/variants/modular_mesh_maker/platformio.ini b/variants/modular_mesh_maker/platformio.ini index d0a8b87e79..f51d488c59 100644 --- a/variants/modular_mesh_maker/platformio.ini +++ b/variants/modular_mesh_maker/platformio.ini @@ -1,24 +1,37 @@ +[modular_mesh_maker] +build_flags = ${nrf52_base.build_flags} + -I variants/modular_mesh_maker + -D MANUFACTURER_STRING='"Modular Mesh Maker"' + -D ENV_INCLUDE_AHTX0=1 + -D ENV_INCLUDE_BME280=1 + -D ENV_INCLUDE_BMP280=1 + -D ENV_INCLUDE_INA3221=1 + -D ENV_INCLUDE_INA219=1 +build_src_filter = ${nrf52_base.build_src_filter} + + + +<../variants/modular_mesh_maker> +lib_deps= ${nrf52_base.lib_deps} + adafruit/Adafruit SSD1306 @ ^2.5.13 + adafruit/Adafruit INA3221 Library @ ^1.0.1 + adafruit/Adafruit INA219 @ ^1.2.3 + adafruit/Adafruit AHTX0 @ ^2.0.5 + adafruit/Adafruit BME280 Library @ ^2.3.0 + adafruit/Adafruit BMP280 Library@^2.6.8 + [mmm_promicro] extends = nrf52_base board = promicro_nrf52840 -build_flags = ${nrf52_base.build_flags} - -I variants/modular_mesh_maker - -D MMM_PROMICRO - -D RADIO_CLASS=CustomLR2021 - -D WRAPPER_CLASS=CustomLR2021Wrapper - -D USE_LR2021 +build_src_filter = ${modular_mesh_maker.build_src_filter} +build_flags = ${modular_mesh_maker.build_flags} + -D PROMICRO -D P_LORA_POWER_EN=2 -D P_LORA_DIO_1=11 - -D LR2021_IRQ_DIO=9 -D P_LORA_NSS=13 -D P_LORA_SCLK=12 -D P_LORA_MOSI=14 -D P_LORA_MISO=15 -D P_LORA_RESET=10 -D P_LORA_BUSY=16 - -D LR2021_TCXO_VOLTAGE=3.3f - -D RF_SWITCH_TABLE - -D LORA_TX_POWER=22 -D PIN_BOARD_SCL=7 -D PIN_BOARD_SDA=8 -D PIN_OLED_RESET=-1 @@ -31,31 +44,73 @@ build_flags = ${nrf52_base.build_flags} -D PIN_GPS_EN=5 -D GPS_BAUD_RATE=115200 -D ENV_INCLUDE_GPS=1 - -D ENV_INCLUDE_AHTX0=1 - -D ENV_INCLUDE_BME280=1 - -D ENV_INCLUDE_BMP280=1 - -D ENV_INCLUDE_INA3221=1 - -D ENV_INCLUDE_INA219=1 -build_src_filter = ${nrf52_base.build_src_filter} - + - +<../variants/modular_mesh_maker> -lib_deps= ${nrf52_base.lib_deps} - adafruit/Adafruit SSD1306 @ ^2.5.13 - adafruit/Adafruit INA3221 Library @ ^1.0.1 - adafruit/Adafruit INA219 @ ^1.2.3 - adafruit/Adafruit AHTX0 @ ^2.0.5 - adafruit/Adafruit BME280 Library @ ^2.3.0 - adafruit/Adafruit BMP280 Library@^2.6.8 +lib_deps = ${modular_mesh_maker.lib_deps} stevemarple/MicroNMEA @ ^2.0.6 -[env:mmm_promicro_repeater] +[mmm_xiaonrf52] +extends = nrf52_base +board = seeed-xiao-afruitnrf52-nrf52840 +board_build.ldscript = boards/nrf52840_s140_v7.ld +build_src_filter = ${modular_mesh_maker.build_src_filter} +build_flags = ${modular_mesh_maker.build_flags} + -D NRF52_PLATFORM + -D XIAO_NRF52 + -I lib/nrf52/s140_nrf52_7.3.0_API/include + -I lib/nrf52/s140_nrf52_7.3.0_API/include/nrf52 + -I src/helpers/nrf52 + -D P_LORA_TX_LED=D11 + -D DISPLAY_CLASS=SSD1306Display + -D DISPLAY_ROTATION=2 + -D P_LORA_DIO_1=1 + -D P_LORA_RESET=2 + -D P_LORA_BUSY=3 + -D P_LORA_NSS=4 + -D P_LORA_POWER_EN=5 + -D PIN_USER_BTN=0 + -D PIN_WIRE_SCL=7 + -D PIN_WIRE_SDA=6 + -UENV_INCLUDE_GPS +lib_deps = ${modular_mesh_maker.lib_deps} + +[mmm_lr2021] +extends = modular_mesh_maker +build_src_filter = ${modular_mesh_maker} +build_flags = + -D USE_LR2021 + -D RADIO_CLASS=CustomLR2021 + -D WRAPPER_CLASS=CustomLR2021Wrapper + -D LR2021_IRQ_DIO=9 + -D LR2021_TCXO_VOLTAGE=3.3f + -D RF_SWITCH_TABLE + -D LORA_TX_POWER=22 + +[mmm_e22p] +extends = modular_mesh_maker +build_src_filter = ${modular_mesh_maker} +build_flags = + -D USE_SX1262 + -D RADIO_CLASS=CustomSX1262 + -D WRAPPER_CLASS=CustomSX1262Wrapper + -D SX126X_POWER_EN=D5 + -D SX126X_TXEN=RADIOLIB_NC + -D SX126X_DIO2_AS_RF_SWITCH=1 + -D SX126X_DIO3_TCXO_VOLTAGE=1.8 + -D SX126X_CURRENT_LIMIT=140 + -D SX126X_RX_BOOSTED_GAIN=1 + -D LORA_TX_POWER=18 + +[env:mmm_promicro_e22p_repeater] extends = mmm_promicro -build_src_filter = ${mmm_promicro.build_src_filter} +build_src_filter = ${modular_mesh_maker.build_src_filter} + ${mmm_promicro.build_src_filter} + ${mmm_e22p.build_src_filter} +<../examples/simple_repeater> + + build_flags = + ${modular_mesh_maker.build_flags} ${mmm_promicro.build_flags} + ${mmm_e22p.build_flags} -D ADVERT_NAME='"Modular Mesh Maker Repeater"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 @@ -64,129 +119,79 @@ build_flags = -D DISPLAY_CLASS=SSD1306Display ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 -lib_deps = ${mmm_promicro.lib_deps} +lib_deps = ${modular_mesh_maker.lib_deps} + ${mmm_promicro.lib_deps} adafruit/RTClib @ ^2.1.3 -[env:mmm_promicro_repeater_bridge_rs232_serial1] + +[env:mmm_promicro_lr2021_repeater] extends = mmm_promicro -build_src_filter = ${mmm_promicro.build_src_filter} +build_src_filter = ${modular_mesh_maker.build_src_filter} + ${mmm_promicro.build_src_filter} + ${mmm_lr2021.build_src_filter} +<../examples/simple_repeater> + + - + build_flags = + ${modular_mesh_maker.build_flags} ${mmm_promicro.build_flags} - -D ADVERT_NAME='"RS232 Bridge"' + ${mmm_lr2021.build_flags} + -D ADVERT_NAME='"Modular Mesh Maker Repeater"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 -D ADMIN_PASSWORD='"password"' -D MAX_NEIGHBOURS=50 -D DISPLAY_CLASS=SSD1306Display - -D WITH_RS232_BRIDGE=Serial1 - -D WITH_RS232_BRIDGE_RX=PIN_SERIAL1_RX - -D WITH_RS232_BRIDGE_TX=PIN_SERIAL1_TX - -UENV_INCLUDE_GPS -; -D BRIDGE_DEBUG=1 ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 -lib_deps = ${mmm_promicro.lib_deps} +lib_deps = ${modular_mesh_maker.lib_deps} + ${mmm_promicro.lib_deps} adafruit/RTClib @ ^2.1.3 -[env:mmm_promicro_room_server] -extends = mmm_promicro -build_src_filter = ${mmm_promicro.build_src_filter} - +<../examples/simple_room_server> +[env:mmm_xiaonrf52_e22p_repeater] +extends = mmm_xiaonrf52 +build_src_filter = ${modular_mesh_maker.build_src_filter} + ${mmm_xiaonrf52.build_src_filter} + ${mmm_e22p.build_src_filter} + +<../examples/simple_repeater> + + -build_flags = ${mmm_promicro.build_flags} - -D ADVERT_NAME='"Modular Mesh Maker Room"' +build_flags = + ${modular_mesh_maker.build_flags} + ${mmm_xiaonrf52.build_flags} + ${mmm_e22p.build_flags} + -D ADVERT_NAME='"Modular Mesh Maker Repeater"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 -D ADMIN_PASSWORD='"password"' - -D ROOM_PASSWORD='"hello"' + -D MAX_NEIGHBOURS=50 -D DISPLAY_CLASS=SSD1306Display ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 -lib_deps = ${mmm_promicro.lib_deps} - adafruit/RTClib @ ^2.1.3 - -[env:mmm_promicro_terminal_chat] -extends = mmm_promicro -build_flags = ${mmm_promicro.build_flags} - -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${mmm_promicro.build_src_filter} - +<../examples/simple_secure_chat/main.cpp> -lib_deps = ${mmm_promicro.lib_deps} - densaugeo/base64 @ ~1.4.0 +lib_deps = ${modular_mesh_maker.lib_deps} + ${mmm_xiaonrf52.lib_deps} adafruit/RTClib @ ^2.1.3 -[env:mmm_promicro_companion_radio_usb] -extends = mmm_promicro -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = ${mmm_promicro.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D DISPLAY_CLASS=SSD1306Display - -D ENABLE_USB_INTERFACE -; NOTE: DO NOT ENABLE --> -D MESH_PACKET_LOGGING=1 -; NOTE: DO NOT ENABLE --> -D MESH_DEBUG=1 -build_src_filter = ${mmm_promicro.build_src_filter} - + - + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = ${mmm_promicro.lib_deps} - adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 - -[env:mmm_promicro_companion_radio_ble] -extends = mmm_promicro -board_build.ldscript = boards/nrf52840_s140_v6_extrafs.ld -board_upload.maximum_size = 712704 -build_flags = ${mmm_promicro.build_flags} - -I examples/companion_radio/ui-new - -D MAX_CONTACTS=350 - -D MAX_GROUP_CHANNELS=40 - -D BLE_PIN_CODE=123456 - -D BLE_DEBUG_LOGGING=1 - -D OFFLINE_QUEUE_SIZE=256 - -D DISPLAY_CLASS=SSD1306Display -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 -build_src_filter = ${mmm_promicro.build_src_filter} - + +[env:mmm_xiaonrf52_lr2021_repeater] +extends = mmm_xiaonrf52 +build_src_filter = ${modular_mesh_maker.build_src_filter} + ${mmm_xiaonrf52.build_src_filter} + ${mmm_lr2021.build_src_filter} + +<../examples/simple_repeater> + + - +<../examples/companion_radio/*.cpp> - +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = ${mmm_promicro.lib_deps} - adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 - -[env:mmm_promicro_sensor] -extends = mmm_promicro build_flags = - ${mmm_promicro.build_flags} - -D ADVERT_NAME='"Modular Mesh Maker Sensor"' + ${modular_mesh_maker.build_flags} + ${mmm_xiaonrf52.build_flags} + ${mmm_lr2021.build_flags} + -D ADVERT_NAME='"Modular Mesh Maker Repeater"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 -D DISPLAY_CLASS=SSD1306Display ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 -build_src_filter = ${mmm_promicro.build_src_filter} - + - + - +<../examples/simple_sensor> -lib_deps = - ${mmm_promicro.lib_deps} - -[env:mmm_promicro_kiss_modem] -extends = mmm_promicro -build_src_filter = ${mmm_promicro.build_src_filter} - +<../examples/kiss_modem/> +lib_deps = ${modular_mesh_maker.lib_deps} + ${mmm_xiaonrf52.lib_deps} + adafruit/RTClib @ ^2.1.3 diff --git a/variants/modular_mesh_maker/target.cpp b/variants/modular_mesh_maker/target.cpp index c510375748..0385abeefb 100644 --- a/variants/modular_mesh_maker/target.cpp +++ b/variants/modular_mesh_maker/target.cpp @@ -2,7 +2,7 @@ #include "target.h" #include -MMMPromicroBoard board; +MMMBoard board; RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, SPI); @@ -23,23 +23,27 @@ AutoDiscoverRTCClock rtc_clock(fallback_clock); MomentaryButton user_btn(PIN_USER_BTN, 1000, true, true); #endif -const uint32_t rfswitch_dios[] = { - RADIOLIB_LR2021_DIO5, - RADIOLIB_LR2021_DIO6, - RADIOLIB_LR2021_DIO7, - RADIOLIB_LR2021_DIO8, - RADIOLIB_NC -}; - -static const Module::RfSwitchMode_t rfswitch_table[] = { - // mode DIO5 DIO6 DIO7 DIO8 - { LR2021::MODE_STBY, {LOW, LOW, LOW, LOW }}, - { LR2021::MODE_RX, {LOW, LOW, LOW, LOW }}, // sub-GHz RX is passive on the F33 - { LR2021::MODE_TX, {LOW, HIGH, LOW, LOW }}, // DIO6 = sub-GHz TXEN (PA key) - { LR2021::MODE_RX_HF, {HIGH, LOW, LOW, LOW}}, // 2.4G TX (never selected at 915MHz) - { LR2021::MODE_TX_HF, {LOW, LOW, HIGH, HIGH}}, // 2.4G TX (never selected at 915MHz) - END_OF_MODE_TABLE, -}; +#ifdef RF_SWITCH_TABLE + + const uint32_t rfswitch_dios[] = { + RADIOLIB_LR2021_DIO5, + RADIOLIB_LR2021_DIO6, + RADIOLIB_LR2021_DIO7, + RADIOLIB_LR2021_DIO8, + RADIOLIB_NC + }; + + static const Module::RfSwitchMode_t rfswitch_table[] = { + // mode DIO5 DIO6 DIO7 DIO8 + { LR2021::MODE_STBY, {LOW, LOW, LOW, LOW }}, + { LR2021::MODE_RX, {LOW, LOW, LOW, LOW }}, // sub-GHz RX is passive on the F33 + { LR2021::MODE_TX, {LOW, HIGH, LOW, LOW }}, // DIO6 = sub-GHz TXEN (PA key) + { LR2021::MODE_RX_HF, {HIGH, LOW, LOW, LOW}}, // 2.4G TX (never selected at 915MHz) + { LR2021::MODE_TX_HF, {LOW, LOW, HIGH, HIGH}}, // 2.4G TX (never selected at 915MHz) + END_OF_MODE_TABLE, + }; + +#endif bool radio_init() { rtc_clock.begin(Wire); diff --git a/variants/modular_mesh_maker/target.h b/variants/modular_mesh_maker/target.h index 86e979ac45..aa66e34449 100644 --- a/variants/modular_mesh_maker/target.h +++ b/variants/modular_mesh_maker/target.h @@ -3,8 +3,14 @@ #define RADIOLIB_STATIC_ONLY 1 #include #include -#include -#include +#include + +#if defined(USE_LR2021) + #include +#elif defined(USE_SX1262) + #include +#endif + #include #ifdef DISPLAY_CLASS #include @@ -13,7 +19,7 @@ #include -extern MMMPromicroBoard board; +extern MMMBoard board; extern WRAPPER_CLASS radio_driver; extern AutoDiscoverRTCClock rtc_clock; extern EnvironmentSensorManager sensors; diff --git a/variants/modular_mesh_maker/variant.cpp b/variants/modular_mesh_maker/variant.cpp index 0a4c3aac5b..0045131a14 100644 --- a/variants/modular_mesh_maker/variant.cpp +++ b/variants/modular_mesh_maker/variant.cpp @@ -2,14 +2,84 @@ #include "wiring_constants.h" #include "wiring_digital.h" -const uint32_t g_ADigitalPinMap[] = { - 8, 6, 17, 20, 22, 24, 32, 11, 36, 38, - 9, 10, 43, 45, 47, 2, 29, 31, - 33, 34, 37, - 13, 15 -}; +#if defined(PROMICRO) + const uint32_t g_ADigitalPinMap[] = { + 8, // P0.08 = 0 + 6, // P0.06 = 1 + 17, // P0.17 = 2 + 20, // P0.20 = 3 + 22, // P0.22 = 4 + 24, // P0.24 = 5 + 32, // P1.00 = 6 + 11, // P0.11 = 7 + 36, // P1.04 = 8 + 38, // P1.06 = 9 + 9, // P0.09 = 10 + 10, // P0.10 = 11 + 43, // P1.11 = 12 + 45, // P1.13 = 13 + 47, // P1.15 = 14 + 2, // P0.02 = 15 + 29, // P0.29 = 16 + 31, // P0.31 = 17 + 33, // P1.01 = 18 + 34, // P1.02 = 19 + 37, // P1.05 = 20 + 13, // P0.13 = 21 + 15 // P0.15 = 22 + }; -void initVariant() -{ -} +#elif defined(XIAO_NRF52) + const uint32_t g_ADigitalPinMap[] = { + // D0 .. D10 + 2, // D0 is P0.02 (A0) + 3, // D1 is P0.03 (A1) + 28, // D2 is P0.28 (A2) + 29, // D3 is P0.29 (A3) + 4, // D4 is P0.04 (A4,SDA) + 5, // D5 is P0.05 (A5,SCL) + 43, // D6 is P1.11 (TX) + 44, // D7 is P1.12 (RX) + 45, // D8 is P1.13 (SCK) + 46, // D9 is P1.14 (MISO) + 47, // D10 is P1.15 (MOSI) + // LEDs + 26, // D11 is P0.26 (LED RED) + 6, // D12 is P0.06 (LED BLUE) + 30, // D13 is P0.30 (LED GREEN) + 14, // D14 is P0.14 (READ_BAT) + + // LSM6DS3TR + 40, // D15 is P1.08 (6D_PWR) + 27, // D16 is P0.27 (6D_I2C_SCL) + 7, // D17 is P0.07 (6D_I2C_SDA) + 11, // D18 is P0.11 (6D_INT1) + + // MIC + 42, // D19 is P1.10 (MIC_PWR) + 32, // D20 is P1.00 (PDM_CLK) + 16, // D21 is P0.16 (PDM_DATA) + + // BQ25100 + 13, // D22 is P0.13 (HICHG) + 17, // D23 is P0.17 (~CHG) + + // + 21, // D24 is P0.21 (QSPI_SCK) + 25, // D25 is P0.25 (QSPI_CSN) + 20, // D26 is P0.20 (QSPI_SIO_0 DI) + 24, // D27 is P0.24 (QSPI_SIO_1 DO) + 22, // D28 is P0.22 (QSPI_SIO_2 WP) + 23, // D29 is P0.23 (QSPI_SIO_3 HOLD) + + // NFC + 9, // D30 is P0.09 (NFC1) + 10, // D31 is P0.10 (NFC2) + + // VBAT + 31, // D32 is P0.31 (VBAT) + }; + +#endif +void initVariant() {} diff --git a/variants/modular_mesh_maker/variant.h b/variants/modular_mesh_maker/variant.h index 98489da193..fb1a750d9c 100644 --- a/variants/modular_mesh_maker/variant.h +++ b/variants/modular_mesh_maker/variant.h @@ -7,76 +7,201 @@ #pragma once #include "WVariant.h" - + //////////////////////////////////////////////////////////////////////////////// - // Low frequency clock source + // Low frequency clock source #define VARIANT_MCK (64000000ul) -//#define USE_LFXO // 32.768 kHz crystal oscillator -#define USE_LFRC // 32.768 kHz RC oscillator +#if defined(PROMICRO) + + //#define USE_LFXO // 32.768 kHz crystal oscillator + #define USE_LFRC // 32.768 kHz RC oscillator + + //////////////////////////////////////////////////////////////////////////////// + // Power + + #define PIN_EXT_VCC (21) + #define EXT_VCC (PIN_EXT_VCC) + + #define BATTERY_PIN (17) + #define ADC_RESOLUTION 12 + + //////////////////////////////////////////////////////////////////////////////// + // Number of pins + + #define PINS_COUNT (23) + #define NUM_DIGITAL_PINS (23) + #define NUM_ANALOG_INPUTS (3) + #define NUM_ANALOG_OUTPUTS (0) + + //////////////////////////////////////////////////////////////////////////////// + // UART pin definition + + #define PIN_SERIAL1_TX (1) + #define PIN_SERIAL1_RX (0) + + //////////////////////////////////////////////////////////////////////////////// + // I2C pin definition -//////////////////////////////////////////////////////////////////////////////// -// Power + #define WIRE_INTERFACES_COUNT 2 -#define PIN_EXT_VCC (21) -#define EXT_VCC (PIN_EXT_VCC) + #define PIN_WIRE_SDA (6) + #define PIN_WIRE_SCL (7) + #define PIN_WIRE1_SDA (13) + #define PIN_WIRE1_SCL (14) -#define BATTERY_PIN (17) -#define ADC_RESOLUTION 12 + //////////////////////////////////////////////////////////////////////////////// + // SPI pin definition -//////////////////////////////////////////////////////////////////////////////// -// Number of pins + #define SPI_INTERFACES_COUNT 2 -#define PINS_COUNT (23) -#define NUM_DIGITAL_PINS (23) -#define NUM_ANALOG_INPUTS (3) -#define NUM_ANALOG_OUTPUTS (0) + #define PIN_SPI_SCK (2) + #define PIN_SPI_MISO (3) + #define PIN_SPI_MOSI (4) -//////////////////////////////////////////////////////////////////////////////// -// UART pin definition + #define PIN_SPI_NSS (5) -#define PIN_SERIAL1_TX (1) -#define PIN_SERIAL1_RX (0) + #define PIN_SPI1_SCK (18) + #define PIN_SPI1_MISO (19) + #define PIN_SPI1_MOSI (20) -//////////////////////////////////////////////////////////////////////////////// -// I2C pin definition + //////////////////////////////////////////////////////////////////////////////// + // Builtin LEDs -#define WIRE_INTERFACES_COUNT 2 + #define PIN_LED (22) + #define LED_PIN PIN_LED + #define LED_BLUE PIN_LED + #define LED_BUILTIN PIN_LED + #define LED_STATE_ON 1 -#define PIN_WIRE_SDA (6) -#define PIN_WIRE_SCL (7) -#define PIN_WIRE1_SDA (13) -#define PIN_WIRE1_SCL (14) + //////////////////////////////////////////////////////////////////////////////// + // Builtin buttons -//////////////////////////////////////////////////////////////////////////////// -// SPI pin definition + #define PIN_BUTTON1 (6) + #define BUTTON_PIN PIN_BUTTON1 -#define SPI_INTERFACES_COUNT 2 +#elif defined(XIAO_NRF52) + #define USE_LFXO // Board uses 32khz crystal for LF + //#define USE_LFRC // Board uses RC for LF -#define PIN_SPI_SCK (2) -#define PIN_SPI_MISO (3) -#define PIN_SPI_MOSI (4) + #define PINS_COUNT (33) + #define NUM_DIGITAL_PINS (33) + #define NUM_ANALOG_INPUTS (8) + #define NUM_ANALOG_OUTPUTS (0) -#define PIN_SPI_NSS (5) + // LEDs + #define PIN_LED (LED_RED) + #define LED_PWR (PINS_COUNT) + #define PIN_NEOPIXEL (PINS_COUNT) + #define NEOPIXEL_NUM (0) -#define PIN_SPI1_SCK (18) -#define PIN_SPI1_MISO (19) -#define PIN_SPI1_MOSI (20) + #define LED_BUILTIN (PIN_LED) -//////////////////////////////////////////////////////////////////////////////// -// Builtin LEDs + #define LED_RED (11) + #define LED_GREEN (13) + #define LED_BLUE (12) -#define PIN_LED (22) -#define LED_PIN PIN_LED -#define LED_BLUE PIN_LED -#define LED_BUILTIN PIN_LED -#define LED_STATE_ON 1 + #define LED_STATE_ON (0) // State when LED is litted -//////////////////////////////////////////////////////////////////////////////// -// Builtin buttons + // Buttons + #define PIN_BUTTON1 (PINS_COUNT) -#define PIN_BUTTON1 (6) -#define BUTTON_PIN PIN_BUTTON1 + // Digital PINs + static const uint8_t D0 = 0 ; + static const uint8_t D1 = 1 ; + static const uint8_t D2 = 2 ; + static const uint8_t D3 = 3 ; + static const uint8_t D4 = 4 ; + static const uint8_t D5 = 5 ; + static const uint8_t D6 = 6 ; + static const uint8_t D7 = 7 ; + static const uint8_t D8 = 8 ; + static const uint8_t D9 = 9 ; + static const uint8_t D10 = 10; + #define VBAT_ENABLE (14) // Output LOW to enable reading of the BAT voltage. + // https://wiki.seeedstudio.com/XIAO_BLE#q3-what-are-the-considerations-when-using-xiao-nrf52840-sense-for-battery-charging + #define PIN_CHARGING_CURRENT (22) // Battery Charging current + // https://wiki.seeedstudio.com/XIAO_BLE#battery-charging-current + + // Analog pins + #define PIN_A0 (0) + #define PIN_A1 (1) + #define PIN_A2 (2) + #define PIN_A3 (3) + #define PIN_A4 (4) + #define PIN_A5 (5) + #define PIN_VBAT (32) // Read the BAT voltage. + // https://wiki.seeedstudio.com/XIAO_BLE#q3-what-are-the-considerations-when-using-xiao-nrf52840-sense-for-battery-charging + + #define BAT_NOT_CHARGING (23) // LOW when charging + + #define AREF_VOLTAGE (3.0) + #define ADC_MULTIPLIER (3.0F) // 1M, 512k divider bridge + + static const uint8_t A0 = PIN_A0; + static const uint8_t A1 = PIN_A1; + static const uint8_t A2 = PIN_A2; + static const uint8_t A3 = PIN_A3; + static const uint8_t A4 = PIN_A4; + static const uint8_t A5 = PIN_A5; + + #define ADC_RESOLUTION (12) + + // Other pins + #define PIN_NFC1 (30) + #define PIN_NFC2 (31) + + // Serial interfaces + #define PIN_SERIAL1_RX (7) + #define PIN_SERIAL1_TX (6) + + // SPI Interfaces + #define SPI_INTERFACES_COUNT (2) + + #define PIN_SPI_MISO (9) + #define PIN_SPI_MOSI (10) + #define PIN_SPI_SCK (8) + + #define PIN_SPI1_MISO (25) + #define PIN_SPI1_MOSI (26) + #define PIN_SPI1_SCK (29) + + // Lora SPI is on SPI0 + #define P_LORA_SCLK PIN_SPI_SCK + #define P_LORA_MISO PIN_SPI_MISO + #define P_LORA_MOSI PIN_SPI_MOSI + + // Wire Interfaces + #define WIRE_INTERFACES_COUNT (1) + + // #define PIN_WIRE_SDA (17) // 4 and 5 are used for the sx1262 ! + // #define PIN_WIRE_SCL (16) // use WIRE1_SDA + + static const uint8_t SDA = PIN_WIRE_SDA; + static const uint8_t SCL = PIN_WIRE_SCL; + + //#define PIN_WIRE1_SDA (17) + //#define PIN_WIRE1_SCL (16) + #define PIN_LSM6DS3TR_C_POWER (15) + #define PIN_LSM6DS3TR_C_INT1 (18) + + // PDM Interfaces + #define PIN_PDM_PWR (19) + #define PIN_PDM_CLK (20) + #define PIN_PDM_DIN (21) + + // QSPI Pins + #define PIN_QSPI_SCK (24) + #define PIN_QSPI_CS (25) + #define PIN_QSPI_IO0 (26) + #define PIN_QSPI_IO1 (27) + #define PIN_QSPI_IO2 (28) + #define PIN_QSPI_IO3 (29) + + // On-board QSPI Flash + #define EXTERNAL_FLASH_DEVICES (P25Q16H) + #define EXTERNAL_FLASH_USE_QSPI +#endif