implement gpio input via mqtt
This commit is contained in:
2
Config.h
2
Config.h
@@ -4,3 +4,5 @@
|
|||||||
|
|
||||||
#define MQTT_QOS_LEVEL 1
|
#define MQTT_QOS_LEVEL 1
|
||||||
#define MQTT_CLEAN_SESSIONS false
|
#define MQTT_CLEAN_SESSIONS false
|
||||||
|
|
||||||
|
#define GPIO_DEBOUNCE_TIME 300
|
||||||
3
Gpio.cpp
3
Gpio.cpp
@@ -1,5 +1,6 @@
|
|||||||
#include <esp32-hal.h>
|
#include <esp32-hal.h>
|
||||||
#include "Gpio.h"
|
#include "Gpio.h"
|
||||||
|
#include "Config.h"
|
||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
#include "PreferencesKeys.h"
|
#include "PreferencesKeys.h"
|
||||||
@@ -8,7 +9,7 @@
|
|||||||
|
|
||||||
Gpio* Gpio::_inst = nullptr;
|
Gpio* Gpio::_inst = nullptr;
|
||||||
unsigned long Gpio::_debounceTs = 0;
|
unsigned long Gpio::_debounceTs = 0;
|
||||||
const uint Gpio::_debounceTime = 1000;
|
const uint Gpio::_debounceTime = GPIO_DEBOUNCE_TIME;
|
||||||
|
|
||||||
Gpio::Gpio(Preferences* preferences)
|
Gpio::Gpio(Preferences* preferences)
|
||||||
: _preferences(preferences)
|
: _preferences(preferences)
|
||||||
|
|||||||
28
Network.cpp
28
Network.cpp
@@ -246,6 +246,10 @@ void Network::initialize()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_gpio->addCallback([this](const GpioAction& action, const int& pin)
|
||||||
|
{
|
||||||
|
gpioActionCallback(action, pin);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Network::update()
|
bool Network::update()
|
||||||
@@ -345,6 +349,26 @@ bool Network::update()
|
|||||||
_lastMaintenanceTs = ts;
|
_lastMaintenanceTs = ts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(const auto& gpioTs : _gpioTs)
|
||||||
|
{
|
||||||
|
uint8_t pin = gpioTs.first;
|
||||||
|
unsigned long ts = gpioTs.second;
|
||||||
|
if(ts != 0 && ((millis() - ts) >= GPIO_DEBOUNCE_TIME))
|
||||||
|
{
|
||||||
|
_gpioTs[pin] = 0;
|
||||||
|
|
||||||
|
uint8_t pinState = digitalRead(pin) == HIGH ? 1 : 0;
|
||||||
|
char gpioPath[250];
|
||||||
|
buildMqttPath(gpioPath, {mqtt_topic_gpio_prefix, (mqtt_topic_gpio_pin + std::to_string(pin)).c_str(), mqtt_topic_gpio_state});
|
||||||
|
publishInt(_lockPath.c_str(), gpioPath, pinState);
|
||||||
|
|
||||||
|
Log->print(F("GPIO "));
|
||||||
|
Log->print(pin);
|
||||||
|
Log->print(F(" (Input) --> "));
|
||||||
|
Log->println(pinState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -581,6 +605,10 @@ void Network::parseGpioTopics(const espMqttClientTypes::MessageProperties &prope
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Network::gpioActionCallback(const GpioAction &action, const int &pin)
|
||||||
|
{
|
||||||
|
_gpioTs[pin] = millis();
|
||||||
|
}
|
||||||
|
|
||||||
void Network::reconfigureDevice()
|
void Network::reconfigureDevice()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ private:
|
|||||||
static void onMqttDataReceivedCallback(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t len, size_t index, size_t total);
|
static void onMqttDataReceivedCallback(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t len, size_t index, size_t total);
|
||||||
void onMqttDataReceived(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t& len, size_t& index, size_t& total);
|
void onMqttDataReceived(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t& len, size_t& index, size_t& total);
|
||||||
void parseGpioTopics(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t& len, size_t& index, size_t& total);
|
void parseGpioTopics(const espMqttClientTypes::MessageProperties& properties, const char* topic, const uint8_t* payload, size_t& len, size_t& index, size_t& total);
|
||||||
|
void gpioActionCallback(const GpioAction& action, const int& pin);
|
||||||
void setupDevice();
|
void setupDevice();
|
||||||
bool reconnect();
|
bool reconnect();
|
||||||
|
|
||||||
@@ -139,6 +140,7 @@ private:
|
|||||||
bool _mqttEnabled = true;
|
bool _mqttEnabled = true;
|
||||||
static unsigned long _ignoreSubscriptionsTs;
|
static unsigned long _ignoreSubscriptionsTs;
|
||||||
long _rssiPublishInterval = 0;
|
long _rssiPublishInterval = 0;
|
||||||
|
std::map<uint8_t, unsigned long> _gpioTs;
|
||||||
|
|
||||||
char* _buffer;
|
char* _buffer;
|
||||||
const size_t _bufferSize;
|
const size_t _bufferSize;
|
||||||
|
|||||||
Reference in New Issue
Block a user