Напишите ответ

Введите сообщение и нажмите Отправить
Параметры

Назад

Обзор темы (новое вверху)

Nefreemen
2018-09-02 22:25:32
gera_b пишет:

https://youtu.be/saAv7YOiAyM?t=66

клёвый проект на есп32 с кодом с возможностью менять любые настройки на лету

Что лень посмотреть WiFiManager.h о чем писал выше. А то клевый проект, клевый проект...А это и есть работа с этой библиотекой. Меняй что хочешь, сброс в дефолтную АР с  ip 192.168.4.1 (имя можно задать) и с веб страницей для сканирования и подключения.

gera_b
2018-08-31 17:54:03

https://youtu.be/saAv7YOiAyM?t=66

клёвый проект на есп32 с кодом с возможностью менять любые настройки на лету

fotolexa
2018-08-30 14:00:26

Проверил, спасибо - всё ОК! Сейчас пока занят рутинными делами, но дальнейшее развитие этой темы очень, очень интересно:)

gooloo
2018-08-29 22:50:29

Сейчас работаю над сохранением и изменением сетевого адреса (DHCP, STATIC)
Если будет интересно пишите поделюсь.

fotolexa
2018-08-29 22:32:25

Спасибо!! Дома сейчас модуля чистого нету, завтра попробую на работе - отпишусь.

gooloo
2018-08-29 22:21:51

fotolexa, это должно Вам подойти:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>

String str = "";

boolean conf = false;
 
String html_header = "<html>\
 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
 <head>\
   <title>ESP8266 Settings</title>\
   <style>\
     body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
   </style>\
 </head>";
 
ESP8266WebServer server(80);

void setup(void)
{
    byte len_ssid, len_pass;
   
    delay(3000);
    Serial.begin(115200);
    Serial.println();  
   
    EEPROM.begin(98);
 
    len_ssid = EEPROM.read(96);
    len_pass = EEPROM.read(97);
    if(len_pass > 64) len_pass = 0;
   
  pinMode(4, INPUT_PULLUP);
  pinMode(0, INPUT_PULLUP);
  if((len_ssid < 33) && (len_ssid != 0)){
    // Режим STATION
      WiFi.mode( WIFI_STA);
      unsigned char* buf_ssid = new unsigned char[32];
      unsigned char* buf_pass = new unsigned char[64];
      for(byte i = 0; i < len_ssid; i++) buf_ssid[i] = char(EEPROM.read(i));
      buf_ssid[len_ssid] = '\x0';
      const char *ssid  = (const char*)buf_ssid;
      for(byte i = 0; i < len_pass; i++) buf_pass[i] = char(EEPROM.read(i + 32));
      const char *pass  = (const char*)buf_pass;
      buf_pass[len_pass] = '\x0';
      delay(2000);
      Serial.print("SSID: ");
      Serial.print(ssid);
      Serial.print("   ");
      Serial.print("Password: ");
      Serial.println(pass);
       
     WiFi.begin(ssid, pass);
      // Wait for connection
      while ( WiFi.status() != WL_CONNECTED ) {
       delay ( 500 );
        Serial.print ( "." );
      }
      Serial.println();
      Serial.print("Connected to ");
      Serial.println(ssid);
      Serial.print("IP address: ");
      Serial.println(WiFi.localIP());
    }
    else // Режим SoftAP
      {
        const char *ssid_ap = "goolooESP"; 
        WiFi.mode(WIFI_AP);
        Serial.print("Configuring access point...");
        /* You can remove the password parameter if you want the AP to be open. */
        WiFi.softAP(ssid_ap);
        delay(2000);
        Serial.println("done");
        IPAddress myIP = WiFi.softAPIP();
        Serial.print("AP IP address: ");
        Serial.println(myIP);
        server.on("/", handleRoot);
        server.on("/ok", handleOk);
        server.begin();
        Serial.println("HTTP server started");  
      }  
   
}
void loop() {
     server.handleClient();
  
  // Перевод модуля в режим конфигурации путем замыкания GPIO5 на массу

    if((digitalRead(4) == LOW) && !conf){
    EEPROM.write(96,255);
    EEPROM.commit();
    EEPROM.end();
    conf = true; 
    Serial.println("Please reboot module for coniguration --gpio5--");
    Serial.println(conf);
    Serial.println(f_state);
  }
  
}
 
void handleRoot() {
  String str = "";
  str += html_header;
  str += "<body>\
   <form method=\"POST\" action=\"ok\">\
     <input name=\"ssid\"> WIFI Net</br>\
     <input name=\"pswd\"> Password</br></br>\
     <input type=SUBMIT value=\"Save settings\">\
   </form>\
 </body>\
</html>";
server.send ( 200, "text/html", str );
}
 
void handleOk(){
  String ssid_ap;
  String pass_ap;
  unsigned char* buf = new unsigned char[64];
 
  String str = "";
  str += html_header;
  str += "<body>";
 
  EEPROM.begin(98);
 
  ssid_ap = server.arg(0);
  pass_ap = server.arg(1);
 
  if(ssid_ap != ""){
    EEPROM.write(96,ssid_ap.length());
    EEPROM.write(97,pass_ap.length());
    ssid_ap.getBytes(buf, ssid_ap.length() + 1);
    for(byte i = 0; i < ssid_ap.length(); i++)
      EEPROM.write(i, buf[i]);
      
    pass_ap.getBytes(buf, pass_ap.length() + 1);
    for(byte i = 0; i < pass_ap.length(); i++)
      EEPROM.write(i + 32, buf[i]);
      
    EEPROM.commit();
    EEPROM.end();
   
    str +="Configuration saved in FLASH</br>\
   Changes applied after reboot</p></br></br>\
   <a href=\"/\">Return</a> to settings page</br>";
  }
  else {
    str += "No WIFI Net</br>\
   <a href=\"/\">Return</a> to settings page</br>";
  }
  str += "</body></html>";
  server.send ( 200, "text/html", str );
}
Nefreemen
2018-08-15 22:29:29

Не надо обижаться когда пишут что "почитайте" хотя бы потому что иногда тема не может быть изложена в пару десятков предложений. Писать здесь статью вряд ли кто то будет. И главное, никто за Вас не пройдет "путь познания" а если Вы хотите готовое то это совсем другое. Никто не будет тратить время и писать скетч как пример не потому что не знает, а потому что ценит свое время ( а может ленится lol ) другое дело найти ошибку, подправить или подсказать. Так что без обид и поз. Теперь по теме. Есть готовая библиотека которая решает поднятый Вами вопрос и очень просто, установите WiFiManager.h и посмотрите примеры, почитайте доку. Она имеет очень подробное описание. Вопрос поднятый Вячеславом по поводу роумининга интересный хотя не очень актуальный, в большинстве случаев ESP не используется как мобильник но все таки решение было бы интересным smile.

Вячеслав Азаров
2018-08-15 10:44:27
fotolexa пишет:

... P.S. Если Вы не в состоянии или не имеете желания помочь или проконсультировать, то посылать почитать кое что, кое где - это бессмысленно, типа иди "погугли", зачем?

Как вам нужно помочь, написать вам программу или научить как это сделать? Просто, изменив параметры подключения из браузера вы рискуете потерять устройство, в случае ошибки.

fotolexa
2018-08-15 10:39:38
Вячеслав Азаров пишет:
fotolexa пишет:

Спасибо, что мягенько послали - "почитать"  руководства. О каком роуминге Вы говорите?

Называйте автоматическое переключение базовых узлов или точек доступа как хотите. На форуме могут подсказать, посоветовать, и т.п. Но писать вам менеджер соединений здесь никто не будет. И еще, вы просто не знаете как здесь могут послать.

Что такое стандарты 802.11 r/v/k я знаю и у самого есть сеть построенная c использованием Mikrotik CAPSMAN, но причём тут роуминг к сути вопроса - не понятно.
P.S. Если Вы не в состоянии или не имеете желания помочь или проконсультировать, то посылать почитать кое что, кое где - это бессмысленно, типа иди "погугли", зачем?

Вячеслав Азаров
2018-08-15 10:10:53

Хотя, сейчас уже делают с и роумингом. Например: https://keenetic.com/ru/how-it-works/wifi-modes И ничего изобретать не нужно.

Вячеслав Азаров
2018-08-14 23:49:23
fotolexa пишет:

Спасибо, что мягенько послали - "почитать"  руководства. О каком роуминге Вы говорите?

Называйте автоматическое переключение базовых узлов или точек доступа как хотите. На форуме могут подсказать, посоветовать, и т.п. Но писать вам менеджер соединений здесь никто не будет. И еще, вы просто не знаете как здесь могут послать.

fotolexa
2018-08-14 23:41:24

Спасибо, что мягенько послали - "почитать"  руководства.
О каком роуминге Вы говорите?

Вячеслав Азаров
2018-08-14 23:18:20
fotolexa пишет:

Извините - не понял, можно полный пример самого простого скетча, где меняется через браузер ssid/passw, и желательно сохраняется, что бы после перезапуска не делать эти операции по новой smile

Извинте, но у меня нет такого готового примера. Вам придется напрячь ум, почитать руководство по языку программирования еще раз,  и воплотить свои желания самому. Или заказать проектирование программы профессионалу. Через браузер переподключать модем небезопасно, а роуминг у WI-Fi не предусмотрен.

fotolexa
2018-08-14 22:59:52

Извините - не понял, можно полный пример самого простого скетча, где меняется через браузер ssid/passw, и желательно сохраняется, что бы после перезапуска не делать эти операции по новой smile

Вячеслав Азаров
2018-08-14 22:52:34

....
WiFi.end();

// реинициализация с новыми значениями

WiFi.mode(WIFI_AP_STA);
WiFi.begin(my_ssid, my_password);
....

Как-то так.

Подвал раздела