• Система автоматизации с открытым исходным кодом на базе 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, пока ответа нет.
 
Сверху Снизу