Я хочу добавить метод события в мою библиотеку arduino, похожий на фреймворк cayenne или blynk. У меня нет опыта программирования на C или C ++.
CAYENNE_IN_DEFAULT() {
//to-do
}
Вот Fusi.h
#ifndef Fusi_h
#define Fusi_h
#define DEBUG true
#define MQTT_SERVER "192.168.31.10"
#define IOT_ENDPOINT "http://192.168.31.10:8069/iot"
class Fusi
{
public:
Fusi(String clientID,String clientSecret);
void setup();
void loop();
int digitalPinRead(int channel);
void addDigitalSwitch(String name, int channel);
private:
String clientID;
String clientSecret;
void digitalPinWrite(int channel, int value);
void virtualSwitchWrite(String name, int channel, int value);
};
#endif
Вот Fusi.cpp
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <EEPROM.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <PubSubClient.h>
#include "fusi.h"
#include <ArduinoJson.h>
HTTPClient http;
WiFiClient wifiClient;
ESP8266WebServer server(80);
PubSubClient mqtt(MQTT_SERVER, 1883, wifiClient);
Fusion::Fusion(String deviceID,String deviceSecret){
clientID = deviceID;
clientSecret = deviceSecret;
}
void Fusion::setup(){
//to-do
}
void Fusion::addDigitalSwitch(String name, int channel){
//to-do
}
int Fusion::digitalPinRead(int channel){
return 0;
}
void Fusion::loop(){
mqtt.loop();
//FUSI_IN_CHANNEL(5);
}
Теперь я хочу уведомить главный эскиз, если произошло какое-то определенное событие.
#include <Fusi.h>
Fusi fusi("4151b719-09bd-448e-9fc4-873807a66ba2","LSXJPBLW");
void setup() {
fusi.setup();
fusi.addDigitalSwitch("RELAY_0",D0);
fusi.addDigitalSwitch("RELAY_1",D1);
fusi.addDigitalSwitch("RELAY_2",D2);
fusi.addDigitalSwitch("RELAY_3",D3);
fusi.addDigitalSwitch("ONBOARD_LED",D4);
pinMode(D0,OUTPUT);
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
pinMode(D4,OUTPUT);
digitalWrite(D0,fusi.digitalPinRead(D0));
digitalWrite(D1,fusi.digitalPinRead(D1));
digitalWrite(D2,fusi.digitalPinRead(D2));
digitalWrite(D3,fusi.digitalPinRead(D3));
digitalWrite(D4,fusi.digitalPinRead(D4));
}
void loop() {
fusi.loop();
delay(200);
}
//This should notify from library
void FUSI_IN_CHANNEL(int channel){
//do update pins
}
}