• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Прошивка по WiFi и вопрос по объекту WiFiServer

Darkbird

New member
Добрый день.

Вопрос от начинающего ардуинщика. )

По всяким мануалам научился шить ESP8266 через Wi-Fi. (Питон + библиотека Arduino_OTA). Вроде как все хорошо. Но встал вопрос следующего порядка. Я отдаю устройство заказчику и он уезжает за тридевять земель. А в скетче обнаружилась ошибка или доработка? Существуют ли более или менее стандартные механизмы удаленного обновления прошивки?

Ну и второй вопрос попутно (может кто подскажет) Имеем следующий кусок кода:

#include blablabla

WiFiServer myserver(2000);

void setup() {

ReadSettingsFromEEPROM();

myserver.begin();

}

Функция ReadSettingsFromEEPROM() читает в структуру набор настроек. В эти настройки так же входит и номер порта для общения. Но объявление и инициализация сервера уже произошли ранее в секции определения всех переменных. Каким образом мне следует написать код, чтобы можно было запускать сервер после чтения настроек, ну и соответственно он должен быть доступен во всех функциях.
 

Mоnk

Member
Посмотрите пример ESP8266WebServer - WebUpdate.
Я немного изменил стандартный.
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
//#include <ESP8266mDNS.h>
#include <WiFiUdp.h>

const char* host = "esp8266-webupdate";
const char* ssid = "хихи";
const char* password = "хаха";
const char* ssidAP = "нафнаф";
const char* passwordAP = "винипых";

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>";
IPAddress ip(192,168,1,41);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

void setup(void){
  Serial.begin(115200);
  Serial.println();
  Serial.println("Booting Sketch...");
  WiFi.mode(WIFI_AP_STA);
    WiFi.config(ip, gateway, subnet);
    WiFi.begin(ssid, password);
    WiFi.softAP(ssidAP, passwordAP);

  if(WiFi.waitForConnectResult() == WL_CONNECTED){
    //MDNS.begin(host);
    server.on("/refit", HTTP_GET, [](){
      server.sendHeader("Connection", "close");
      server.sendHeader("Access-Control-Allow-Origin", "*");
      server.send(200, "text/html", serverIndex);
    });
    server.on("/update", HTTP_POST, [](){
      server.sendHeader("Connection", "close");
      server.sendHeader("Access-Control-Allow-Origin", "*");
      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 OPERe\n", host);
  } else {
    Serial.println("WiFi Failed");
  }
}
void loop(void){
  server.handleClient();
  delay(1);
}
Появилась возможность подцепившись телефоном к модулю по ВиФи заливать binарник через браузер.
Несколько проблем...
Иногда прошивка не начинается и модуль виснет. Просто нажимаю "ресет".
Заливаю бинарник размером 373901 байт в Witty Cloud 4м/1м, и модуль не стартует. По кабелю все ОК.
На ESP8266-01 1м/64к 271 кБ вполне нормально льётся.
Я задал Вопрос - Параметры ARDUINO IDE для Generic ESP8266 module, пока ответа нет.
 
Сверху Снизу