Nodemcu Ota ile dosya attığımda çalışmaz oluyor?

Burakco

Üye
Katılım
3 Eki 2024
Mesajlar
8
Puanları
1
Yaş
39
Merhaba;

Nodemcu güncellemelerimi usb üstünden yaparsam hiç sorun yaşamıyorum. ama ota ile update yaptığımda programda Uploading..... şeklinde yazıyor. baya bir nokta nokta devam ediyor. Sonra upload işlemi bitmiş gibi öylece bekliyor. Cihaz ise açılmıyor mavi led sürekli yanık olarak kalıyor. Usb üzerinden tekrar yüklemek zorunda kalıyorum.

kodumun için de delay() vardı tamamını kaldırdım. onun yerine blynk.timer() kullandım.

sorun nerede olabilir?

Kod:
#define BLYNK_TEMPLATE_ID "XXX"
#define BLYNK_TEMPLATE_NAME "XXXXXXXXXXXXXXXXXXXXXXXX"
#define BLYNK_FIRMWARE_VERSION "3.0"
#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <WiFiManager.h>
#include <ArduinoOTA.h>

WidgetTerminal terminal(V7);

bool baglan; //wifimanager oto bağlantı durumu takibi için
char blynk_token[] = "XXXXXXXXXXXXXXXXXXXXXX";

int pin1 = 5; // V1 LED
int pin2 = 4; // V2 FAN
              // V3 ISI ÖLÇER
int pin4 = 14; // V4 POMPA
float sicaklik = 25; // V5 default fan çalışma sıcaklığı
int pin5 = 13; // Yedek V6 - D7-13 pin -Relay 4
              // V7 TERMİNAL

#define DS18B20 12    // V3 ISI
OneWire ourWire(DS18B20);
DallasTemperature sensor(&ourWire);
BlynkTimer timer;
WiFiManager wm;

BLYNK_WRITE(V1)
{
    int value = param.asInt();
    if(value == 1)
      digitalWrite(pin1, HIGH);
    else
      digitalWrite(pin1, LOW);
}

BLYNK_WRITE(V2)
{
    int value = param.asInt();
    if(value == 1)
      digitalWrite(pin2, HIGH);
    else
      digitalWrite(pin2, LOW);
}

BLYNK_WRITE(V4)
{
    int value = param.asInt();
    if(value == 1)
      digitalWrite(pin4, HIGH);
    else
      digitalWrite(pin4, LOW);
}

BLYNK_WRITE(V5)
{
    sicaklik = param.asInt();
    Blynk.virtualWrite(V5, sicaklik);   
}

BLYNK_WRITE(V7)
{
  if (String("wifireset") == param.asStr()) {
    terminal.clear();
    terminal.println("Komut: 'wifireset' Kayıtlı wifi bilgisi silindi.");
    terminal.println("IP: 192.168.4.1");
    terminal.println("AquaControlV2");
    terminal.println("12345678");
    wm.resetSettings();
    ESP.restart();
  }
  else if (String("espreset") == param.asStr()) {
    terminal.clear();
    terminal.println("Komut: 'espreset' Nodemcu yeniden başlayacak.") ;
    ESP.restart();
  } else {
    terminal.clear();
    terminal.print("Komut: ");
    terminal.write(param.getBuffer(), param.getLength());
    terminal.println(" - Geçersiz komut girdiniz.");
    terminal.println(F("wifireset - Wifi ağ bilgilerini siler."));
    terminal.println(F("espreset - cihazı baştan başlatır."));
  }
  terminal.flush();
}

BLYNK_CONNECTED()
{
  Blynk.syncVirtual(V1);
  Blynk.syncVirtual(V2);
  Blynk.syncVirtual(V4);
  Blynk.syncVirtual(V5);
}

void sendSensor()
{
  sensor.requestTemperatures();
  float tempC=sensor.getTempCByIndex(0); 
  Blynk.virtualWrite(V3, tempC);
  if (tempC>=sicaklik){
    digitalWrite(pin2, LOW);
    Blynk.virtualWrite(V2, LOW);}
  else { digitalWrite(pin2, HIGH);
    Blynk.virtualWrite(V2, HIGH);}
    digitalWrite(BUILTIN_LED, LOW);
    timer.setTimeout(1000L , []()
    { 
      digitalWrite(BUILTIN_LED, HIGH);
    });
    Serial.print("Sıcaklık : "); Serial.println(tempC);
}
 
void setup() {
  Serial.begin(115200);
  pinMode(BUILTIN_LED, OUTPUT);
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin4, OUTPUT);
 
  WiFi.mode(WIFI_STA); // Özellikle modu station'a ayarlıyoruz.
  baglan = wm.autoConnect("AquaControlV2", "12345678"); // Wifimanager bağlanma satırı. Ağ adı olarak görünmesini istediğimiz
  if (!baglan) {
    Serial.println("Bağlantı Sağlanamadı");
    timer.setTimeout(60000L , []()
    { 
      ESP.restart();
    });
  }
  else {
    Serial.println("Ağ Bağlantısı Kuruldu");
    Blynk.config(blynk_token);
    bool result = Blynk.connect();
    if (result != true)
    {
      Serial.println("BLYNK'e bağlanamadı");
      digitalWrite(BUILTIN_LED, LOW);
      timer.setTimeout(60000L , []()
      { 
        ESP.restart();
      });
    }
    else
    {
      Serial.println("BLYNK'e bağlandı");
    }
  }
  terminal.clear();
  terminal.print(WiFi.localIP());
  terminal.println(F(" - Sistem Aktif"));
  terminal.println(F("-------------"));
  terminal.println(F("wifireset - Wifi ağ bilgilerini siler."));
  terminal.println(F("espreset - cihazı baştan başlatır."));
  terminal.flush();

  ArduinoOTA.setPassword("12345678");
  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH) {
      type = "sketch";
    } else {  // U_FS
      type = "filesystem";
    }
    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();

  sensor.begin();
  timer.setInterval(5000L, sendSensor);
}

void loop() {
  Blynk.run();
  timer.run();
  ArduinoOTA.handle();
}
 
Sorununuz OTA ile ilgili olabilir ve kodunuzun işleyişi sırasında birkaç önemli faktör göz önünde bulundurulmalıdır:

OTA Tamamlanma ve Flash Durumu:
Kodunuzun boyutu ESP8266'nın flash hafızasını aşmış olabilir. OTA güncellemeleri için yeterli flash alanınız kaldığından emin olun. Daha fazla alan açmak için kodu optimize etmeyi deneyebilirsiniz.
Bu biraz uzun sürebilir, aşağıdakileri deneyin olmazsa optimizasypnu tartışırız.

OTA Hataları:
Kodun içindeki ArduinoOTA.onError() kısmı, olası hatalarla ilgili mesajları zaten yazdırıyor. Ancak, yükleme işlemi sırasında mavi LED'in sürekli yanık kalması, cihazın OTA işlemini tamamlayamadığını gösteriyor olabilir. Özellikle "OTA_BEGIN_ERROR" veya "OTA_END_ERROR" gibi hataları gözlemleyin.

OTA Kullanımı ve Sıcaklık Gönderimi:
ArduinoOTA.handle() fonksiyonunun loop() içinde sık sık çalıştığından emin olun. Bu fonksiyon OTA güncellemesinin düzgün bir şekilde çalışması için önemlidir. Sensör verisi gönderimi sırasında sistem OTA'yı işleyemiyor olabilir.

Bellek Yetersizliği:
Kodunuzda birçok fonksiyon ve terminal çıktısı olduğu için hafıza yetersizliği yaşanıyor olabilir. Bellek kullanımını azaltmak için "Serial" yazılarını azaltmak ve gereksiz terminal işlemlerini minimize etmek çözüm sağlayabilir.
 
200 satır civarında bir kodum var.

Pek fazla serial yazdırmadı kullanmıyorum. Gerekirse kaldırıp deneyebilirim.

Ama en önemli ota hatalarını incelemek anladığım kadarıyla. Böyle bir sistemi olduğunu bilmiyordum. Ota hataları serialde mi yazdırılıyor acaba hiç öyle bir hata görmedim çünkü.

Ama bunu araştırıcam en hızlı çözüm bu görünüyor, teşekkürler bilgiler için.
 
Çok ilginç Bi şekilde basicota örneği üzerinden tekrardan düzenleme yapınca sorun çözüldü. Sıkıntısız şekilde güncelleme atabiliyorum.

Ama halen çözemediğim 1 2 husus var:

** serialmonitör de wifi üzerinden bağlandığımda yazdırılanları göremiyorum? Port yok hatası veriyor. Usb ile boarda bağlanırsan sıkıntı yok. Bunu nette araştırdım ama çözüm bulamadım.

** ota ile dosya attığımda wifimanager bilgisi her seferinde sıfırlanıyor. WiFi bilgilerini tekrar girmem gerekiyor. Bu sorunla yeni karşılaştım, daha tam araştırma yapamadım. Beni yönlendirebilirsiniz sevinirim.
 

Forum istatistikleri

Konular
129,775
Mesajlar
929,983
Kullanıcılar
452,539
Son üye
cmllsb

Yeni konular

Geri
Üst