• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Web сервер - ! нужна авторизация

Slacky

Member
@Alex1 в общем так :))

Код:
void handleLedOn() {
   if (если нужна авторизация) {
       if (!webServer.authenticate(ВашЛогин, ВашПароль)) return webServer.requestAuthentication();
   }
  stateLED = LOW;
  digitalWrite(LED_BUILTIN, stateLED);
  response();
}
Вроде не ошибся :))
 

kab

New member
@Slacky
Ну мы наперегонки - я привязался к тексту ТС - там нет отдельных функций
 

Slacky

Member
@kab не хочу выглядеть всезнайкой (в принципе я в этом сам-то не сильно разбираюсь), но при наличие примеров для 8266 мне действительно не понятно, почему топикстартер сам не разобрался. Там же все прозрачно и понятно ...
 
  • Like
Реакции: kab

kab

New member
@Slacky
я тоже не хочу выглядеть крутым гуру, но , всё-таки каждому разные способности даны от бога.(Хотя я атеист). Но, чем больше человеку дано способностей, тем больше он должен помогать другим.(По моему мнению) Назови это кармой, предназначением или др.
 

Alex1

New member
@Slacky и @kab Спасибо это заработало, всё так просто оказалось, без всяких библиотек. Этого Я действительно нигде не нашёл, может плохо искал.
Есть ещё вопрос....
1 Wi Fi индикатор показывает заниженные данные, рядом с роутером например 40 -50% дальше ещё меньше 20 -10
Код:
String w = ("<p style=\"text-align: center; font-family:Courier New; color:#EFB30B ; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#1C5A9F; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n WiFi:  &shy;&shy;  ");
  long rssi = WiFi.RSSI(); // get dBm from the ESP8266
  w += (rssi);
  w += "dB &shy;&shy; ";
  w += (rssi + 100); //~ 100% ??
  w += "%";
  w += "</html>\n";
  htmlRes += (w);
2й Как убрать сотые из показаний температуры, они мне не нужны пробовал через float, но там просто делится например вместо 26,30 переносится запятая
Код:
String w = ("<p style=\"text-align: center; font-family:Courier New; color:#EFB30B ; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#1C5A9F; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n WiFi:  &shy;&shy;  ");
  long rssi = WiFi.RSSI(); // get dBm from the ESP8266
  w += (rssi);
  w += "dB &shy;&shy; ";
  w += (rssi + 120); //~ 100% ??
  w += "%";
  w += "</html>\n";
  htmlRes += (w);
Спасибо
 

kab

New member
@Alex1
1. С особенностями поведения функции WiFi.RSSI() я не разбирался, но могу поделится общими соображениями:
- во-первых, по моему мнению, это лишь приблизительная оценка уровня сигнала, к которой я не относился бы слишком серьезно;
- во-вторых, думаю, что еще надо поразбираться, программа ли занижает уровень сигнала. Или он такой плохой и есть. Например, металлическая коробочка, если в неё поместить ESP, экранирует радиосигнал Wi-Fi. Неудачный монтаж устройства, что антенна ESPоказалась рядом с массивной металлической деталью или массивной шиной заземления на плате. Или какая-то причина посложней...
- в-третьих, в интернете, при желании, можно найти достаточно детальных обсуждений особенностей распространения сигнала Wi-Fi и доступных способов увеличения дальности действия Wi-Fi устройств.
2. Кажется, тут помещен не тот кусок кода. А по сути (сейчас ARDUINO IDE под руками нет, точно посмотреть не могу) посоветовал бы в примерах поискать функцию Round. Думаю, что должно быть что-то типа
Код:
          temper = temper.Round(1);
если до десятых долей, или
Код:
      temper = temper.Round(0);
если до целых
UPDATE. Нет, этот совет не сработает. В общем, надо смотреть исходный код...

И еще совет - полезные для себя сообщения отмечайте кнопочкой "Мне нравится" внизу сообщения
 
Последнее редактирование:

Alex1

New member
@Alex1
1. С особенностями поведения функции WiFi.RSSI() я не разбирался, но могу поделится общими соображениями:
- во-первых, по моему мнению, это лишь приблизительная оценка уровня сигнала, к которой я не относился бы слишком серьезно;
- во-вторых, думаю, что еще надо поразбираться, программа ли занижает уровень сигнала. Или он такой плохой и есть. Например, металлическая коробочка, если в неё поместить ESP, экранирует радиосигнал Wi-Fi. Неудачный монтаж устройства, что антенна ESPоказалась рядом с массивной металлической деталью или массивной шиной заземления на плате. Или какая-то причина посложней...
- в-третьих, в интернете, при желании, можно найти достаточно детальных обсуждений особенностей распространения сигнала Wi-Fi и доступных способов увеличения дальности действия Wi-Fi устройств.
2. Кажется, тут помещен не тот кусок кода. А по сути (сейчас ARDUINO IDE под руками нет, точно посмотреть не могу) посоветовал бы в примерах поискать функцию Round. Думаю, что должно быть что-то типа
Код:
          temper = temper.Round(1);
если до десятых долей, или
Код:
      temper = temper.Round(0);
если до целых
UPDATE. Нет, этот совет не сработает. В общем, надо смотреть исходный код...

И еще совет - полезные для себя сообщения отмечайте кнопочкой "Мне нравится" внизу сообщения
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px; padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;&shy; ");
t += (sensors.getTempCByIndex(0));
t += " C`";
htmlRes += (t);
Здесь эта строка temper = temper.Round(0); пишет ошибку. либо не объявлена, либо не этого класса. Наверное не из этой библиотеки . П вайфаю на роутере показывает уровень от модуля 92% на esp 40% это совсем не приблизительно а просто показывает есть или нет.
 

kab

New member
@Alex1
я в своем сообщении дописал, что
проблемы не решит. Надо по другому. А вот как?
Конечно, можно просто написать поправленный код. Думаю, что Вам полезнее самостоятельно разобраться с этим вопросом. Иначе так и не получите даже простейшие навыки программирования. В данном случае, к области ESP и каких-либо библиотек данная проблема отношения не имеет. Тут вопрос чисто о программировании. Купите и почитайте книги по Си для начинающих. Посмотрите курсы по Си для начинающих по интернету. Надо получить общие понятия об структуре программы, описанию переменных различных типов, о преобразовании типов данных друг в друга. Конкретно, о преобразовании чисел в строку с заданным числом знаков после запятой... Так можно в Яндексе и писать: "Си как преобразовать число в строку".

Если дать Вам готовый кусок программы, то пользы для Вас от этого будет чуть...
 

kab

New member
@Alex1
А что касается уровня сигнала Wi-Fi, судя по приведенному фрагменту кода этот уровень в сервере ESP определяется не в процентах, а в децибелах( db). а в проценты переводится по какой-то странной формуле. Какой и в каких единицах показывается уровень на роутере - не обращал внимание. Наверно, можно почитать в инструкции на роутер.
 
Последнее редактирование:

Alex1

New member
Вот и Я о том же, как преобразовать число в строку 20 страниц в поиске, а как округлить до десятых, не нашёл. Методом копирования и вставки с готовых скетчей может не помочь и их же опять искать и устанавливать надо.
 

Alex1

New member
Можно попробовать так.

Код:
float val = 1.53;

int value = floor(val+0.5);

Разные ошибки получаются строки ставил выше ниже комбинации
Код:
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
t += int value = floor(val+0.5);
t += float val = 1.53;
t += (sensors.getTempCByIndex(0));
t +=  "  C`";  
htmlRes += (t);
 

Slacky

Member
Разные ошибки получаются строки ставил выше ниже комбинации
Код:
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
t += int value = floor(val+0.5);
t += float val = 1.53;
t += (sensors.getTempCByIndex(0));
t +=  "  C`"; 
htmlRes += (t);
Вы реально вот так и пишите свой код?

t += int value = floor(val+0.5);
t += float val = 1.53;

Может хоть немного стоит ознакомиться с Си?

Я не вижу, что делает функция sensors.getTempCByIndex(0), но если это она передает температуру, то должно выглядеть так.

t += floor(sensors.getTempCByIndex(0)+0.5);

Но я не проверял, что будет с отрицательными числами. Я же не программист, это хобби ...
 

kab

New member
Да, действительно, тут не очень очевидно. :(
Похоже тут надо использовать типа
Код:
sprintf(str, "%.1f",sensors.getTempCByIndex(0)+0.5 )
То есть в результате должно получится что-то типа:

Код:
Char str[6];     //added by  kab
sprintf(str, "%5.1f",sensors.getTempCByIndex(0));    //added by  kab
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
//t += (sensors.getTempCByIndex(0));    //comment by kab
t += (str);     //added by kab
t +=  "  C`";
htmlRes += (t);
Повторяю - проверить сейчас не могу
 
Последнее редактирование:

Alex1

New member
@Slacky Я в ардуино только месяц, мигать светодиодом стало не интересно, вот и полез наверно туда куда рано )))) Показывает с сотыми, только открываю ваши строки, сразу ошибки писать начинает, вариации ниже или выше по списку не помогают
Код:
 String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
//t += float val = 1.53;
//t += int value = floor(val+0.5);
t += floor(sensors.getTempCByIndex(0)+0.5);
t +=  "  C`";  
htmlRes += (t);
 
  • Like
Реакции: kab

Alex1

New member
@kab при каком виде показывает Temp: %.1f C`
Код:
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
char str[6];     //added by  kab
sprintf(str, "%5.1f",sensors.getTempCByIndex(0));    //added by  kab
//t += (sensors.getTempCByIndex(0));    //comment by kab
t += (str);     //added by kab
t +=  "  C`";
htmlRes += (t);
 

Slacky

Member
@Slacky Я в ардуино только месяц
Просто Вы пытаетесь менять код "методом тыка", а это не будет работать в большинстве случаях. Нужно хоть небольшое понимание, что именно Вы делаете ...

Кстати, про Ардуино я до весны этого года даже не слышал :)))
 

kab

New member
@Slacky Я в ардуино только месяц, мигать светодиодом стало не интересно, вот и полез наверно туда куда рано )))) Показывает с сотыми, только открываю ваши строки, сразу ошибки писать начинает, вариации ниже или выше по списку не помогают
Код:
 String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
//t += float val = 1.53;
//t += int value = floor(val+0.5);
t += floor(sensors.getTempCByIndex(0)+0.5);
t +=  "  C`"; 
htmlRes += (t);
Да ладно, так даже интереснее ...
Посмотрите мой пост выше
 

kab

New member
@kab при каком виде показывает Temp: %.1f C`
Код:
String t = ("<p style=\"text-align: center; font-family:Courier New; color:#05FFD6; font-size: 13px; margin-top: -10px;  padding: 1px 1px; background-color:#BF4A05; \"\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n Temp: &shy;");
char str[6];     //added by  kab
sprintf(str, "%5.1f",sensors.getTempCByIndex(0));    //added by  kab
//t += (sensors.getTempCByIndex(0));    //comment by kab
t += (str);     //added by kab
t +=  "  C`";
htmlRes += (t);
вместо char str[6];

попробуйте варианты
Char str[6];
или
String str;
 

kab

New member
@Alex1
поищите в примерах ARDUINO использование sprinf() и посмотрите , как там используется часть с "%"
 
Сверху Снизу