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
3.4 KiB
Свой способ связи
Связь устройства с приложением называется Bridge
- мост, все встроенные способы связи являются такими мостами. Можно добавить свою реализацию для любого способа связи и переопределить системный. Например можно сделать работу через MQTT или WS с использованием любой другой библиотеки. Делается это следующим образом:
- Создать свой класс на базе
gh::Bridge
с наследованием конструктора - Реализовать методы
begin()
(необязательно),end()
(необязательно),tick()
,send(BridgeData& data)
- Поступающие данные отправлять в
parse(AnyText url)
илиparse(AnyText url, AnyText data)
- Создать объект этого класса
- Передать его адрес в
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