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

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

Neznayka

New member
Всем привет и хорошего вечера. Прежде чем спрашивать помощи у Вас, посмотрел много информации в сети, но ключевого момента не увидел.
Установил библиотеку WiFiManager.h ....разобрался, подключается, меняется, ну а как перейти на мою программу WEB Socket? где Я сделал 4 канала управлением реле. Должна же быть в меню этого мэнеджера какая то кнопка для перехода на мою страницу или как?? Спасибо заранее тем кто поможет. :)
 

CodeNameHawk

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

Neznayka

New member
Ваша программа должна стартовать, как основная и WiFiManager запускать, только когда в этом есть необходимость.
Вы можете дать ссылку на пример кода с этим менеджером на готовый проект термометра или реле, чтоб я посмотрел как они совмещены, у меня работают только по отдельности, вместе не хотят. И у них обоих при старте один адрес 192.168.4.1
 

Neznayka

New member
Код:
#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
Команда форума
Я не использую WiFiManager, проще перепрошить при необходимости.
 

Neznayka

New member
Я и не уговариваю.

Поменял пароль на старый, прошил через ОТА и вернул новый пароль.
Будет дополнительный повод зайти в гости.
Или я опять что недопонимаю, но вот после прошивки моим бином через него, да, моя программа прошивается, а прошивальшик недоступен, и какой в нём смысл, если он по сути только на один раз. А так он очень удобен через браузер , если бы не .... Прошивальщик ниже
Код:
// INCLUDE EXTRA LIBs
#include <ESP8266HTTPUpdateServer.h>
#include <ESP8266WebServer.h>
// INCLUDE ESP WIFI lIBs
#include <ESP8266WiFi.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiGeneric.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiSTA.h>
#include <ESP8266WiFiType.h>
#include <WiFiClient.h>
#include <WiFiClientSecure.h>
#include <WiFiServer.h>
#include <WiFiUdp.h>
// NETWORK GLOBAL
const char* ssid = "";     // name of WiFi network
const char* password = ""; // password of network
// OTA GLOBAL
const char* ota_username = "admin";  // auth name of OTA web server
const char* ota_password = "admin";  // auth password of OTA web server
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater(true);
// time mark
unsigned long Tmark = 0;
void setup() {
    Serial.begin(115200); // 74880 to match esp8266 boot up baudrate
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    Serial.println();
    Serial.println(F("[WiFi] Starting "));
    Tmark = millis();
    while (WiFi.status() != WL_CONNECTED) {
        delay(100);
        Serial.print(F("."));
        if( (millis()- Tmark) > 10000){
            //softReset if waiting for more than 10 seconds
           Serial.println(F("Connection Failed! Rebooting..."));
           ESP.restart();
        }
    }
    Serial.println();
    Serial.println(F("[WiFi] connected"));
    Serial.print(F("[WIFI] IP address: "));
    Serial.println(WiFi.localIP().toString());
    // Setup HTTP updater
    httpUpdater.setup(&httpServer, ota_username, ota_password);
    // Start HTTP server
    httpServer.begin();
    Serial.print(F("[WIFI] Ready for OTA"));
}
void loop() {
    // OTA web page: your_esp_ip_address/update
    // you can change your update page address and layout
    // by modifying the ESP8266HTTPUpdateServer.cpp & ESP8266HTTPUpdateServer.h
    httpServer.handleClient();
}
 

CodeNameHawk

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

Есть и другие, типа прошить через http или через сервер.
 
Последнее редактирование:

Neznayka

New member
В ардуиноиде куча примеров, советую попробовать все.
Есть и другие, типа прошить через http

ссылку на рабочий проект можно?? Примеры по отдельности мало чем мне помогут, мне надо посмотреть что внутри. Пробовал базовый вариант ОТА, то порт видит через раз, то питон не тот, то на вин 10, не работает, вообщем тот еще гемор
Я просил реальные примеры код, просто не о чём у меня гугл есть, спасибо
 

CodeNameHawk

Moderator
Команда форума
Пробовал базовый вариант ОТА, то порт видит через раз, то питон не тот, то на вин 10, не работает, вообщем тот еще гемор
Если все установили, обычно работает, как преодолеть мелкие трудности есть на этом форуме, ссылку давать не буду, у вас же
Код:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>

const char* ssid = "123";
const char* password = "456";

void setup() {
  Serial.begin(115200);
  Serial.println("Booting");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.println("Connection Failed! Rebooting...");
    delay(5000);
    ESP.restart();
  }

  // Port defaults to 8266
  // ArduinoOTA.setPort(8266);

  // Hostname defaults to esp8266-[ChipID]
  // ArduinoOTA.setHostname("myesp8266");

  // No authentication by default
  // ArduinoOTA.setPassword("admin");

  // Password can be set with it's md5 value as well
  // MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
  // ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");

  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH)
      type = "sketch";
    else // U_SPIFFS
      type = "filesystem";

    // NOTE: if updating SPIFFS this would be the place to unmount SPIFFS using SPIFFS.end()
    Serial.println("Start updating " + type);
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());


    pinMode(LED_BUILTIN, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
}

void loop() {
  ArduinoOTA.handle();

  digitalWrite(LED_BUILTIN, LOW);   // Turn the LED on (Note that LOW is the voltage level
                                    // but actually the LED is on; this is because
                                    // it is active low on the ESP-01)
  delay(1000);                      // Wait for a second
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(2000);                      // Wait for two seconds (to demonstrate the active low LED)

 
}
Вместо моргания диодом вставьте, то что вам нужно и все.
 

Neznayka

New member
Если все установили, обычно работает, как преодолеть мелкие трудности есть на этом форуме, ссылку давать не буду, у вас же

Вместо моргания диодом вставьте, то что вам нужно и все.
На html есть пример, этим вариантом сидеть часами и не понято что не так я уже устал вин ХР специально из за него ставить не буду

Глобальные переменные используют 42916 байт (52%) динамической памяти, оставляя 39004 байт для локальных переменных. Максимум: 81920 байт.
python.exe C:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/espota.py -i 192.168.1.222 -p 8266 --auth= -f Z:\TEMP\arduino_build_81308/access_Point_multi_DHT22.ino.bin
java.io.IOException: Cannot run program "python.exe": CreateProcess error=2, Не удается найти указанный файл
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at processing.app.helpers.ProcessUtils.exec(ProcessUtils.java:26)
at cc.arduino.packages.Uploader.executeUploadCommand(Uploader.java:129)
at cc.arduino.packages.uploaders.GenericNetworkUploader.uploadUsingPreferences(GenericNetworkUploader.java:99)
at cc.arduino.UploaderUtils.upload(UploaderUtils.java:78)
at processing.app.SketchController.upload(SketchController.java:713)
at processing.app.SketchController.exportApplet(SketchController.java:686)
at processing.app.Editor$DefaultExportHandler.run(Editor.java:2168)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: CreateProcess error=2, Не удается найти указанный файл
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 8 more
Произошла ошибка при загрузке скетча
 

Neznayka

New member
OTA Updates — ESP8266 Arduino Core 2.4.0 documentation
Note: Windows users should select “Add python.exe to Path” (see below – this option is not selected by default).
Спасибо переустановил с путём как написано, касательно вашего примера следующее...... ошибка компиляции
'class ArduinoOTAClass' has no member named 'getCommand'
в строке
if (ArduinoOTA.getCommand() == U_FLASH)
попробую залить любой другой ОТА
 

Neznayka

New member
OTA Updates — ESP8266 Arduino Core 2.4.0 documentation
Note: Windows users should select “Add python.exe to Path” (see below – this option is not selected by default).
Попытался через её же порт переписать саму себя BasicOTA и вот опять засада ))
-
Archiving built core (caching) in: Z:\TEMP\arduino_cache_88312\core\core_esp8266_esp8266_generic_CpuFrequency_80,FlashFreq_40,FlashMode_dio,UploadSpeed_115200,FlashSize_512K64,ResetMethod_ck,Debug_Disabled,DebugLevel_None_____6ba63ead392024094f12b614887dc489.a
Linking everything together...
"C:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2/bin/xtensa-lx106-elf-gcc" -g -Wall -Wextra -Os -nostdlib -Wl,--no-check-sections -u call_user_start -Wl,-static "-LC:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/sdk/lib" "-LC:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/sdk/ld" "-Teagle.flash.512k64.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy -o "Z:\TEMP\arduino_build_728562/BasicOTA.ino.elf" -Wl,--start-group "Z:\TEMP\arduino_build_728562\sketch\BasicOTA.ino.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\ESP8266WiFi.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\ESP8266WiFiAP.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\ESP8266WiFiGeneric.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\ESP8266WiFiMulti.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\ESP8266WiFiSTA.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\ESP8266WiFiScan.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\WiFiClient.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\WiFiClientSecure.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\WiFiServer.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266WiFi\WiFiUdp.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ESP8266mDNS\ESP8266mDNS.cpp.o" "Z:\TEMP\arduino_build_728562\libraries\ArduinoOTA\ArduinoOTA.cpp.o" "Z:\TEMP\arduino_build_728562/arduino.ar" -lm -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 -llwip_gcc -lstdc++ -Wl,--end-group "-LZ:\TEMP\arduino_build_728562"
"C:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\tools\esptool\0.4.9/esptool.exe" -eo "C:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/bootloaders/eboot/eboot.elf" -bo "Z:\TEMP\arduino_build_728562/BasicOTA.ino.bin" -bm dio -bf 40 -bz 512K -bs .text -bp 4096 -ec -eo "Z:\TEMP\arduino_build_728562/BasicOTA.ino.elf" -bs .irom0.text -bs .text -bs .data -bs .rodata -bc -ec
Используем библиотеку ESP8266WiFi версии 1.0 из папки: C:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi
Используем библиотеку ESP8266mDNS в папке: C:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266mDNS (legacy)
Используем библиотеку ArduinoOTA версии 1.0 из папки: C:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ArduinoOTA
Скетч использует 243663 байт (56%) памяти устройства. Всего доступно 434160 байт.
Глобальные переменные используют 33132 байт (40%) динамической памяти, оставляя 48788 байт для локальных переменных. Максимум: 81920 байт.
python.exe C:\Users\alex_1\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.3.0/tools/espota.py -i 192.168.1.75 -p 8266 --auth= -f Z:\TEMP\arduino_build_728562/BasicOTA.ino.bin
12:22:41 [ERROR]: No response from device
12:22:41 [ERROR]: No response from device
-
Я надеюсь кнопки ресет и гпо15 нажимать же не надо если по воздуху, иначе если девайс запечатан в коробке под потолком, то какой от этих манипуляций тогда толк, но пусть я ошибаюсь
 
Сверху Снизу