Ссылку OTA Updates — ESP8266 Arduino Core 2.4.0 documentation я дал, переведите в google будет понятней.
Результат тот жеСсылку OTA Updates — ESP8266 Arduino Core 2.4.0 documentation я дал, переведите в google будет понятней.
У многих библиотека работает нормально, у некоторых работает с особенностями(как у меня, первым запускаю роутер, потом комп, потом есп и все работает(недавно поменял роутер, так теперь, если он загружен близко к 100%, тоже не обновляется, так это проблема железа, а не библиотеки)), некоторые не разобрались как ее "готовить", а в этом может помочь отладочная информация с Serial через COM порт.PS если библиотека сделана с умом, то работает с пол оборота, и это не дело кривых рук....
А чего его искать?Буду искать решение через менеджер из AP/
Так я в начале писал, что как пример он работает, ка только я совмещаю со своим скетчем, работает либо он либо мой, так как адрес уних в итоге один и тот же, а вообще он вот и с кнопкой сброса памяти даже, если надоУ многих библиотека работает нормально, у некоторых работает с особенностями(как у меня, первым запускаю роутер, потом комп, потом есп и все работает(недавно поменял роутер, так теперь, если он загружен близко к 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...
}
Вы не поверите, так и должно бытьработает либо он либо мой, так как адрес уних в итоге один и тот
Это по какой такой логике?? Я стартую с менеджера, для чего? чтоб попасть на свою основную страницу как по AP так и STA, естественно он должен при втором входе себя никак не проявлять, ну пока я не сделаю принудительный хард ресет кнопкой 5 еепром восстановится, и я опять попаду по менеджер, в противном случае вход будет по умолчанию на мою страницу, вот только я теперь не пойму про режим АР, который мне тоже нужен, как с нимВы не поверите, так и должно быть
А что за 5 лет 8266 ни одного рабочего примера, или моё желание зайти по АР и настроиться на STA это эксклюзивный эксклюзив у меня?? )) 0Если нужно что то другое, пишите сами
))) За такие деньги пишут чтоб в космос корабли запускать и не под 8266 а под ARM. Это раз . Второе... Когда светильник в углу комнаты включить выключить и работает комп, мне что за планшетом или мобильником, в другую комнату бежать ))) И третий вариант, понятно и кнопка локальная на нём + ко всему, но это встать надо будет, а то роутер кирдык, только из розеткилюбой за 100$ напишет
Тогда понятно, почему каждый второй вообще до космоса не долетает.За такие деньги пишут чтоб в космос корабли запускать
У вас работает комп, а вы куда то бежать собрались, ЗАЧЕМ? Вам что, ограничили возможность с него управлять еспешкой?и работает комп
С него нет, но вот беда, его я выключил, а светильник забыл с него потушить. вот теперь на диване лежит смарт можно с него войти и выключить, а возможно посмотрев кино, захочется почитать, и его можно вернуть на родину. Вы видно к комфорту не стремитесь, всё руками, рукамиТогда понятно, почему каждый второй вообще до космоса не долетает.
У вас работает комп, а вы куда то бежать собрались, ЗАЧЕМ? Вам что, ограничили возможность с него управлять еспешкой?
#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> <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);
}
Выключить со смарта помешает только выключенный роутер.светильник забыл с него потушить. вот теперь на диване лежит смарт можно с него войти и выключить, а возможно посмотрев кино, захочется почитать, и его можно вернуть на родину
Это Вы почему так решили? Я им на улице включаю, там моего роутера нет, как к точке. Да вам тоже корабли не запускать...Выключить со смарта помешает только выключенный роутер.
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(".");
}
Правильно ли я понял из вашего текста, что если вы выключили комп, а на есп не запущен АТ, то вы никак не сможете со сматфона управлять светильником?С него нет, но вот беда, его я выключил, а светильник забыл с него потушить. вот теперь на диване лежит смарт можно с него войти и выключить, а возможно посмотрев кино, захочется почитать, и его можно вернуть на родину.
Понимать так :Выключить со смарта помешает только выключенный роутер.
1 На моем (рабочем и проверенным временем, время наработки, а он включен 365 ни разу не зависло ) скетче, будем считать что неправильном, работает как гибрид код, отрывок похожий что сверху на dth22+4 канала+бузер+3 локальные кнопки + вход утентификации, я доволен как слон, но это у меня дома, а на подарок хотел сделать, ещё только и всего что б на STA можно было пасс поменять, без бубнов, домохозяйке, для которой собственно и весь цирк.С вами весело общаться.
Понимать так :
Если работает роутер, есп(с правильной программой в режиме STA) и сматрфон подключены к роутеру, то этого достаточно для управления смартфона, да и с любого другого устройства тоже.
Вот если роутер выключается, то без АТ не обойтись.
Я у себя выключаю роутер, если не долгое время не пользуюсь интернетом, по причине пожаробезопасности.
С этого всё и началось, когда я совмещаю этот код и мой, он блокирует открытие моего сервера. Вероятно надо сделать его старт на 10 сек, после чего, если его кнопки не нажаты, он переходит на мою программу, либо вывести его кнопки в мой интерфейс, что для меня ещё сложнее пока , ещё один минус, опять же внутри должны быть зашиты лог и пасс, но это 2е@Neznayka посмотрите примеры WebUpdate. Там ни Питон не нужен, ни Бонжур. Это не OTA, а обновление путем загрузки прошивки через веб.
/*
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);
}