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

Нужна помощь Как задать переменную на веб сервере и сохранить ее во flash

Cadil

New member
Собрал метеостанцию (ESP8266, BME280), которая отсылает информацию о температуре, влажности, давлении на е-мейл с помощью php-скрипта. Ниже приведена команда из скетча, которая выполняет эту работу -
Код:
http.begin("http://skorovoda.in.ua/php/un37.php?mymail="+String(address)+"&t="+String(t) +"&h="+String(h) +"&pHg="+String(p));
Кроме того, в при первом включении устройства - создается новая точка доступа, подключившись к которой, пользователь имеет возможность ввести имя своей Wi-Fi сети и пароль.
Хотелось бы переменную address (адрес е-мейла) задавать не в скетче, а считывать с окна предварительных настроек на этой же веб-странице, которую в скетче формирует библиотека WiFiManager.h - тут задаются имя Wi-Fi сети и пароль доступа. Как это сделать?
Подкорректировал код библиотеки WiFiManager.h. Теперь окно для переменной address выводится на веб-страницу, а дальше - проблемы, решить которые мне не под силу. Одна из них - не читается символ "@".
Подскажите, пожалуйста, ссылку, пример, фрагмент кода, где решена аналогичная задача - значение переменной задается на веб-сервере и в дальнейшем используется в скетче.
Заранее благодарен.

 

Вложения

Последнее редактирование:
Собрал метеостанцию (ESP8266, BME280), которая отсылает информацию о температуре, влажности, давлении на е-мейл с помощью php-скрипта. Ниже приведена команда из скетча, которая выполняет эту работу -
Код:
http.begin("http://skorovoda.in.ua/php/un37.php?mymail="+String(address)+"&t="+String(t) +"&h="+String(h) +"&pHg="+String(p));
Кроме того, в при первом включении устройства - создается новая точка доступа, подключившись к которой, пользователь имеет возможность ввести имя своей Wi-Fi сети и пароль.
Хотелось бы переменную address (адрес е-мейла) задавать не в скетче, а считывать с окна предварительных настроек на этой же веб-странице, которую в скетче формирует библиотека WiFiManager.h - тут задаются имя Wi-Fi сети и пароль доступа. Как это сделать?
Подкорректировал код библиотеки WiFiManager.h. Теперь окно для переменной address выводится на веб-страницу, а дальше - проблемы, решить которые мне не под силу. Одна из них - не читается символ "@".
Подскажите, пожалуйста, ссылку, пример, фрагмент кода, где решена аналогичная задача - значение переменной задается на веб-сервере и в дальнейшем используется в скетче.
Заранее благодарен.
Добрый день.
Вот работающая у меня программа: (исправил замечания)

#define SSID2 = "ENTER_NEW_SSID"; // SSID по умолчанию
#define PASS2 = "Enter_New_Password"; //Password по умолчанию

handle_setup_page - выводятся текущие настройки
handle_confirm_Setup - сохраняются введенные данные
 

Вложения

Последнее редактирование:

Юрий Ботов

Moderator
Команда форума
lookingooder, впервые вижу/слышу об использовании знака "=" внутри #define, использовании точки с запятой и комментария после него - это запрещено классическим синтаксисом! Внимательно прочитайте правила использования директив препроцессора! Ну... или дайте внятное обоснование этого нарушения...
 
lookingooder, впервые вижу/слышу об использовании знака "=" внутри #define, использовании точки с запятой и комментария после него - это запрещено классическим синтаксисом! Внимательно прочитайте правила использования директив препроцессора! Ну... или дайте внятное обоснование этого нарушения...
Опс. А я думал, чегойто у меня такой способ не заработал. Там ниже есть переменные, которые я когда-то скопипастил в дефайны, написал имена большими буквами, а знаки "=" , ";" и комментарии так и остались. хотя и не вижу ничего плохого в комментариях.. MVS не возражает :)
 

Юрий Ботов

Moderator
Команда форума
не вижу ничего плохого в комментариях.. MVS не возражает :)
А чего ему возражать то? Он это оставляет на вашей совести...

давайте просто разберем что получится. Итак define:
#define AAA 123 // kaka

вызов в теле программы:
a = AAA+1;

после препроцессора:
a = 123 // kaka+1;

компилятор:
"Ошибка в строке a = AAA+1; - ожидается точка с запятой!!!"
 
А чего ему возражать то? Он это оставляет на вашей совести...

давайте просто разберем что получится. Итак define:
#define AAA 123 // kaka

вызов в теле программы:
a = AAA+1;

после препроцессора:
a = 123 // kaka+1;

компилятор:
"Ошибка в строке a = AAA+1; - ожидается точка с запятой!!!"
Может, в теории...
На практике все работает, как ожидается:
 

Вложения

Сергей_Ф

Moderator
Команда форума
@lookingooder зачем ориентироваться на неправильных пчел? Они и мед могут делать неправильный.
Стандартный вид директивы следующий:

#define имя_макроса последовательность_символов

Обратим внимание, что в данном операторе отсутствует точка с запятой. Между идентификатором и последовательностью символов может быть любое число пробелов. Макрос завершается только переходом на следующую строку.
 
@lookingooder зачем ориентироваться на неправильных пчел? Они и мед могут делать неправильный.
Ок, ребята. Заставили порыться в стандартах С++ (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf):

Вот про директивы:
"The only white-space characters that shall appear between preprocessing tokens within a preprocessing
directive (from just after the introducing # preprocessing token through just before the terminating new-line
character) are space and horizontal-tab (including spaces that have replaced comments or possibly other
white-space characters in translation phase 3)."
Как я с трудом понял этот сухой английский текст - в строке директивы могут присутствовать пробелы, которыми были заменены комментарии.

Вот про комментарии:
2.8 Comments [lex.comment]
1 The characters /* start a comment, which terminates with the characters */. These comments do not
nest. The characters // start a comment, which terminates with the next new-line character. If there is a
form-feed or a vertical-tab character in such a comment, only white-space characters shall appear between it
and the new-line that terminates the comment; no diagnostic is required. [ Note: The comment characters
//, /*, and */ have no special meaning within a // comment and are treated just like other characters.
Similarly, the comment characters // and /* have no special meaning within a /* comment. —end note ]
Здесь - комментарием считается все начиная с /* и заканчивая */ , а также все, начиная с // и заканчивая концом строки.

Хотя работает такое объявление (самому стало интересно) и // не интерпретируется как комментарий:
#define SSID0 "ssid // 0"
Но и здесь есть строчка в стандарте:
"A string literal is a sequence of characters (as defined in 2.14.3) surrounded by double quotes..."

Так или иначе, себя я убедил. :)
 
Сверху Снизу