You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.4 KiB

Свой способ связи

Связь устройства с приложением называется Bridge - мост, все встроенные способы связи являются такими мостами. Можно добавить свою реализацию для любого способа связи и переопределить системный. Например можно сделать работу через MQTT или WS с использованием любой другой библиотеки. Делается это следующим образом:

  1. Создать свой класс на базе gh::Bridge с наследованием конструктора
  2. Реализовать методы begin() (необязательно), end() (необязательно), tick(), send(BridgeData& data)
  3. Поступающие данные отправлять в parse(AnyText url) или parse(AnyText url, AnyText data)
  4. Создать объект этого класса
  5. Передать его адрес в hub.addBridge()

Теперь ваш мост работает наравне с системными!

Возможности моста

У моста можно узнать тип подключения, а также выключить и включить его - отключенный мост пропускает данные. У моста можно вручную проверить, подключен ли сейчас через него клиент. В ручной реализации для websocket желательно ставить фокус при подключении клиента и снимать при отключении.

Connection connection();    // тип подключения

void enable();              // включить
void disable();             // выключить
bool state();               // статус включен или выключен

void setFocus();            // установить focus
void clearFocus();          // снять focus
bool getFocus();            // получить focus

Пример с Serial

GyverHub hub;

class HubSerial : public gh::Bridge {
   public:
    using gh::Bridge::Bridge;  // наследуем конструктор

    void begin() {
        Serial.begin(115200);
    }

    void tick() {
        // приложение пришлёт строку команды, завершённую нулём
        // читем команду и отправляем в parse
        if (Serial.available()) {
            String str = Serial.readStringUntil('\0');
            parse(str);
        }
    }

    // это обработчик отправки, библиотека отправит в него данные
    // gh::BridgeData см. документацию
    void send(gh::BridgeData& data) {
        Serial.print(data.text);
    }
};

// наследованный конструктор требует указать экземпляр GyverHub, тип связи и функцию GyverHub::parseHook
HubSerial serial(&hub, gh::Connection::Serial, GyverHub::parseHook);

void setup() {
    hub.addBridge(&serial);     // подключаем мост
    hub.begin();
}

Ещё несколько примеров есть во встроенных примерах к библиотеке в папке /manual