113 lines
3.3 KiB
C++
113 lines
3.3 KiB
C++
#include <ExpansionCard.hpp>
|
|
#include <AnalogCard.hpp>
|
|
#include <AnalogIoT.hpp>
|
|
#include <DigitalInputCard.hpp>
|
|
#include <DigitalInputIoT.hpp>
|
|
#include <DigitalOutputCard.hpp>
|
|
#include <DigitalOutputIoT.hpp>
|
|
#include <IoTComponent.hpp>
|
|
#include <PubSubClient.h>
|
|
#include <ETH.h>
|
|
#include <WiFi.h>
|
|
#include <FRAM.h>
|
|
|
|
struct NetworkConfig
|
|
{
|
|
IPAddress ip;
|
|
IPAddress gateway;
|
|
IPAddress subnet;
|
|
IPAddress dns1;
|
|
IPAddress dns2;
|
|
char hostname[32];
|
|
bool useStaticIp;
|
|
bool useWifi;
|
|
bool wifiUseAuth;
|
|
char ssid[32];
|
|
char password[32];
|
|
};
|
|
|
|
struct MqttConfig
|
|
{
|
|
char mqtt_server[32];
|
|
uint16_t mqtt_port;
|
|
char mqtt_user[32];
|
|
char mqtt_password[32];
|
|
bool mqtt_useauth;
|
|
char base_topic[32];
|
|
};
|
|
|
|
class ESPMegaIoT
|
|
{
|
|
public:
|
|
ESPMegaIoT();
|
|
~ESPMegaIoT();
|
|
void intr_begin(ExpansionCard *cards[]);
|
|
void loop();
|
|
void registerCard(uint8_t card_id);
|
|
void deregisterCard(uint8_t card_id);
|
|
void publishCard(uint8_t card_id);
|
|
// Publish topic appended with base topic
|
|
void publishRelative(char *topic, char *payload);
|
|
// Subscribe topic appended with base topic
|
|
void subscribeRelative(char *topic);
|
|
void subscribeToTopic(char *topic);
|
|
void unsubscribeFromTopic(char *topic);
|
|
void connectToWifi(char *ssid, char *password);
|
|
void connectToWifi(char *ssid);
|
|
void disconnectFromWifi();
|
|
bool wifiConnected();
|
|
void ethernetBegin();
|
|
void loadNetworkConfig();
|
|
void saveNetworkConfig();
|
|
void setMqttConfig(MqttConfig mqtt_config);
|
|
void saveMqttConfig();
|
|
void loadMqttConfig();
|
|
void connectNetwork();
|
|
void setNetworkConfig(NetworkConfig network_config);
|
|
void connectToMqtt();
|
|
bool connectToMqtt(char *client_id, char *mqtt_server, uint16_t mqtt_port, char *mqtt_user, char *mqtt_password);
|
|
bool connectToMqtt(char *client_id, char *mqtt_server, uint16_t mqtt_port);
|
|
void disconnectFromMqtt();
|
|
void publishToTopic(char *topic, char *payload);
|
|
void registerMqttCallback(void (*callback)(char *, char *));
|
|
void registerRelativeMqttCallback(void (*callback)(char *, char *));
|
|
void registerSubscribeCallback(void (*callback)(void));
|
|
void setBaseTopic(char *base_topic);
|
|
void bindEthernetInterface(ETHClass *ethernetIface);
|
|
IoTComponent* getComponent(uint8_t card_id);
|
|
IPAddress getETHIp();
|
|
|
|
private:
|
|
FRAM *fram;
|
|
bool useWifi;
|
|
bool WifiUseAuth;
|
|
char ssid[32];
|
|
char password[32];
|
|
WiFiClient tcpClient;
|
|
void sessionKeepAlive();
|
|
bool mqttReconnect();
|
|
void wifiReconnect();
|
|
void mqttSubscribe();
|
|
void mqttCallback(char *topic, byte *payload, unsigned int length);
|
|
void (*user_mqtt_callback)(char *, char *);
|
|
void (*user_relative_mqtt_callback)(char *, char *);
|
|
void (*user_subscribe_callback)(void);
|
|
void publishRelative(uint8_t card_id, char *topic, char *payload);
|
|
bool active;
|
|
PubSubClient mqtt;
|
|
IoTComponent *components[255];
|
|
char payload_buffer[200];
|
|
char base_topic[100];
|
|
uint8_t base_topic_length;
|
|
ExpansionCard **cards; // Points to card array in ESPMegaPRO Core
|
|
// MQTT Connection Parameters
|
|
char *mqtt_server;
|
|
uint16_t mqtt_port;
|
|
char *mqtt_user;
|
|
char *mqtt_password;
|
|
char *client_id;
|
|
bool mqtt_useauth;
|
|
bool mqtt_connected;
|
|
NetworkConfig network_config;
|
|
ETHClass *ethernetIface;
|
|
}; |