• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Wifi manager - ну да, работает и что дальше??

Neznayka

New member
Ссылку OTA Updates — ESP8266 Arduino Core 2.4.0 documentation я дал, переведите в google будет понятней.
Результат тот же
14:52:19 [ERROR]: No response from device
Антивирус брандмауэр отключал, бонжур ставил, хотя какое эпл-мак сюда отношение имеет. Библиотека косячная. Доказательством тому поиск в гугл, то ей чего то не хватает, то версия (питон) не та, вообщем это для того что б STA пасс поменять )) . Буду искать решение через менеджер из AP/
PS если библиотека сделана с умом, то работает с пол оборота, и это не дело кривых рук.... Свою систему подстраивать переустанавливать из за этого нет желания. до этого ни с одной библиотекой проблем не было
 
Последнее редактирование:

CodeNameHawk

Moderator
Команда форума
PS если библиотека сделана с умом, то работает с пол оборота, и это не дело кривых рук....
У многих библиотека работает нормально, у некоторых работает с особенностями(как у меня, первым запускаю роутер, потом комп, потом есп и все работает(недавно поменял роутер, так теперь, если он загружен близко к 100%, тоже не обновляется, так это проблема железа, а не библиотеки)), некоторые не разобрались как ее "готовить", а в этом может помочь отладочная информация с Serial через COM порт.

Буду искать решение через менеджер из AP/
А чего его искать?
Тут(в примере WiFiMenager->AutoConnect) же по английски написано "// put your setup code here, to run once:" и "// put your main code here, to run repeatedly:"
"Перевести"? Я бы конечно мог написать, тупо скопируйте то что у вас в Setup в их Setup, оставив то что там еже есть, то что в Loop в Loop, но от этого пропало бы все удовольствие от программирования.
 
Последнее редактирование:

Neznayka

New member
У многих библиотека работает нормально, у некоторых работает с особенностями(как у меня, первым запускаю роутер, потом комп, потом есп и все работает(недавно поменял роутер, так теперь, если он загружен близко к 100%, тоже не обновляется, так это проблема железа, а не библиотеки)), некоторые не разобрались как ее "готовить", а в этом может помочь отладочная информация с Serial через COM порт.


А чего его искать?
Тут(в примере WiFiMenager->AutoConnect) же по английски написано "// put your setup code here, to run once:" и "// put your main code here, to run repeatedly:"
Перевести?
Так я в начале писал, что как пример он работает, ка только я совмещаю со своим скетчем, работает либо он либо мой, так как адрес уних в итоге один и тот же, а вообще он вот и с кнопкой сброса памяти даже, если надо
Код:
#include <FS.h>
#include <ESP8266WiFi.h>         
#include <ArduinoJson.h>        
//needed for library
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <WiFiManager.h>      //   https://github.com/kentaylor/WiFiManager   ////   https://github.com/tzapu/WiFiManager

// Constants

#define Config_Network 5           /// BUTTON Config Wifi  !!!!!!!!!   СБРОС НАСТРОЕК
#define Led_No_Config_Network 13     /// LED No Config Wifi  ///  RED 
#define Led_Connect_Network 12       /// LED Connection client   ///   GREEN

// Variables

// Indicates whether ESP has WiFi credentials saved from previous session
bool initialConfig = false;

// Setup function
void setup() {
  // Put your setup code here, to run once
  Serial.begin(115200);
  Serial.println("\n Starting");

  pinMode(Config_Network, INPUT_PULLUP);
  pinMode(Led_No_Config_Network, OUTPUT);
  pinMode(Led_Connect_Network, OUTPUT);
   
  WiFi.printDiag(Serial); //Remove this line if you do not want to see WiFi password printed

  if (WiFi.SSID() == "") {
    Serial.println("We haven't got any access point credentials, so get them now");
    initialConfig = true;
  } else {
       
    WiFi.mode(WIFI_STA);
    unsigned long startedAt = millis();
    Serial.print("After waiting ");
    int connRes = WiFi.waitForConnectResult();
    float waited = (millis()- startedAt);
    Serial.print(waited/1000);
    Serial.print(" secs in setup() connection result is ");
    Serial.println(connRes);
  }

    if (WiFi.status()!=WL_CONNECTED){
    Serial.println("Failed to connect, finishing setup anyway");
  } else{
    Serial.print("Local ip: ");
    Serial.println(WiFi.localIP());
  }
}

// Loop function

void loop() {

 
  // is configuration portal requested? /// button
  if ( (digitalRead(Config_Network) == HIGH) || (initialConfig)) { 
     
    digitalWrite(Led_No_Config_Network, HIGH); // Turn LED off as we are not in configuration mode.       
    Serial.println("Configuration portal requested");   


       
    WiFiManager wifiManager;          
    wifiManager.setConfigPortalTimeout(180);  ///// reset esp8266 180 seg
   

    WiFiManagerParameter custom_text("<p>Test for PDAControl Excellent </p>");
    wifiManager.addParameter(&custom_text);

     ////Nota: Requiere mas .. funciones para capturar parametros!!!!! .............. Note: Requires more .. functions to capture parameters!!!!
     char mqtt_server[40]="PDAControl apikey example";
     WiFiManagerParameter custom_mqtt_server("server", "my parameters", mqtt_server, 40);
     wifiManager.addParameter(&custom_mqtt_server);

    
     ///  wifiManager.setCustomHeadElement("<style>html{filter: invert(100%); -webkit-filter: invert(100%);}</style>");
 
  
    wifiManager.startConfigPortal("ESP8266 manager id", "12344321");   

    ESP.reset(); // This is a bit crude. For some unknown reason webserver can only be started once per boot up
    // so resetting the device allows to go back into config mode again when it reboots.
    delay(2500);
  }
  digitalWrite(Led_No_Config_Network, LOW);

  // Configuration portal not requested, so run normal loop
  // Put your main code here, to run repeatedly...

}
 

CodeNameHawk

Moderator
Команда форума
Логика работы WiFiMenager такая, если подключился к роутеру - ничего не делать, если не подключился, то он запускает точку доступа (AP) с адресом 192.168.4.1. (Тут и коню понятно, что вы не должны запускать свою AP с адресом 192.168.4.1)
Подключившись к ней вы можете задать имя и пароль для подключения к роутеру.
 
Последнее редактирование:

Neznayka

New member
Вы не поверите, так и должно быть :)
Это по какой такой логике?? Я стартую с менеджера, для чего? чтоб попасть на свою основную страницу как по AP так и STA, естественно он должен при втором входе себя никак не проявлять, ну пока я не сделаю принудительный хард ресет кнопкой 5 еепром восстановится, и я опять попаду по менеджер, в противном случае вход будет по умолчанию на мою страницу, вот только я теперь не пойму про режим АР, который мне тоже нужен, как с ним
 

CodeNameHawk

Moderator
Команда форума
WiFiMenager предназначен, только для конфигурации доступа по STA.
Если нужно что то другое, пишите сами.
 

CodeNameHawk

Moderator
Команда форума
Я не искал, такое вам любой за 100$ напишет, а другим оно нафиг не нужно.
(если по STA есть доступ нафига еще одновременно и по АТ ?)
 

Neznayka

New member
любой за 100$ напишет
))) За такие деньги пишут чтоб в космос корабли запускать и не под 8266 а под ARM. Это раз . Второе... Когда светильник в углу комнаты включить выключить и работает комп, мне что за планшетом или мобильником, в другую комнату бежать ))) И третий вариант, понятно и кнопка локальная на нём + ко всему, но это встать надо будет, а то роутер кирдык, только из розетки
 

CodeNameHawk

Moderator
Команда форума
За такие деньги пишут чтоб в космос корабли запускать
Тогда понятно, почему каждый второй вообще до космоса не долетает.
и работает комп
У вас работает комп, а вы куда то бежать собрались, ЗАЧЕМ? Вам что, ограничили возможность с него управлять еспешкой?
 

Neznayka

New member
Тогда понятно, почему каждый второй вообще до космоса не долетает.

У вас работает комп, а вы куда то бежать собрались, ЗАЧЕМ? Вам что, ограничили возможность с него управлять еспешкой?
С него нет, но вот беда, его я выключил, а светильник забыл с него потушить. вот теперь на диване лежит смарт можно с него войти и выключить, а возможно посмотрев кино, захочется почитать, и его можно вернуть на родину. Вы видно к комфорту не стремитесь, всё руками, руками
 

Neznayka

New member
Дальше менеджера, до двух моих кнопок, не стартует
Код:
#include <FS.h>
#include <ESP8266WiFi.h> 
#include <WiFiClient.h>       
#include <ArduinoJson.h>        
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <DNSServer.h>
#include <WiFiManager.h>      //   https://github.com/kentaylor/WiFiManager   ////   https://github.com/tzapu/WiFiManager

#define Config_Network 5           /// BUTTON Config Wifi  !!!!!!!!!   СБРОС НАСТРОЕК
#define Led_No_Config_Network 13     /// LED No Config Wifi  ///  RED 
#define Led_Connect_Network 12       /// LED Connection client   ///   GREEN
int test_pin = 4;

String webPage = "";
// Indicates whether ESP has WiFi credentials saved from previous session
bool initialConfig = false;

MDNSResponder mdns;
ESP8266WebServer server(80);

// Setup function
void setup() {

  pinMode(test_pin, OUTPUT);
  digitalWrite(test_pin, LOW);
  pinMode(Config_Network, INPUT_PULLUP);
  pinMode(Led_No_Config_Network, OUTPUT);
  pinMode(Led_Connect_Network, OUTPUT);
 
  // Put your setup code here, to run once
  Serial.begin(115200);
  Serial.println("\n Starting"); 
  WiFi.printDiag(Serial); //Remove this line if you do not want to see WiFi password printed

  if (WiFi.SSID() == "") {
    Serial.println("We haven't got any access point credentials, so get them now");
    initialConfig = true;
  } else {       
    WiFi.mode(WIFI_STA);
    unsigned long startedAt = millis();
    Serial.print("After waiting ");
    int connRes = WiFi.waitForConnectResult();
    float waited = (millis()- startedAt);
    Serial.print(waited/1000);
    Serial.print(" secs in setup() connection result is ");
    Serial.println(connRes);
  }
    if (WiFi.status()!=WL_CONNECTED){
    Serial.println("Failed to connect, finishing setup anyway");
  } else{
    Serial.print("Local ip: ");
    Serial.println(WiFi.localIP());
  }
  webPage += "<!DOCTYPE HTML> <html> <head> <title>G1Tech: ESP8266 Web Server</title>";
  webPage += "<style type=\"text/css\">";
  webPage += ".label {display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: 700; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em;}";
  webPage += ".label-default {background-color: #777;}";
  webPage += ".btn {background-color: #4CAF50; border: none; color: white; padding: 16px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; -webkit-transition-duration: 0.4s; transition-duration: 0.4s; cursor: pointer;}";
  webPage += ".btn-on {background-color: white; color: black; border: 2px solid #4CAF50;}";
  webPage += ".btn-on:hover {background-color: #4CAF50; color: white;}";
  webPage += ".btn-off {background-color: white; color: black; border: 2px solid #f44336;}";
  webPage += ".btn-off:hover {background-color: #f44336; color: white;}"; 
  webPage += "</style> </head> <body>";
  webPage += "<h1>G1Tech: ESP8266 Web Server</h1><h1><p class=\"label label-default\">LED #16 </p><p><a href=\"LEDOn\"><button class=\"btn btn-on\">ON</button></a>&nbsp;<a href=\"LEDOff\"><button class=\"btn btn-off\" >OFF</button></a></p></h1></body></html>";
  if (mdns.begin("esp8266", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  } 
  server.on("/", [](){
    server.send(200, "text/html", webPage);
  });
  server.on("/LEDOn", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(test_pin, LOW);
    Serial.println(digitalRead(test_pin));
    delay(1000);
  });
  server.on("/LEDOff", [](){
    server.send(200, "text/html", webPage);
    digitalWrite(test_pin, HIGH);
    Serial.println(digitalRead(test_pin));
    delay(1000);
  }); 
  server.begin();
  Serial.println("HTTP server started");
}

void loop() {
server.handleClient();
  // is configuration portal requested? /// button
  if ( (digitalRead(Config_Network) == HIGH) || (initialConfig)) {       
    digitalWrite(Led_No_Config_Network, HIGH); // Turn LED off as we are not in configuration mode.       
    Serial.println("Configuration portal requested");   
    WiFiManager wifiManager;          
    wifiManager.setConfigPortalTimeout(180);  ///// reset esp8266 180 seg
    WiFiManagerParameter custom_text("<p>Test for PDAControl Excellent </p>");
    wifiManager.addParameter(&custom_text);
////Note: Requires more .. functions to capture parameters!!!!
    char mqtt_server[40]="PDAControl apikey example";
    WiFiManagerParameter custom_mqtt_server("server", "my parameters", mqtt_server, 40);
    wifiManager.addParameter(&custom_mqtt_server); 
    wifiManager.startConfigPortal("ESP8266 manager id", "12344321");   
    ESP.reset(); // This is a bit crude. For some unknown reason webserver can only be started once per boot up
    // so resetting the device allows to go back into config mode again when it reboots.
    delay(2500);
  }
  digitalWrite(Led_No_Config_Network, LOW);

}
 

CodeNameHawk

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

А насчет программы займитесь отладкой.
 

Neznayka

New member
Выключить со смарта помешает только выключенный роутер.
Это Вы почему так решили? Я им на улице включаю, там моего роутера нет, как к точке. Да вам тоже корабли не запускать...
Код:
String _ssid     = "***********"; // Для хранения SSID
String _password = "************"; // Для хранения пароля сети
String _ssidAP = "id_AP_Home_test";   // SSID AP точки доступа
String _passwordAP = "***************"; // пароль точки доступа

// Wait for connection
  delay(1000);
  Serial.begin(115200);
  delay(1000);
  Serial.println("\r\n\r\nSetup\r\n");
  WiFi.mode(WIFI_AP_STA);
  Serial.println(_ssid);
  Serial.println("/STA/ ip address: ");
  Serial.println(WiFi.localIP());
  Serial.println();
  WiFi.begin(_ssid.c_str(), _password.c_str());
  WiFi.softAP(_ssidAP.c_str(), _passwordAP.c_str());
  Serial.println("-----------------");
  IPAddress myIP = WiFi.softAPIP();
  Serial.println(_ssidAP);                       
  Serial.println("/AP/ ip address: ");
  Serial.println(myIP);
  int i = 0;
  while (WiFi.status() != WL_CONNECTED && i < 50) {
    delay(500);
    i++;
    Serial.println(".");
  }
 

CodeNameHawk

Moderator
Команда форума
С вами весело общаться.
С него нет, но вот беда, его я выключил, а светильник забыл с него потушить. вот теперь на диване лежит смарт можно с него войти и выключить, а возможно посмотрев кино, захочется почитать, и его можно вернуть на родину.
Правильно ли я понял из вашего текста, что если вы выключили комп, а на есп не запущен АТ, то вы никак не сможете со сматфона управлять светильником?

Выключить со смарта помешает только выключенный роутер.
Понимать так :
Если работает роутер, есп(с правильной программой в режиме STA) и сматрфон подключены к роутеру, то этого достаточно для управления светильником, достаточно а не единственно возможный метод.
И еще, если роутер не работает или есп к роутеру не подключилась, а в есп не запущен режим АТ, то не сможете управлять светильником с смартфона, да и с любого другого устройства тоже.

Вот если роутер выключается, то без АТ не обойтись.

(Я у себя выключаю роутер, если не долгое время не пользуюсь интернетом, по причине пожаробезопасности.
Есть возможность подключиться с соседскому роутеру, мне не тяжело поднять задницу и вручную выключить свет. )
 
Последнее редактирование:

Neznayka

New member
С вами весело общаться.
Понимать так :
Если работает роутер, есп(с правильной программой в режиме STA) и сматрфон подключены к роутеру, то этого достаточно для управления смартфона, да и с любого другого устройства тоже.
Вот если роутер выключается, то без АТ не обойтись.

Я у себя выключаю роутер, если не долгое время не пользуюсь интернетом, по причине пожаробезопасности.
1 На моем (рабочем и проверенным временем, время наработки, а он включен 365 ни разу не зависло ) скетче, будем считать что неправильном, работает как гибрид код, отрывок похожий что сверху на dth22+4 канала+бузер+3 локальные кнопки + вход утентификации, я доволен как слон, но это у меня дома, а на подарок хотел сделать, ещё только и всего что б на STA можно было пасс поменять, без бубнов, домохозяйке, для которой собственно и весь цирк.
2 Пожаробезопасность меня мало интересует за столом не стене на дин рейке висит БП - Мин Вэлл , он железный, надёжен как танк 12В-4А.. 5В-17А ..24В-4А три в одном, я выкинул все китайские адаптеры что были, и питаюсь от него, там же USB- хаб, и куча разный гнёзд для зарядки гаджетов
 

Сергей_Ф

Moderator
Команда форума
@Neznayka посмотрите примеры WebUpdate. Там ни Питон не нужен, ни Бонжур. Это не OTA, а обновление путем загрузки прошивки через веб.
 

Neznayka

New member
@Neznayka посмотрите примеры WebUpdate. Там ни Питон не нужен, ни Бонжур. Это не OTA, а обновление путем загрузки прошивки через веб.
С этого всё и началось, когда я совмещаю этот код и мой, он блокирует открытие моего сервера. Вероятно надо сделать его старт на 10 сек, после чего, если его кнопки не нажаты, он переходит на мою программу, либо вывести его кнопки в мой интерфейс, что для меня ещё сложнее пока , ещё один минус, опять же внутри должны быть зашиты лог и пасс, но это 2е

Код:
/*
  To upload through terminal you can use: curl -F "image=@firmware.bin" esp8266-webupdate.local/update
*/

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

const char* host = "esp8266-webupdate";
const char* ssid = "88888888888";
const char* password = "88888888888";

ESP8266WebServer server(80);
const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><input type='submit' value='Update'></form>";

void setup(void){
  Serial.begin(115200);
  Serial.println();
  Serial.println("Booting Sketch...");
  WiFi.mode(WIFI_AP_STA);
  WiFi.begin(ssid, password);
  if(WiFi.waitForConnectResult() == WL_CONNECTED){
    MDNS.begin(host);
    server.on("/", HTTP_GET, [](){
      server.sendHeader("Connection", "close");
      server.send(200, "text/html", serverIndex);
    });
    server.on("/update", HTTP_POST, [](){
      server.sendHeader("Connection", "close");
      server.send(200, "text/plain", (Update.hasError())?"FAIL":"OK");
      ESP.restart();
    },[](){
      HTTPUpload& upload = server.upload();
      if(upload.status == UPLOAD_FILE_START){
        Serial.setDebugOutput(true);
        WiFiUDP::stopAll();
        Serial.printf("Update: %s\n", upload.filename.c_str());
        uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
        if(!Update.begin(maxSketchSpace)){//start with max available size
          Update.printError(Serial);
        }
      } else if(upload.status == UPLOAD_FILE_WRITE){
        if(Update.write(upload.buf, upload.currentSize) != upload.currentSize){
          Update.printError(Serial);
        }
      } else if(upload.status == UPLOAD_FILE_END){
        if(Update.end(true)){ //true to set the size to the current progress
          Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize);
        } else {
          Update.printError(Serial);
        }
        Serial.setDebugOutput(false);
      }
      yield();
    });
    server.begin();
    MDNS.addService("http", "tcp", 80);

    Serial.printf("Ready! Open http://%s.local in your browser\n", host);
  } else {
    Serial.println("WiFi Failed");
  }
}

void loop(void){
  server.handleClient();
  delay(1);
}
 
Сверху Снизу