Библиотека WiFiManager + SSDP

Поддержать сайт

В предыдущих примерах была использована библиотека ESPWebConfig.

Сейчас используем другую библиотеку WiFiManager, подключим к ней aREST из предыдущего примера, а также воспользуемся Simple Service Discovery Protocol (SSDP) для отображения устройства в списке сетевых сервисов.

Библиотека WiFiManager: https://github.com/tzapu/WiFiManager

Библиотека aREST: https://github.com/marcoschwartz/aREST

Скетч:

#include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino

//needed for library
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>         //https://github.com/tzapu/WiFiManager
#include <ESP8266SSDP.h>
#include <aREST.h>



// Web интерфейс для устройства
ESP8266WebServer HTTP(80);
// aREST и сервер для него
WiFiServer SERVERaREST(8080);
aREST rest = aREST();
void setup() {
    // Настраиваем вывод отладки
    Serial.begin(115200);

    //Включаем WiFiManager
    WiFiManager wifiManager;
    
    //Если не удалось подключиться клиентом запускаем режим AP
    // доступ к настройкам по адресу http://192.168.4.1 
    wifiManager.autoConnect("AutoConnectAP");
    
    //если подключение к точке доступа произошло сообщаем
    Serial.println("connected...yeey :)");
    //настраиваем HTTP интерфейс
    HTTP_init();

    //запускаем SSDP сервис 
    Serial.printf("Starting SSDP...\n");
    SSDP_init();
    Serial.printf("SSDP Ready!\n");
    // включаем aREST и сервер к нему
    AREST_init();
    Serial.println("aREST Server started");
    
}

void loop() {
    // put your main code here, to run repeatedly:
    HTTP.handleClient();
  delay(1);
   // Handle REST calls
  WiFiClient client = SERVERaREST.available();

  if (!client) {
    return;
  }
  while (!client.available()) {
    delay(1);
  }
 rest.handle(client);
}



void SSDP_init(void){
  
    SSDP.setSchemaURL("description.xml");
    SSDP.setHTTPPort(80);
    SSDP.setName("WiFiManager + SSDP");
    SSDP.setSerialNumber("001788102201");
    SSDP.setURL("index.html");
    SSDP.setModelName("WiFiManager + SSDP");
    SSDP.setModelNumber("000000000001");
    SSDP.setModelURL("http://esp8266-arduinoide.ru/wifimanager/");
    SSDP.setManufacturer("Tretyakov Sergey");
    SSDP.setManufacturerURL("http://www.esp8266-arduinoide.ru");
    SSDP.begin();
}

void HTTP_init(void){
  
  HTTP.on("/index.html", HTTP_GET, [](){
      HTTP.send(200, "text/plain", "Test aREST");
    });
    HTTP.on("/description.xml", HTTP_GET, [](){
      SSDP.schema(HTTP.client());
    });
    HTTP.begin();
}

void AREST_init(void){
 // Определяем имя name и ИД ID устройства aREST
  rest.set_id("1");
  rest.set_name("aRest");

 // Запускаем сервер
  SERVERaREST.begin(); 
  }

Как пользоваться WIFIManager:

Включите в скетч библиотеки
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>

В функции Serup

WiFiManager wifiManager;

Настройте режим AP один из трех вариантов
wifiManager.autoConnect(“AP-NAME”, “AP-PASSWORD”);  // Имя точки доступа и пароль
wifiManager.autoConnect(“AP-NAME”);  // без пароля
wifiManager.autoConnect(); // с генерирует имя по Chip ID

По умолчанию точка доступа будет с адресом 192.168.4.1, если требуется другой адрес добавь перед wifiManager.autoConnect строку –
wifiManager.setAPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));

Режим отладки по умолчанию включен!
Отключить можно добавив строку wifiManager.setDebugOutput(false);

Если в режиме AP нужно выполнить какие то действия, то добавляем строку ifiManager.setAPCallback(configModeCallback);

и функцию например:

void configModeCallback () {
Serial.println(Entered config mode); Serial.println(WiFi.softAPIP());
}

Тайм аут
wifiManager.setTimeout (180);

Поддержать сайт

29 мыслей о “Библиотека WiFiManager + SSDP”

    1. Копируйте скетч через специальную кнопку в правом верхнем углу поля скетча. Если ошибка не от копирования обязательно проверьте версию поддержки платы в видео есть как это делается. Версия 2.0.0. Скетч только что проверил там ошибки нет.

  1. Как и писал дает ошибку
    Arduino: 1.6.7 (Windows 7), Плата:”Generic ESP8266 Module, Serial, 80 MHz, 40MHz, DIO, 115200, 1M (512K SPIFFS), ck”

    C:\Users\DD69~1\AppData\Local\Temp\arduino_d2d344940efbe9b60cae316b0e56e522\HelloServer.ino: In function ‘void setup()’:

    HelloServer:31: error: ‘HTTP_init’ was not declared in this scope

    HTTP_init();

    ^

    HelloServer:35: error: ‘SSDP_init’ was not declared in this scope

    SSDP_init();

    ^

    HelloServer:38: error: ‘AREST_init’ was not declared in this scope

    AREST_init();

    ^

    C:\Users\DD69~1\AppData\Local\Temp\arduino_d2d344940efbe9b60cae316b0e56e522\HelloServer.ino: In function ‘void AREST_init()’:

    C:\Users\DD69~1\AppData\Local\Temp\arduino_d2d344940efbe9b60cae316b0e56e522\HelloServer.ino:89:18: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    rest.set_id(“1”);

    ^

    C:\Users\DD69~1\AppData\Local\Temp\arduino_d2d344940efbe9b60cae316b0e56e522\HelloServer.ino:90:24: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    rest.set_name(“aRest”);

    ^

    exit status 1
    ‘HTTP_init’ was not declared in this scope

    Что делать не пойму?

    1. Можно приложить подорожник. Компилятор не видит те функции которые вы объявляете после того как обращаетесь к ним. Баг легко обойти перенеся в заголовок объявление функций. Можно без описаний. Все скетчи запускаются в 1.6.7 с использованием данного приема. Как по мне это проще чем переставлять на 1.6.5
      Пример:

      void HTTP_init(void);
      void SSDP_init(void);
      AREST_init();
      ….

      void setup(){

      }
      …..

  2. C:\Users\Bond-PC\Documents\Arduino\libraries\WiFiManager-master\WiFiManager.cpp: In member function ‘void WiFiManager::handleWifiSave()’:
    C:\Users\Bond-PC\Documents\Arduino\libraries\WiFiManager-master\WiFiManager.cpp:462:20: error: ‘class IPAddress’ has no member named ‘fromString’
    _sta_static_ip.fromString(server->arg(“ip”));
    ^
    C:\Users\Bond-PC\Documents\Arduino\libraries\WiFiManager-master\WiFiManager.cpp:467:20: error: ‘class IPAddress’ has no member named ‘fromString’
    _sta_static_gw.fromString(server->arg(“gw”));
    ^
    C:\Users\Bond-PC\Documents\Arduino\libraries\WiFiManager-master\WiFiManager.cpp:472:20: error: ‘class IPAddress’ has no member named ‘fromString’
    _sta_static_sn.fromString(server->arg(“sn”));
    ^
    Ошибка компиляции.

  3. помогите пожалуйста,устал искать решение!не запоминает wi-fi сеть,то есть после перезагрузки модуль больше не подключается к сети=((соответственно запускается в режиме точки доступа….=((

    1. смех-смехом,но модуль подключается к сети ровно каждый второй раз после сброса питания….!!проверил раз двадцать…

  4. Здравствуйте. Загружал предыдущие скетчи по Вашим урокам. Всё получалось.
    Скетч этого урока не компилируется. Выдаётся ошибка:
    exit status 1
    ‘HTTP_init’ was not declared in this scope

    Мои установки:
    Arduino: 1.6.9 (Windows 7), Плата:”Generic ESP8266 Module, 80 MHz, 40MHz, DIO, 115200, 4M (1M SPIFFS), ck, Serial, None”

    1. Работает только с IDE 1.6.5 Версия ESP ядра 2.0.0. В более поздних версиях SSDP не работает с Windows в Android устройствах работает. Баг в библиотеке.

  5. Здравствуйте. Пример скомпилировался и запустился. WiFiManager отработал как надо. “Test aREST” получил. Но винда (Windows 8.1) не показывает устройство в сетевом окружении. В чем может быть проблема? Помогите разобраться, пожалуйста.

  6. Скачал IDE 1.6.5-rc2 Версия ESP ядра 2.0.0-rc2
    aRECT при компиляции постоянно ругается на строку AREST_init(); типа нет такой функции
    а так же на строки
    rest.set_id(“1”);
    rest.set_name(“aRest”);
    Типа не могут быть string
    В итоге компилится, но в ESP8266 не работает, постоянно идет ребут.
    А вот IDE 1.6.10 с ESP ядра 2.3.0-rc2 компилится и все запускается. Но вот пример с фтп так же компилится с ошибками и не работает в ESP8266

  7. Использую пример по StaticIP из библиотеки, но почему-то не работает. Адрес точки все ровно 192.168.4.1. Как его сменить не ковыряя саму библиотеку, не понятно.


    IPAddress _ip = IPAddress(10, 0, 1, 78);
    IPAddress _gw = IPAddress(10, 0, 1, 1);
    IPAddress _sn = IPAddress(255, 255, 255, 0);
    wifiManager.setSTAStaticIPConfig(_ip, _gw, _sn);
    wifiManager.autoConnect(“AutoConnectAP”, “password”)

    Компилится без ошибок, сеть создает. Но ip адрес точки не меняется. Так-же не работает протокол SSDP, устройства не видно в сетевом окружении.

    ide- 1.6.8.
    esp модуль – 2.3.0
    WifiManager – 0.12.0

    1. Разобрался. Для этого нужно использовать функцию setAPStaticIPConfig, вида :
      setAPStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn);

      где первый параметр – ip сервера, второй – шлюз, третий – маска подсети.

  8. Скетч у меня заработал. Версия Arduino IDE 1.8.0, версия библиотеки ESP8266 – 2.3.0. При компиляции никаких проблем не возникло.

    1. Загрузите код и сделайте на устройстве запрос
      ваш_ip/description.xml
      Вы увидите ответ.
      SSDP.schema(HTTP.client());
      эта строка как раз и отправляет этот ответ.
      Она берет данные из схемы которую формирует библиотека.

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.