From 36abaeee12c7358cfcfc8fa2f27268d558d46b2d Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Sun, 27 Nov 2022 12:07:25 +0100 Subject: [PATCH] Moved pin assignment outside the hoymiles library Allows setting the pins during runtime and not just using the defines --- lib/Hoymiles/src/Hoymiles.cpp | 4 ++-- lib/Hoymiles/src/Hoymiles.h | 2 +- lib/Hoymiles/src/HoymilesRadio.cpp | 11 +++++------ lib/Hoymiles/src/HoymilesRadio.h | 28 ++-------------------------- platformio.ini | 12 ++++++++++-- src/main.cpp | 4 +++- 6 files changed, 23 insertions(+), 38 deletions(-) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index 355a4db2..2b04ddc0 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -9,14 +9,14 @@ HoymilesClass Hoymiles; -void HoymilesClass::init() +void HoymilesClass::init(SPIClass* initialisedSpiBus, uint8_t pinCE, uint8_t pinIRQ) { _xSemaphore = xSemaphoreCreateMutex(); HOY_SEMAPHORE_GIVE(); // release before first use _pollInterval = 0; _radio.reset(new HoymilesRadio()); - _radio->init(); + _radio->init(initialisedSpiBus, pinCE, pinIRQ); } void HoymilesClass::loop() diff --git a/lib/Hoymiles/src/Hoymiles.h b/lib/Hoymiles/src/Hoymiles.h index 4b6d37d6..033eabe0 100644 --- a/lib/Hoymiles/src/Hoymiles.h +++ b/lib/Hoymiles/src/Hoymiles.h @@ -12,7 +12,7 @@ class HoymilesClass { public: - void init(); + void init(SPIClass* initialisedSpiBus, uint8_t pinCE, uint8_t pinIRQ); void loop(); std::shared_ptr addInverter(const char* name, uint64_t serial); diff --git a/lib/Hoymiles/src/HoymilesRadio.cpp b/lib/Hoymiles/src/HoymilesRadio.cpp index db70d8b5..a011105c 100644 --- a/lib/Hoymiles/src/HoymilesRadio.cpp +++ b/lib/Hoymiles/src/HoymilesRadio.cpp @@ -5,15 +5,14 @@ #include #include -void HoymilesRadio::init() +void HoymilesRadio::init(SPIClass* initialisedSpiBus, uint8_t pinCE, uint8_t pinIRQ) { _dtuSerial.u64 = 0; - _hspi.reset(new SPIClass(HSPI)); - _radio.reset(new RF24(HOYMILES_PIN_CE, HOYMILES_PIN_CS)); + _spiPtr.reset(initialisedSpiBus); + _radio.reset(new RF24(pinCE, initialisedSpiBus->pinSS())); - _hspi->begin(HOYMILES_PIN_SCLK, HOYMILES_PIN_MISO, HOYMILES_PIN_MOSI, HOYMILES_PIN_CS); - _radio->begin(_hspi.get()); + _radio->begin(_spiPtr.get()); _radio->setDataRate(RF24_250KBPS); _radio->enableDynamicPayloads(); @@ -27,7 +26,7 @@ void HoymilesRadio::init() Serial.println(F("Connection error!!")); } - attachInterrupt(digitalPinToInterrupt(HOYMILES_PIN_IRQ), std::bind(&HoymilesRadio::handleIntr, this), FALLING); + attachInterrupt(digitalPinToInterrupt(pinIRQ), std::bind(&HoymilesRadio::handleIntr, this), FALLING); openReadingPipe(); _radio->startListening(); diff --git a/lib/Hoymiles/src/HoymilesRadio.h b/lib/Hoymiles/src/HoymilesRadio.h index 1a29af93..7c624681 100644 --- a/lib/Hoymiles/src/HoymilesRadio.h +++ b/lib/Hoymiles/src/HoymilesRadio.h @@ -12,33 +12,9 @@ // number of fragments hold in buffer #define FRAGMENT_BUFFER_SIZE 30 -#ifndef HOYMILES_PIN_MISO -#define HOYMILES_PIN_MISO 19 -#endif - -#ifndef HOYMILES_PIN_MOSI -#define HOYMILES_PIN_MOSI 23 -#endif - -#ifndef HOYMILES_PIN_SCLK -#define HOYMILES_PIN_SCLK 18 -#endif - -#ifndef HOYMILES_PIN_IRQ -#define HOYMILES_PIN_IRQ 16 -#endif - -#ifndef HOYMILES_PIN_CE -#define HOYMILES_PIN_CE 4 -#endif - -#ifndef HOYMILES_PIN_CS -#define HOYMILES_PIN_CS 5 -#endif - class HoymilesRadio { public: - void init(); + void init(SPIClass* initialisedSpiBus, uint8_t pinCE, uint8_t pinIRQ); void loop(); void setPALevel(rf24_pa_dbm_e paLevel); @@ -71,7 +47,7 @@ private: void sendRetransmitPacket(uint8_t fragment_id); void sendLastPacketAgain(); - std::unique_ptr _hspi; + std::unique_ptr _spiPtr; std::unique_ptr _radio; uint8_t _rxChLst[5] = { 3, 23, 40, 61, 75 }; uint8_t _rxChIdx = 0; diff --git a/platformio.ini b/platformio.ini index 99f64fcf..41af65e4 100644 --- a/platformio.ini +++ b/platformio.ini @@ -20,6 +20,14 @@ build_flags = -DCOMPONENT_EMBED_FILES=webapp_dist/index.html.gz:webapp_dist/zones.json.gz:webapp_dist/favicon.ico:webapp_dist/js/app.js.gz -Wall -Wextra -Werror + ; Default pin assignment for all boards if not specified otherwise + -DHOYMILES_PIN_MISO=19 + -DHOYMILES_PIN_MOSI=23 + -DHOYMILES_PIN_SCLK=18 + -DHOYMILES_PIN_IRQ=16 + -DHOYMILES_PIN_CE=4 + -DHOYMILES_PIN_CS=5 + lib_deps = https://github.com/yubox-node-org/ESPAsyncWebServer bblanchon/ArduinoJson @ ^6.19.4 @@ -36,8 +44,8 @@ monitor_speed = 115200 upload_protocol = esptool ; Specify port here. Comment out (add ; in front of line) to use auto detection. -monitor_port = COM5 -upload_port = COM5 +monitor_port = COM4 +upload_port = COM4 [env:generic] diff --git a/src/main.cpp b/src/main.cpp index 24102c19..f641960b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -93,7 +93,9 @@ void setup() // Initialize inverter communication Serial.print(F("Initialize Hoymiles interface... ")); - Hoymiles.init(); + SPIClass* spiClass = new SPIClass(HSPI); + spiClass->begin(HOYMILES_PIN_SCLK, HOYMILES_PIN_MISO, HOYMILES_PIN_MOSI, HOYMILES_PIN_CS); + Hoymiles.init(spiClass, HOYMILES_PIN_CE, HOYMILES_PIN_IRQ); Serial.println(F(" Setting radio PA level... ")); Hoymiles.getRadio()->setPALevel((rf24_pa_dbm_e)config.Dtu_PaLevel);