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.

113 lines
4.7 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// пример обновления виджетов
#include <Arduino.h>
#define AP_SSID "Alex"
#define AP_PASS "alexpass"
#include <GyverHub.h>
GyverHub hub;
/*
1. Обновить можно любой параметр виджета, который он поддерживает (кроме size)
2. Отправлять обновления из билдера можно только по действию
3. Отправлять обновления из остальной программы можно в любое время
Общий синтаксис:
hub.update("имя").параметр(значение).параметр(значение)...
*/
void build(gh::Builder& b) {
if (b.beginRow()) {
// для обновления нужно знать имя виджета, поэтому задаём его
// укажу стартовые параметры, например цвет и значение
b.Input_("inp").size(3).value("hello").color(gh::Colors::Blue);
// обновлять будем например по нажатию на кнопку. Кнопки для значения и цвета
if (b.Button().size(1).label("value").click()) hub.update("inp").value(random(1000));
if (b.Button().label("color").click()) hub.update("inp").color(gh::Colors::Red);
// если вызвать обновление вот тут (не по действию) - оно не будет отправлено!
// hub.update("inp").value(random(1000)); // это не будет работать
b.endRow();
}
if (b.beginRow()) {
b.Slider_("sld").size(3);
// а тут обновим сразу несколько параметров
if (b.Button().size(2).label("update").click()) {
hub.update("sld").value(random(100)).color(gh::Colors::Pink).unit("°");
// такие обновления доставляются всем подключенным клиентам. Чтобы отправить
// только клиенту из билда - можно передать его в update
// hub.update("sld", &b.build.client).value(random(100)).color(gh::Colors::Pink).unit("°");
}
b.endRow();
}
if (b.beginRow()) {
b.Label_("lbl").size(3);
// отправка всем клиентам и только текущему
if (b.Button().label("all").size(1).click()) hub.update("lbl").value("all");
if (b.Button().label("client").click()) hub.update("lbl", &b.build.client).value("client");
b.endRow();
}
// также можно обновить страницу
if (b.Button().label("refresh").click()) b.refresh();
// этот виджет будем обновлять ниже в loop
b.Title_("tit").value("Title");
}
void setup() {
Serial.begin(115200);
#ifdef GH_ESP_BUILD
WiFi.mode(WIFI_STA);
WiFi.begin(AP_SSID, AP_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println(WiFi.localIP());
hub.mqtt.config("test.mosquitto.org", 1883);
#endif
hub.config(F("MyDevices"), F("ESP"), F(""));
hub.onBuild(build);
hub.begin();
}
void loop() {
hub.tick();
// в основной программе тоже можно отправлять обновления, но не рекомендуется делать это слишком часто.
// В библиотеке предусмотрен удобный таймер, например сделаем обновления каждую секунду
static gh::Timer tmr(1000);
if (tmr) {
hub.update("tit").value(millis());
}
// в библиотеке предусмотрены также пакетные обновления сразу для нескольких виджетов. Отправим по таймеру
static gh::Timer tmr2(5000);
if (tmr2) {
// создаём обновление
gh::Update upd(&hub);
// синтаксис такой:
// upd.update("name1").параметр(значение).параметр(значение)...
// upd.update("name2").параметр(значение).параметр(значение)...
// upd.update("name3").параметр(значение).параметр(значение)...
// upd.send();
// таких компонентов у нас нет, это просто пример
upd.update("name1").value(random(100));
upd.update("name2").color(gh::Colors::Red).label("kek");
// отправляем
upd.send();
}
}