Как добавить функцию пользовательского интерфейса в библиотеку Arduino - PullRequest
1 голос
/ 02 мая 2019

Я хочу добавить метод события в мою библиотеку 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
  }
}
...