Ви не увійшли.
Сторінки 1
Добрый вечер!!
Как в 8266 определить параметры wi-fi - ssid, password используя Arduino IDE это понятно.
А возможно ли эти параметры (ssid, password) изменить уже в готовом девайсе через web интерфейс?
Т.е. если устройство необходимо подключить к другой точке доступа wi-fi как это сделать?
Спасибо!!
Неактивний
Добрый вечер!!
Как в 8266 определить параметры wi-fi - ssid, password используя Arduino IDE это понятно.
А возможно ли эти параметры (ssid, password) изменить уже в готовом девайсе через web интерфейс?
Т.е. если устройство необходимо подключить к другой точке доступа wi-fi как это сделать?
Спасибо!!
Конечно, но это-же нужно программировать. Переподключите к WI-Fi сети ваш модуль с другими значениями и все. А как вы их хотите вводить вам виднее. Непонятно какой у вас модуль и как используется через AT команды или со встроенным приложением.
Неактивний
Модуль - ESP-12F, скетч для примера типа Blynk.
И чем вы собрались мигать у ESP-12F, и где там SSID?
Неактивний
Blynk - это облачный сервис.
https://esp8266.ru/esp8266-blynk/
Я им не заниаюсь, немогу подсказать, нужно разбираться. У них свои библиотеки для ESP8266.
Неактивний
я же говорю - не важно, Blynk это пример, пусть будет такой скетч, где изначально ssid = "SPOT", password = "12345678":
/**
  WiFi розетка. Версия 1.0
  Copyright (C) 2015 http://samopal.pro
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
// GPIO, куда подцелено реле
uint8_t PowerPin = 2;
bool    PowerOn  = false;
// Имя хоста
const char* host = "esp8266-power";
// Вместо звездочек свои параметры WiFi сети
const char* ssid = "SPOT";
const char* password = "12345678";
ESP8266WebServer server(80);
void setup() {
  // Последовательный порт для отладки
  Serial.begin(115200);
  Serial.printf("\n\nFree memory %d\n", ESP.getFreeHeap());
  // Инициализация выхода реле
  pinMode(PowerPin , OUTPUT);
  digitalWrite(PowerPin , PowerOn);
  // Подлючение к WiFi
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() == WL_CONNECTED) {
    // Запуск WEB-сервера
    MDNS.begin(host);
    server.on ( "/", HTTP_handleRoot );
    server.onNotFound ( HTTP_handleRoot );
    server.begin();
    Serial.printf( "HTTP server ok! Open http://%s.local in your browser\n", host);
  }
  else {
    Serial.printf("WiFi started is fail");
  }
}
void loop() {
  server.handleClient();
  delay(50);
}
/*
   Оработчик главной страницы сервера
*/
void HTTP_handleRoot(void) {
  bool stat = false;
  if ( server.hasArg("stat") ) {
    if ( strncmp(server.arg("stat").c_str(), "1", 1) == 0 )stat = true;
  }
  else {
    stat = PowerOn;
  }
  String out = "";
  out =
    "<html>\
  <head>\
    <meta charset=\"utf-8\" />\
    <title>WiFi розетка</title>\
    <style>\
      body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
    </style>\
  </head>\
  <body>\
    <h1>WiFi розетка. Версия 1.0</h1>\n";
  if ( stat ) {
    out += "\
    <h2>Состояние: Включено</br>\
    <a href=\"/?stat=0\">Выключить</a></h2>\
    ";
  }
  else {
    out += "\
    <h2>Состояние: Выключено</br>\
    <a href=\"/?stat=1\">Включить</a><h2>\
    ";
  }
  out += "\
  </body>\
</html>";
  server.send ( 200, "text/html", out );
  if ( stat != PowerOn ) {
    PowerOn = stat;
    digitalWrite(PowerPin , PowerOn);
    if ( PowerOn )Serial.println("Power is ON");
    else Serial.println("Power is OFF");
  }
}Неактивний
....
WiFi.end();
// реинициализация с новыми значениями
WiFi.mode(WIFI_AP_STA);
WiFi.begin(my_ssid, my_password);
....
Как-то так.
Неактивний
Извините - не понял, можно полный пример самого простого скетча, где меняется через браузер ssid/passw, и желательно сохраняется, что бы после перезапуска не делать эти операции по новой ![]()
Неактивний
Извините - не понял, можно полный пример самого простого скетча, где меняется через браузер ssid/passw, и желательно сохраняется, что бы после перезапуска не делать эти операции по новой
Извинте, но у меня нет такого готового примера. Вам придется напрячь ум, почитать руководство по языку программирования еще раз, и воплотить свои желания самому. Или заказать проектирование программы профессионалу. Через браузер переподключать модем небезопасно, а роуминг у WI-Fi не предусмотрен.
Неактивний
Спасибо, что мягенько послали - "почитать" руководства. О каком роуминге Вы говорите?
Называйте автоматическое переключение базовых узлов или точек доступа как хотите. На форуме могут подсказать, посоветовать, и т.п. Но писать вам менеджер соединений здесь никто не будет. И еще, вы просто не знаете как здесь могут послать.
Неактивний
Хотя, сейчас уже делают с и роумингом. Например: https://keenetic.com/ru/how-it-works/wifi-modes И ничего изобретать не нужно.
Неактивний
fotolexa пише:Спасибо, что мягенько послали - "почитать" руководства. О каком роуминге Вы говорите?
Называйте автоматическое переключение базовых узлов или точек доступа как хотите. На форуме могут подсказать, посоветовать, и т.п. Но писать вам менеджер соединений здесь никто не будет. И еще, вы просто не знаете как здесь могут послать.
Что такое стандарты 802.11 r/v/k я знаю и у самого есть сеть построенная c использованием Mikrotik CAPSMAN, но причём тут роуминг к сути вопроса - не понятно.
P.S. Если Вы не в состоянии или не имеете желания помочь или проконсультировать, то посылать почитать кое что, кое где - это бессмысленно, типа иди "погугли", зачем?
Неактивний
... P.S. Если Вы не в состоянии или не имеете желания помочь или проконсультировать, то посылать почитать кое что, кое где - это бессмысленно, типа иди "погугли", зачем?
Как вам нужно помочь, написать вам программу или научить как это сделать? Просто, изменив параметры подключения из браузера вы рискуете потерять устройство, в случае ошибки.
Неактивний
Не надо обижаться когда пишут что "почитайте" хотя бы потому что иногда тема не может быть изложена в пару десятков предложений. Писать здесь статью вряд ли кто то будет. И главное, никто за Вас не пройдет "путь познания" а если Вы хотите готовое то это совсем другое. Никто не будет тратить время и писать скетч как пример не потому что не знает, а потому что ценит свое время ( а может ленится 
 ) другое дело найти ошибку, подправить или подсказать. Так что без обид и поз. Теперь по теме. Есть готовая библиотека которая решает поднятый Вами вопрос и очень просто, установите WiFiManager.h и посмотрите примеры, почитайте доку. Она имеет очень подробное описание. Вопрос поднятый Вячеславом по поводу роумининга интересный хотя не очень актуальный, в большинстве случаев ESP не используется как мобильник но все таки решение было бы интересным 
.
Остання редакція Nefreemen (2018-08-15 22:31:09)
Неактивний
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 );
}Сейчас работаю над сохранением и изменением сетевого адреса (DHCP, STATIC)
Если будет интересно пишите поделюсь.
https://youtu.be/saAv7YOiAyM?t=66
клёвый проект на есп32 с кодом с возможностью менять любые настройки на лету
Что лень посмотреть WiFiManager.h о чем писал выше. А то клевый проект, клевый проект...А это и есть работа с этой библиотекой. Меняй что хочешь, сброс в дефолтную АР с ip 192.168.4.1 (имя можно задать) и с веб страницей для сканирования и подключения.
Неактивний
Сейчас работаю над сохранением и изменением сетевого адреса (DHCP, STATIC)
Если будет интересно пишите поделюсь.
Интересно. также интересно по этой теме еще вопроси позадавать. Использовал Ваш скетч, но есть вопросы по работе устройства с применением этой программы. Нужна помощь в ее доработке. Занимаюсь выпуском приборов, которые хочу оснастить ESP. Ищу специалиста - программера для реализации идей
Сторінки 1