Wifi przerywa zapis...
 
Powiadomienia
Wyczyść wszystko

Problem Wifi przerywa zapis do flash na ESP8266

1 Wpisów
1 Użytkownicy
0 Likes
72 Wyświetleń
wisipior
(@wisipior)
Nowy
Autor tematu
 

Czołem mam problem nieznajomości natury ESP8266. Używam bibliotek 3.0.2 ESP8266 w Arduino IDE

Ogólnie komponuję sterowanie zaworem CO przez centralę zbierającą dane z czujnika. Jest zatem para czujnik ESP8266 klient WiFI i centrala ESP8266 access point.

W jakimś momencie muszę pobrać plik z centrali do pamięci flash czujnika.
Problem w tym, że sekwencyjny zapis do flash przechodzi bez czkawki tylko jeśli WiFi nie nawiązało połączenia.

Odizolowałem kod na tyle, że zwykły zapis sekwencyjny bufora pełnego zer ukończy się poprawnie tylko jeśli zakomentuję WiFi.begin (czego nie zakładam robić).
Popieram konieczność stosowania Serial.Flush() oraz yield() bez których jest jeszcze gorzej.

Jak jednak jest to możliwe że samo połączenie WiFi powoduje exception w pętli zapisu do flash ??
Dlaczego aktywne połączenie Wifi zakłóca zapis do flash ??
Odnotowałem że nie dzieje się tak podczas odczytu zaś exception pojawia się dokładnie po zapisaniu 7go, 15go, lub 32go bloku 1024 bajtów.

 

#include <ESP8266WiFi.h>
#include <LittleFS.h>

void setup() {
  Serial.begin(115200);
  LittleFS.format();
  Serial.println("Formatted");
  LittleFS.begin();
  delay(1000);
  
/*  - jeśli zakomentowane to dalszy kod przejdzie ok
  WiFi.persistent(false);
  WiFi.mode(WIFI_STA);
  WiFi.begin("ssid", "passwd");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(100);
  }
  Serial.println("Connected.");

*/  

char fnam[] = " usunięty link ";
uint8_t buf[1024] = {0};

  Serial.flush();           
  File f = LittleFS.open(fnam, "w");
  if (!f)
    Serial.println("error file not opened");
  else {
    int len = 0;
    Serial.println("opened");
    delay(10000);
    
    while (len < 200) {
      yield();
      delay(50);
      Serial.flush();       
      delay(50);
      f.write(buf, 1024);
      delay(50);

      len++;
      Serial.print("#");
      if (len % 32 == 0)
        Serial.printf(" %d kB\n", len);
    }
    f.flush();              
    Serial.printf(" %d kB Done.\n", len);
  }
  f.close();

  LittleFS.end();             
  WiFi.disconnect();
  Serial.flush();
  Serial.end();
  yield();
  delay(7000);
  ESP.restart();
}

void loop() {
}
 
Dodane : 06/07/2022 11:44 am
Udostępnij: