Автопереход на web-интерфейс при подключении

Тема в разделе "ESP8266, ESP32", создана пользователем Voha888, 7 фев 2019.

  1. Voha888

    Voha888 Нуб

    Попадались мне когда-то разные EvDo\LTE-роутеры от зарубежного оператора Verizon, и вот там была фишка - на первом подключенном устройстве автоматом открывался веб-браузер на страничке веб-морды.
    При чём это работало и по кабелю и через wifi. Точно работало на компе с windows 8, с телефона не помню чтоб работало.
    Фишка очень удобная - не нужны закладки, приложения или ещё что-то. Просто подрубаемся к девайсу и сразу попадаем на его "сайт". Есть ли возможность это реализовать для Arduino\ESP8266? Или хотя-бы название технологии подскажите
     
  2. rv9c

    rv9c Гик

    Captive portal это называется. Примеры есть в сдк esp8266 arduino
     
    Voha888 нравится это.
  3. Vovka

    Vovka Гик

    А реализовывается это на одном-единственном бите, байте - как хотите:
    при прошивке сбрасываем этот бит. При подключении смотрим, установлен ли этот бит: если нет, то выводим "сайт" и устанавливаем этот бит.
     
  4. rv9c

    rv9c Гик

    Вот:
    Код (C++):
    #include <ESP8266WiFi.h>
    #include <DNSServer.h>
    #include <ESP8266WebServer.h>

    const byte DNS_PORT = 53;
    IPAddress apIP(192, 168, 1, 1);
    DNSServer dnsServer;
    ESP8266WebServer webServer(80);

    String responseHTML = ""
                          "<!DOCTYPE html><html><head><title>CaptivePortal</title></head><body>"
                          "<h1>Hello World!</h1><p>This is a captive portal example. All requests will "
                          "be redirected here.</p></body></html>";

    void setup() {
      WiFi.mode(WIFI_AP);
      WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
      WiFi.softAP("DNSServer CaptivePortal example");

      // if DNSServer is started with "*" for domain name, it will reply with
      // provided IP to all DNS request
      dnsServer.start(DNS_PORT, "*", apIP);

      // replay to all requests with same HTML
      webServer.onNotFound([]() {
        webServer.send(200, "text/html", responseHTML);
      });
      webServer.begin();
    }

    void loop() {
      dnsServer.processNextRequest();
      webServer.handleClient();
    }
     
    Voha888 нравится это.
  5. parovoZZ

    parovoZZ Гуру

    А первое подключение по Wi-Fi чем-то отличается от второго, третьего и т.д.?
     
  6. parovoZZ

    parovoZZ Гуру

    А ESP точно умеет по USB отдавать html страничку?
     
  7. rv9c

    rv9c Гик

    О каком usb речь)? Автор ветки о wifi вроде как)
     
    Voha888 нравится это.
  8. Voha888

    Voha888 Нуб

    Спасибо огромное! Круто
     
  9. VovanPitersky

    VovanPitersky Нуб

    Да нихрена не работает ((((
    РАБОТАЕТ в варианте если подключиться к AP, потом открыть браузер и в браузере набрать что-то типа 11111.ru или gggggg.com
    а если в браузере набирать просто 11111 или gggggg - то получаем ответ: НЕ УДАЁТСЯ ПОЛУЧИТЬ ДОСТУП К САЙТУ (((((
    вопрос - а тупо сразу после подключения к AP автоматическая загрузка стартовой страницы средствами ардуино не возможна?
     
  10. VovanPitersky

    VovanPitersky Нуб



    чего нашел, а там в комментах вопрос:
    Интересное видео, у меня Captive Portal заработал, только если адрес начинается с http:// и не работает с https:// Если подключатся к модулю на андроиде, то рут страница сама не отрывается, возможно у меня неправильный андроид или из-за того, что точка доступа модуля без пароля.

    и ответ автора:
    Попытка в лоб добавить второй секурный веб-сервер на 443 порту с тупой переадресацией на 80 порт приводит к торможению с последующей перезагрузкой ESP. С другой стороны, учитывая использование самоподписанных сертификатов на ESP, в любом случае без предупреждения о недействительном сертификате сервера браузер не пройдет дальше сам. Так что овчинка выделки не стоит, даже если удастся наладить костыль.

    ((((
     
  11. Vortigont

    Vortigont Нуб

    Что-бы страница портала "выскакивала" сама схема работы должна быть несколько другая.
    - ДНС сервер на все запросы отдает запись самой ESP
    - веб сервер на все несуществующие страницы должен выдавать не 404 со страницей "я портал", а 302 редирект на другой УРЛ с порталом, т.е. напр на http://192.168.4.1/portal.html

    Андроид/винда и другие ОС, сами имеют свои сервисы пингеры в инете для проверки подключения в закрытых сетях. Андроид проверяет URL connectivitycheck.gstatic.com. Получив на этот запрос редирект аднроид считает что он не в интернете и открывает страницу логина в портал (ту куда идет редирект). HTTPS поднимать не обязательно. Вот тут есть подробнее про АПИ.