GyverPortal

J777

✩✩✩✩✩✩✩
30 Сен 2024
2
0
Респект автору за портал!
Подскажите, как программно обновить страницу (из моего кода)?
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@J777,
C++:
GP.RELOAD(имя);                     // скрытый блок перезагрузки страницы. Добавь его "имя" в UPDATE и ответь 1 на update, чтобы обновить страницу
GP.RELOAD_CLICK(список);            // клик по указанным в списке компонентам перезагружает страницу [пример: "id1,id2,id5"]
 
  • Лойс +1
Реакции: J777 и SoftFelix

J777

✩✩✩✩✩✩✩
30 Сен 2024
2
0
Подскажите, как увеличить ширину поля ввода GP.TEXT?
Можно ли программно перейти на другую страницу?
 

nostradamus

✩✩✩✩✩✩✩
11 Окт 2024
1
0
Подскажите пожалуйста, столкнулся с двумя проблемами сегодня:
1. Плата esp32 cam, после прошивки примера из библиотеки actionClick плата шлет в монитор порта ошибку
E (242) quad_psram: PSRAM ID read error: 0xffffffff, PSRAM chip not found or not supported.
плата не поддерживается библиотекой?
2.Плата esp32 wroom, после прошивки этого же примера в нее, wifi в режиме AP,
все работает, кроме последней кнопки в примере, выдает сообщение "offline"+ плашка сбоку что я оффлайн. При этом в консоль ничего не шлет при нажатии на кнопку.

версия библиотеки 3.6.6
 

MaxWhite

✩✩✩✩✩✩✩
12 Мар 2020
28
5
Помогите, пожалуйста, объединить ГП и его же форму ввода логина и пароли от вифи! всю голову сломал, десятки раз загружал разный код в вемос, все равно не пойму - можно ли сделать 2 функции build и build2 и в одной форма ввода WIFI будет (как в оригинале), в другой - мой код, вроде делал, но все равно после отключения портала ничего по нужному ип адресу. Не понимаю с ui.start, ui.attachBuild и прочими, доки не оч информативны... В идеале по нажатой кнопке и включении устройства - портал, если wifi данные сохранены, то сразу подключаться и запускать мой код.
 

Pussymonsta

✩✩✩✩✩✩✩
29 Апр 2022
2
0
Всех приветствую. Есть необходимость поднять на esp32 точку доступа и при подключении по логину/паролю получать веб морду, отрисованную при помощи GyverPortal. Подружить скетч для создания точки доступа и пример из портала не вышло. Есть ли у кого наработки по подобному направлению или кто то может подсказать, как по определенному IP в созданной точке доступа разместить страницу, отриcованную в портале?
 

kmarakov

✩✩✩✩✩✩✩
29 Июн 2024
3
0
Здравствуйте. Плата Weemos Mini на esp8266. Делаю форму сохранения настроек SSID и пароля в гайвер портале. В ходе разбирательств выяснил, что просто не могу получить текст из формы, ui.getString возвращает пустую строку, и все.

В примере все работает, а в моей программе нет. Прикладываю рабочий текст, и мой. Никак понять не могу, что не так.
Мой код, не работает, выводит пустую строку в консоль:
#define AP_SSID "???"
#define AP_PASS "???"

#include <GyverPortal.h>
GyverPortal ui;

void build() {
  GP.BUILD_BEGIN(600);
  GP.THEME(GP_LIGHT);
  GP.GRID_RESPONSIVE(700);

  M_GRID(
    M_BLOCK_TAB(
      "WiFi Setup",

      M_BOX(GP.LABEL("SSID:     "); GP.TEXT("ssid", "SSID", ""););
      M_BOX(GP.LABEL("Password: "); GP.TEXT("password", "Password", ""););
      M_BOX(GP.BUTTON_MINI("btn", "Submit"));
    );
  );

  GP.FORM_END();
  GP.BUILD_END();
}

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(AP_SSID, AP_PASS);

  ui.attachBuild(build);
  ui.attach(action);
  ui.start();
}

void action() {
  if (ui.click("btn")) {
    Serial.println(ui.getString("ssid"));
  }
}

void loop() {
  ui.tick();
}

Работающий пример с GitHub:
#define AP_SSID ""
#define AP_PASS ""

#include <GyverPortal.h>
GyverPortal ui;

// конструктор страницы
void build() {
  GP.BUILD_BEGIN();
  GP.THEME(GP_DARK);

  // ui.uri() возвращает текущий адрес страницы
  // используем его в конструкции с if для постройки страницы
  // переход на страницы может осуществляться в адресной строке браузера
  // или по кнопке-ссылке BUTTON_LINK

  // страница с формой
  // ВАЖНО: url страницы должен совпадать с именем формы!
  // чтобы форма отображалась в браузере после Submit
  if (ui.uri("/save")) {
    GP.FORM_BEGIN("/save");
    GP.TEXT("txt", "text", ""); GP.BREAK();
    GP.SUBMIT("Submit");
    GP.FORM_END();
    GP.BUTTON_LINK("/", "Back");

    // страница с кнопкой, на которую можно кликнуть
  } else if (ui.uri("/clicks")) {
    GP.BUTTON("btn", "Button");
    GP.BUTTON_LINK("/", "Back");

    // страница с лампочкой, которая сама переключается
  } else if (ui.uri("/updates")) {
    GP.UPDATE("led");
    GP.LABEL("LED: ");
    GP.LED_RED("led", 0);   GP.BREAK();
    GP.BUTTON_LINK("/", "Back");

    // главная страница, корень, "/"
  } else {
    GP.BUTTON_LINK("/save", "Form");
    GP.BUTTON_LINK("/clicks", "Clicks");
    GP.BUTTON_LINK("/updates", "Updates");
  }

  GP.BUILD_END();
}

void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(AP_SSID, AP_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println(WiFi.localIP());

  // подключаем конструктор и запускаем
  ui.attachBuild(build);
  ui.attach(action);
  ui.start();
}

bool led;
void action() {
  // имитация активности
  if (ui.form("/save")) Serial.println(ui.getString("txt"));
  if (ui.click("btn")) Serial.println("Button");
  if (ui.update("led")) ui.answer(led = !led);
}

void loop() {
  ui.tick();
}
 

kmarakov

✩✩✩✩✩✩✩
29 Июн 2024
3
0
Я тут переспал со своей проблемой, и вроде решил. Как я понимаю, последнее время многим нужно было примерно тоже самое. Текст прилагаю, проверьте, пожалуйста. Может позже более подробно комментарии расставлю.
По работе: в течении 10 секунд пытается подключиться к последней записанной точке доступа. Если не может, запускает свою. Подключаетесь к ней, там форма ввода SSID и пароля. Сохраняет в EEPROM, автоматически перезагружает. Потом снова пытается подключиться к уже новой точке доступа, которую вы ввели. Если не получится в течении 10 секунд, снова запустит портал настройки.

C++:
#include <LittleFS.h>
#include <GyverPortal.h>
#include <EEPROM.h>
GyverPortal ui(&LittleFS);

struct settings {
  char ssid[30];
  char password[30];
} user_wifi = {};

void build() {
  GP.BUILD_BEGIN(600);
  GP.THEME(GP_LIGHT);
  GP.GRID_RESPONSIVE(700);

  GP.FORM_BEGIN("/main");
  M_GRID(
    M_BLOCK_TAB(
      "Статус",

      M_BOX(GP.LABEL("WiFi connected"););
      M_BOX(GP.LABEL("SSID: "); GP.LABEL(user_wifi.ssid););
    );
  );

  GP.FORM_END();
  GP.BUILD_END();
}

void action() {
  if (ui.form("/setup")) {
    eepromput();
  }
}

void eepromput(){
  ui.copyStr("ssid", user_wifi.ssid);
  ui.copyStr("password", user_wifi.password);

  EEPROM.begin(sizeof(struct settings));
  EEPROM.put(0, user_wifi);
  EEPROM.commit();
  Serial.println("Reset...");
  delay(1000);
  WiFi.softAPdisconnect();
  ESP.restart();
}

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

  EEPROM.begin(sizeof(struct settings));
  EEPROM.get(0, user_wifi);

  WiFi.mode(WIFI_STA);
  WiFi.begin(user_wifi.ssid, user_wifi.password);

  byte tries = 0;
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
    if (tries++ > 10) {
      Serial.println("");
      Serial.println("Can't connect.");
      setupPortal();
      break;
    }
  }

  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  ui.attachBuild(build);
  ui.attach(action);
  ui.start();
  ui.enableOTA("admin", "pass");

  if (!LittleFS.begin()) Serial.println("FS Error");
  ui.downloadAuto(true);
}

void loop() {
  ui.tick();
}

void setupPortal() {
  Serial.println("Portal start");

  // запускаем точку доступа
  WiFi.mode(WIFI_AP);
  WiFi.softAP("WiFi Setup");

  ui.attachBuild(buildSetup);
  ui.attach(action);
  ui.start();

  // работа портала
  while (ui.tick());
}

void buildSetup() {
  GP.BUILD_BEGIN(600);
  GP.THEME(GP_LIGHT);
  GP.GRID_RESPONSIVE(700);

  GP.FORM_BEGIN("/setup");
  M_GRID(
    M_BLOCK_TAB(
      "WiFi Setup",

      M_BOX(GP.LABEL("SSID:     "); GP.TEXT("ssid", "SSID", ""););
      M_BOX(GP.LABEL("Password: "); GP.TEXT("password", "Password", ""););
      M_BOX(GP.SUBMIT("Submit"));
    );
  );

  GP.FORM_END();
  GP.BUILD_END();
}
 

Xao_Asakura

✩✩✩✩✩✩✩
27 Окт 2024
1
0
Здраствуйте, сижу над проектом солнечного трекера, столкнулся с проблемой не реагируют кнопки нажатия "◄", "►", решил поискать в документации вдруг в новой версии кнопки создаються по новым ключевым словами, но ничего не смог найти, сможет кто подсказать что делать?

GP_MAKE_BLOCK_TAB(
"MANUAL",
GP_MAKE_BOX(GP.LABEL("Duty"); GP.SLIDER("spd", duty, 0, 1023);
GP_MAKE_BOX(GP.BUTTON("bkw", "◄"); GP.BUTTON("frw", "►");
);
);
 
Изменено:

anr69

✩✩✩✩✩✩✩
25 Ноя 2024
1
0
подскажите...
на esp8266 все норм, долго использую
пробую несколько esp32 ,поставил для плат сборку последнюю Arduino core for the ESP32 Release v3.0.7
примеры при нажатие на любую кнопку на форме .. всплывает попап окно - плата офлайн
сейчас попробую понизить сборку под плату
может кому тоже поможет ... в портале написано
  • esp32 (SDK v2+)
ну а то что 3+ это уже много чего поменяли и оно много чего не работает
на последней 2.0.18 вроде заработало
 
Изменено: