GyverPortal

alv2005

✩✩✩✩✩✩✩
25 Фев 2023
1
0
При первой загрузке GP загружается в режиме WiFi.mode(WIFI_AP), в настройках вводится WiFi ssid, passwd и ESP32 загружается в режиме WiFi.mode(WIFI_STA) (код ниже, работает). Предположим, что пользователь контроллера ESP32 не знает, как посмотреть IP адрес нового устройства на роутере, не знает, как подключить контроллер к ПК через USB порт. Есть ли другой способ узнать IP-адрес без подключения ЖК-дисплея? Есть идеи?

C++:
//  WiFi ir RTC
void wifi_connected() {
  WiFi.mode(WIFI_STA);
  byte tries = 60;
  WiFi.begin(config.ssid, config.password);
  while (--tries && WiFi.status() != WL_CONNECTED) {
    Serial.print F(".");
    delay(1000);
  }
  if (WiFi.status() != WL_CONNECTED) {
    // Если не удалось подключиться запускаем в режиме AP
    IPAddress apIP(192, 168, 4, 1);
    IPAddress subnet(255, 255, 255, 0);
    Serial.println F("");
    Serial.print F("WiFi up ACCESS POINT: ");
    Serial.println(ssidAP);
    Serial.print F("Start Settings IP: ");
    Serial.println(apIP);
    // Отключаем WIFI
    WiFi.disconnect();
    // Меняем режим на режим точки доступа
    WiFi.mode(WIFI_AP);
    // Задаем настройки сети
    WiFi.softAPConfig(apIP, apIP, subnet);
    // Включаем WIFI в режиме точки доступа с именем и паролем
    // хранящихся в переменных _ssidAP _passwordAP
    WiFi.softAP(ssidAP, passAP);
    ui.attachBuild(build);
    ui.attach(action);
    ui.start();
    ui.enableOTA(ota_name, ota_pass);
  } else {
    Serial.println F("");
    Serial.println F("WiFi OK");
    Serial.print("IP : ");
    Serial.println(WiFi.localIP());
    ui.attachBuild(build);
    ui.attach(action);
    ui.start(web_start);
    ui.enableOTA(ota_name, ota_pass);
  }
}
 

Denon

✩✩✩✩✩✩✩
27 Фев 2023
2
0
Проблема оказалась в телефоне. Подключился с другого - норм. А проблема была в AdGuard.
 
Изменено:

Сергей Эл

✩✩✩✩✩✩✩
17 Ноя 2022
7
1
Скажите, а при использовании графиков, можно по оси Х тоже значения задавать? Она либо пустая, либо время на ней. Нельзя, например, проценты там отображать?
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@Сергей Эл, напиши вопрос на гитхаб. Если что, с графиками планируется большая обновка.
 

Eagle

✩✩✩✩✩✩✩
8 Фев 2023
1
0
Интересует также отображение графиков PLOT_STOCK в режиме точки доступа.
 

alkoizh

✩✩✩✩✩✩✩
5 Мар 2023
1
0
Здравствуйте.
Благодарю за создание этого проекта. Очень удобный инструмент.
С помощью GyverPortal облагородил web интерфейс своего "умного дома" на ESP32.

Но не получается задействовать дисплей 16х2, I2C.
Использую библиотеки:
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
LiquidCrystal_PCF8574 lcd(0x27);

при наличии строки в коде: lcd.begin(16, 2);
нет подключается к Wi-Fi роутеру. ESP32 в режиме STA.
Если закомментирую строку: lcd.begin(16, 2); ESP32 подключается к Wi-Fi роутеру.
Ошибок нет и при компиляции, ни в сериал порту. Сериал порт просто не выводит сообщение о присвоении IP адреса 192.168.х.х.
Без GyverPortal дисплей с библиотеками <Wire.h> и <LiquidCrystal_PCF8574.h> работает.
Может несовместимость с библиотеками?
 

Вложения

artem.pcb

✩✩✩✩✩✩✩
13 Мар 2023
4
0
День добрый !
Прошу помощи, т.к. сам уже не знаю куда копать...
Есть структура:
C++:
struct temp_t {
String name = "Резервирую место для записи String в EEPROM";
int temp1;
int temp2;
...
} temp_t temp[3]; // массив структур
Есть текстовое поле ввода текста:
C++:
M_BOX(GP.LABEL("Температура", "", 0, 16);  GP.TEXT("txt_name", "Название", temp[qty].name););
Так же есть спойлер, название которого и содержимое должно меняться:
C++:
GP.SPOILER_BEGIN(temp[qty].name, GP_GRAY);
...
GP.SPOILER_END();
Переменная qty глобальная и служит для перебора массива.

Задача - записывать новые данные в структуру и затем показывать в GP.SPOILER или в GP.LABEL (если в спойлер не возможно). Переменные типа int, float, boot замечательно записываются и показываются. Но String никак не могу запомнить и вывести. Какие только методы не пробовал:

1 вариант:
C++:
if (ui.update("txt_name")) ui.answer(temp[0].name); // первый элемент массива
2 вариант:
C++:
ui.updateString("txt_name", temp[0].name);
3 вариант:
C++:
portal.updateString("txt_name", temp[0].name);
4 вариант:
C++:
portal.clickString("txt_name", temp[0].name
5 вариант:
C++:
portal.copyString("txt_name", temp[0].name);
В GP.UPDATE имя "txt_name" прописывал и не прописывал, не работает. Делал переменную txt_name типа char и пытался конвертировать в String и обратно. Никак не получается... Наверняка кто-то уже разбирался с данной задачей. Спасибо!
 

artem.pcb

✩✩✩✩✩✩✩
13 Мар 2023
4
0
@ASM, Спасибо!
Урок по Stringам у меня открыт и изучен. Но ответа там я не нашел. А реализацию часов по изучаю. Спасибо!
 

RomaT

★✩✩✩✩✩✩
5 Ноя 2019
104
38
@artem.pcb, самый простой и быстрый способ, открываете в хроме и f12, а дальше изучаете генерируемый код, разобраться и понять где косяк будет намного проще
 

artem.pcb

✩✩✩✩✩✩✩
13 Мар 2023
4
0
@RomaT, спасибо! Иногда применяю данный метод, но в этом случае он не помощник... Там какие-то скрипты, в которых я совсем не разбираюсь. А вариант посмотреть код, который уже заведомо работает, мне кажется наиболее быстрым и правильным способом. Если бы у Алекса не было бы examples, разработка превратилась бы в сплошное мучение с известным концом - подыскать другой проект, где уже есть примеры реализации).

Кстати, попробовал собрать проект на новой версии Gyver Portal 3.6. ESP32 при открытии портала сразу уходит в панику и ребут. Видимо, что-то стало несовместимо... Откатился до предыдущей.
 

RomaT

★✩✩✩✩✩✩
5 Ноя 2019
104
38
Там какие-то скрипты, в которых я совсем не разбираюсь.
В С разбираетесь и скрипт поймёте. Основная проблема там в том, что в одну строчку написано, неудобно читать так. Копируете в блокнот, делаете переносы по строкам, так легче понимать будет.
 

Almax

✩✩✩✩✩✩✩
14 Сен 2022
7
2
На ESP8266 для графика PLOT_STOCK не получается сделать выборку больше 120 точек . Может кто то подскажет решение.

#define PLOT_SIZE 100 // длина графика, точек

Что надо сделать что бы при 1000 точек работало. Гдето надо поменять тип переменной
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
Хочу реализовать скрытие M_BOX по отключению checkbox по тестовому примеру https://playcode.io/1369159
в html вижу сложный вариант классов (набор), как правильно его записать?)
C++:
<div class='blockBase block blockTab thinBlock' style='border:2px solid#3b3ebd'>
C++:
<input type='checkbox' name='status' id='status' checked onclick='GP_click(this)'>
C++:
$('#status').click(function () {
  if ($(this).is(':checked')) {
    $('.blockBase').eq(1).show();$('.blockBase').eq(2).show();$('.blockBase').eq(3).show();
    alert('Включено');

  } else {
    $('.blockBase').eq(1).hide();$('.blockBase').eq(2).hide();$('.blockBase').eq(3).hide();
    alert('Выключено');
  }
});
на алерт не реагирует)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,253
1,297
Москва
а вот это что бы статус предать в мк ?
onclick='GP_click(this)
Так событие клик может быть только одно, а ты его скорее всего забиваешь чем то. Попробуй убрать отсюда и вызвать непосредственно из click в нужном месте
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@Старик Похабыч
...удален текст...

допилил, не хватало банальной проверки полной загрузки страницы...
 
Изменено:

Almax

✩✩✩✩✩✩✩
14 Сен 2022
7
2
Подскажите как решиласть эта проблема с Device offline
Кеш почистил, не помогло
1680456743196.png
 
Изменено:
  • Лойс +1
Реакции: pingemall

Kisa9000

✩✩✩✩✩✩✩
4 Апр 2023
4
0
Приветствую ребята! У меня вопросец, прошу тапками сразу не кидать. У меня есть надобность в "динамическом интерфейсе", тобишь например есть вкладка Devices и я хочу чтобы если на шине обнаружились какие то устройства то они сразу же попадали в эту вкладку как таблички с параметрами ПРИЧЕМ без кнопки обновить страницу. Я не прошу у вас код, я прошу меня направить в правильном направлении читать. Может уже есть что то подобное и реализованное просто я мог не заметить иль не понять что это можно так юзать. Заранее спасибо!
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@Kisa9000, так можно же реализовать свои функции в отдельном файле, например custom.h и в нем писать что хочешь и инклудить в нужное место.
 

Kisa9000

✩✩✩✩✩✩✩
4 Апр 2023
4
0
@ASM, тобишь нет в текущей реализации GyverPortal методов которые позволят так сделать? Аля ручками JS+CSS