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

Burakco

Üye
Katılım
3 Eki 2024
Mesajlar
5
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.
 

Forum istatistikleri

Konular
129,511
Mesajlar
927,482
Kullanıcılar
452,089
Son üye
ERDOĞAN GÜRÇALI

Yeni konular

Geri
Üst