Moved pin assignment outside the hoymiles library

Allows setting the pins during runtime and not  just using the defines
This commit is contained in:
Thomas Basler 2022-11-27 12:07:25 +01:00
parent fe16a92a2f
commit 36abaeee12
6 changed files with 23 additions and 38 deletions

View File

@ -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()

View File

@ -12,7 +12,7 @@
class HoymilesClass {
public:
void init();
void init(SPIClass* initialisedSpiBus, uint8_t pinCE, uint8_t pinIRQ);
void loop();
std::shared_ptr<InverterAbstract> addInverter(const char* name, uint64_t serial);

View File

@ -5,15 +5,14 @@
#include <Every.h>
#include <FunctionalInterrupt.h>
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();

View File

@ -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<SPIClass> _hspi;
std::unique_ptr<SPIClass> _spiPtr;
std::unique_ptr<RF24> _radio;
uint8_t _rxChLst[5] = { 3, 23, 40, 61, 75 };
uint8_t _rxChIdx = 0;

View File

@ -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]

View File

@ -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);