From f0561c720c55226fd1bd50c0aaa945205733aa3b Mon Sep 17 00:00:00 2001 From: Christos Themelis Date: Tue, 17 Mar 2026 20:19:17 +0200 Subject: [PATCH] wip --- examples/companion_radio/MyMesh.cpp | 2 +- examples/companion_radio/main.cpp | 9 +- variants/heltec_v4/target.cpp | 1 + .../sensecap_indicator-espnow/platformio.ini | 4 + variants/sensecap_indicator-espnow/target.cpp | 84 +++++++++++-------- variants/sensecap_indicator-espnow/target.h | 41 ++++++++- 6 files changed, 101 insertions(+), 40 deletions(-) diff --git a/examples/companion_radio/MyMesh.cpp b/examples/companion_radio/MyMesh.cpp index d29ed4575..519271a0f 100644 --- a/examples/companion_radio/MyMesh.cpp +++ b/examples/companion_radio/MyMesh.cpp @@ -1760,7 +1760,7 @@ void MyMesh::handleCommand(const char* command) { } else { Serial.println(" Error: erase failed"); } - } else if (strcmp(cli_command, "reboot") == 0) { + } else if (strcmp(command, "reboot") == 0) { board.reboot(); // doesn't return } else { Serial.println(" Error: unknown command"); diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index 75d875e4c..a2fb4f609 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -373,6 +373,7 @@ void setup() { Serial.println("Setup completed"); + Serial.println(the_mesh.getNodeName()); the_mesh.advert(); Serial.print("MeshCore "); @@ -408,7 +409,9 @@ void loop() { vTaskDelete(NULL); } - -void handleCommand(const char* command) { - the_mesh.handleCommand(command); +void handleCommand(char *msg) +{ + Serial.println("Outgoing data:"); + Serial.println(msg); + the_mesh.handleCommand(msg); } \ No newline at end of file diff --git a/variants/heltec_v4/target.cpp b/variants/heltec_v4/target.cpp index 0d2bd4976..87b96b592 100644 --- a/variants/heltec_v4/target.cpp +++ b/variants/heltec_v4/target.cpp @@ -48,6 +48,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + } void radio_set_tx_power(uint8_t dbm) { diff --git a/variants/sensecap_indicator-espnow/platformio.ini b/variants/sensecap_indicator-espnow/platformio.ini index 07694149f..0e530f127 100644 --- a/variants/sensecap_indicator-espnow/platformio.ini +++ b/variants/sensecap_indicator-espnow/platformio.ini @@ -42,7 +42,11 @@ build_flags = -D CORE_DEBUG_LEVEL=4 ; 0: None, 1: Error, 2: Warn, 3: Info, 4: Debug, 5: Verbose -D LV_CONF_PATH=lv_conf.h -D SEEED_SENSECAP_INDICATOR + -D RADIO_CLASS=SX1262 + -D WRAPPER_CLASS=CustomSX1262Wrapper + -D PIN_USER_BTN=38 -D LANG_GR + -D LORA_TX_POWER=20 -D ADVERT_NAME='"SenseCap Client"' -D MAX_CONTACTS=350 -D MAX_GROUP_CHANNELS=8 diff --git a/variants/sensecap_indicator-espnow/target.cpp b/variants/sensecap_indicator-espnow/target.cpp index efdaac610..b6608bbbe 100644 --- a/variants/sensecap_indicator-espnow/target.cpp +++ b/variants/sensecap_indicator-espnow/target.cpp @@ -1,56 +1,74 @@ #include #include "target.h" -#include ESP32Board board; +//SenseCapIndicatorBoard board; -ESPNOWRadio radio_driver; +static SPIClass spi(FSPI); -ESP32RTCClock rtc_clock; -#if defined(ENV_INCLUDE_GPS) -MicroNMEALocationProvider nmea = MicroNMEALocationProvider(Serial1, (mesh::RTCClock*)&rtc_clock); -EnvironmentSensorManager sensors = EnvironmentSensorManager(nmea); -#else -EnvironmentSensorManager sensors = EnvironmentSensorManager(); -#endif +// SX1262 pins για SenseCAP Indicator Meshtastic edition +#define LORA_SCLK 5 +#define LORA_MISO 4 +#define LORA_MOSI 6 +#define LORA_NSS 7 +#define LORA_DIO1 2 +#define LORA_RESET 8 +#define LORA_BUSY 3 + +Module* module = new Module( + LORA_NSS, + LORA_DIO1, + LORA_RESET, + LORA_BUSY, + spi +); + +SX1262 radio(module); + +WRAPPER_CLASS radio_driver(&radio, board); + +ESP32RTCClock fallback_clock; +// AutoDiscoverRTCClock rtc_clock(fallback_clock); + +EnvironmentSensorManager sensors; + +// #ifdef DISPLAY_CLASS +// DISPLAY_CLASS display(&(board.periph_power)); +// MomentaryButton user_btn(PIN_USER_BTN, 1000, true); +// #endif -#ifdef DISPLAY_CLASS - DISPLAY_CLASS display; - #ifdef PIN_USER_BTN - MomentaryButton user_btn(PIN_USER_BTN, 1000, true, true); - #endif -#endif bool radio_init() { - rtc_clock.begin(); + fallback_clock.begin(); + rtc_clock.begin(Wire); + + spi.begin(LORA_SCLK, LORA_MISO, LORA_MOSI); - radio_driver.init(); + return radio_driver.std_init(&spi); - return true; // success + #if defined(P_LORA_SCLK) + return radio.std_init(&spi); + #else + return radio.std_init(); + #endif } uint32_t radio_get_rng_seed() { - return millis() + radio_driver.intID(); // TODO: where to get some entropy? + return radio.random(0x7FFFFFFF); } void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { - // no-op + radio.setFrequency(freq); + radio.setSpreadingFactor(sf); + radio.setBandwidth(bw); + radio.setCodingRate(cr); } void radio_set_tx_power(uint8_t dbm) { - radio_driver.setTxPower(dbm); + radio.setOutputPower(dbm); } -// NOTE: as we are using the WiFi radio, the ESP_IDF will have enabled hardware RNG: -// https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/random.html -class ESP_RNG : public mesh::RNG { -public: - void random(uint8_t* dest, size_t sz) override { - esp_fill_random(dest, sz); - } -}; - mesh::LocalIdentity radio_new_identity() { - ESP_RNG rng; - return mesh::LocalIdentity(&rng); // create new random identity -} + RadioNoiseListener rng(radio); + return mesh::LocalIdentity(&rng); +} \ No newline at end of file diff --git a/variants/sensecap_indicator-espnow/target.h b/variants/sensecap_indicator-espnow/target.h index bb78e9233..f15f44212 100644 --- a/variants/sensecap_indicator-espnow/target.h +++ b/variants/sensecap_indicator-espnow/target.h @@ -1,29 +1,64 @@ #pragma once +#include +#include + #include -#include +#include +#include +#include + #include #include + #ifdef ENV_INCLUDE_GPS #include #endif + #ifdef DISPLAY_CLASS #include "SCIndicatorDisplay.h" #include #endif + +// ------------------------------------------------- +// Board +// ------------------------------------------------- extern ESP32Board board; -extern ESPNOWRadio radio_driver; + + +// ------------------------------------------------- +// Radio (SX1262 - SenseCAP uses SX1262) +// ------------------------------------------------- +extern CustomSX1262Wrapper radio_driver; + + +// ------------------------------------------------- +// RTC +// ------------------------------------------------- extern ESP32RTCClock rtc_clock; + + +// ------------------------------------------------- +// Sensors +// ------------------------------------------------- extern EnvironmentSensorManager sensors; + +// ------------------------------------------------- +// Display + Button +// ------------------------------------------------- #ifdef DISPLAY_CLASS extern DISPLAY_CLASS display; extern MomentaryButton user_btn; #endif + +// ------------------------------------------------- +// Functions +// ------------------------------------------------- bool radio_init(); uint32_t radio_get_rng_seed(); void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); void radio_set_tx_power(uint8_t dbm); -mesh::LocalIdentity radio_new_identity(); +mesh::LocalIdentity radio_new_identity(); \ No newline at end of file