Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "ESP8266 Arduino IDE", создана пользователем Cadil, 5 июл 2017.

  1. Cadil

    Cadil Новичок

    Сообщения:
    135
    Симпатии:
    2
    Собрал метеостанцию (ESP8266, BME280), которая отсылает информацию о температуре, влажности, давлении на е-мейл с помощью php-скрипта. Ниже приведена команда из скетча, которая выполняет эту работу -
    Код (Text):
    1. 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 выводится на веб-страницу, а дальше - проблемы, решить которые мне не под силу. Одна из них - не читается символ "@".
    Подскажите, пожалуйста, ссылку, пример, фрагмент кода, где решена аналогичная задача - значение переменной задается на веб-сервере и в дальнейшем используется в скетче.
    Заранее благодарен.

     

    Вложения:

    Последнее редактирование: 6 июл 2017
  2. lookingooder

    lookingooder Новичок

    Сообщения:
    5
    Симпатии:
    0
    Добрый день.
    Вот работающая у меня программа: (исправил замечания)

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

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

    Вложения:

    Последнее редактирование: 11 янв 2019
  3. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    972
    Симпатии:
    163
    lookingooder, впервые вижу/слышу об использовании знака "=" внутри #define, использовании точки с запятой и комментария после него - это запрещено классическим синтаксисом! Внимательно прочитайте правила использования директив препроцессора! Ну... или дайте внятное обоснование этого нарушения...
     
  4. lookingooder

    lookingooder Новичок

    Сообщения:
    5
    Симпатии:
    0
    Опс. А я думал, чегойто у меня такой способ не заработал. Там ниже есть переменные, которые я когда-то скопипастил в дефайны, написал имена большими буквами, а знаки "=" , ";" и комментарии так и остались. хотя и не вижу ничего плохого в комментариях.. MVS не возражает :)
     
  5. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    972
    Симпатии:
    163
    А чего ему возражать то? Он это оставляет на вашей совести...

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

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

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

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

    lookingooder Новичок

    Сообщения:
    5
    Симпатии:
    0
    Может, в теории...
    На практике все работает, как ожидается:
     

    Вложения:

  7. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    1.724
    Симпатии:
    181
    @lookingooder зачем ориентироваться на неправильных пчел? Они и мед могут делать неправильный.
     
  8. lookingooder

    lookingooder Новичок

    Сообщения:
    5
    Симпатии:
    0
    Ок, ребята. Заставили порыться в стандартах С++ (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..."

    Так или иначе, себя я убедил. :)
     

Поделиться этой страницей