Ви не увійшли.
Сторінки 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