Section `.text' will not fit in region `FLASH'

Ciao a tutti,
spero che possiate aiutarmi.
Sto "giocando" con il nuovo arduino UNO R4 Wifi con piccolo progettino con un sensore PIR HC-SR501. In pratica quando rileva un movimento invia un'email.
Diciamo subito che sono andato a step tuilizzando il codice di esempio che trovo sull'IDE arduino:
1:- Connessione Wifi (Lib. WifiS3.h) -> qui tutto bene
2:- invio di email (Lid ESP_Mail_Client.h) -> qui inizia il mio calvario

In pratica non termina la compilazione perchè non c'è abbastanza spazio nella memoria FLASH:

"/arm-none-eabi/bin/ld.exe: region `FLASH' overflowed by 52984 bytes
collect2.exe: error: ld returned 1 exit status"

Possibile che il codice per la connessione Wifi e invio email siano troppo pesanti insieme?
Potreste aiutarmi a capire?
Grazie infinite

Hai delle stringhe costanti di testo? Messaggi email molto lunghi?

Magari metti il codice, sempre racchiuso nei tag CODE, che proviamo a darci un'occhiata ... :roll_eyes:

Guglielmo

Grazie per la risposta. Ecco il codice:

#include <WiFiS3.h>
#include <ESP_Mail_Client.h>

 
#define WIFI_SSID "Vodafone-Casa-wifi" // CHANGE IT
#define WIFI_PASSWORD "*********" // CHANGE IT

// the sender email credentials
#define SENDER_EMAIL "miamail@mail.mail" // CHANGE IT
#define SENDER_PASSWORD "miapassword"  // CHANGE IT to your Google App password

#define RECIPIENT_EMAIL "rivecente@mail.mail" // CHANGE IT

#define SMTP_HOST "smtp.libero.it"
#define SMTP_PORT 465

SMTPSession smtp;

void setup() {
  Serial.begin(9600);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  String subject = "Email Notification from Arduino";


  String textMsg = "This is an email sent from Arduino.\n";
  textMsg += "Sensor value: ";
  textMsg += "15"; // OR replace this value read from a sensor

  mail_send(subject, textMsg);
}

void loop() {
  // YOUR OTHER CODE HERE
}

void mail_send(String subject, String textMsg) {
  // set the network reconnection option
  MailClient.networkReconnect(true);

  smtp.debug(1);

  smtp.callback(smtpCallback);
  Session_Config config;

  // set the session config
  config.server.host_name = SMTP_HOST;
  config.server.port = SMTP_PORT;
  config.login.email = SENDER_EMAIL;
  config.login.password = SENDER_PASSWORD;
  config.login.user_domain ="";// F("127.0.0.1");
  config.time.ntp_server = F("pool.ntp.org,time.nist.gov");
  config.time.gmt_offset = 1;
  config.time.day_light_offset = 0;

  // declare the message class
  SMTP_Message message;

  // set the message headers
  message.sender.name = F("Arduino");
  message.sender.email = SENDER_EMAIL;
  message.subject = subject;
  message.addRecipient(F("To Whom It May Concern"), RECIPIENT_EMAIL);

  message.text.content = textMsg;
  message.text.transfer_encoding = "base64";
  message.text.charSet = F("utf-8");
  message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;

  // set the custom message header
  message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));

  // connect to the server
  if (!smtp.connect(&config)) {
    Serial.println("Connection error: ");
    Serial.print("- Status Code: ");
    Serial.println(smtp.statusCode());
    Serial.print("- Error Code: ");
    Serial.println(smtp.errorCode());
    Serial.print("- Reason: ");
    Serial.println(smtp.errorReason().c_str());
    return;
  }

  if (!smtp.isLoggedIn()) {
    Serial.println("Not yet logged in.");
  } else {
    if (smtp.isAuthenticated())
      Serial.println("Successfully logged in.");
    else
      Serial.println("Connected with no Auth.");
  }

  // start sending Email and close the session
  if (!MailClient.sendMail(&smtp, &message)) {
    Serial.println("Connection error: ");
    Serial.print("- Status Code: ");
    Serial.println(smtp.statusCode());
    Serial.print("- Error Code: ");
    Serial.println(smtp.errorCode());
    Serial.print("- Reason: ");
    Serial.println(smtp.errorReason().c_str());
  }
}

// callback function to get the Email sending status
void smtpCallback(SMTP_Status status) {
  // print the current status
  Serial.println(status.info());

  // print the sending result
  if (status.success()) {
    for (size_t i = 0; i < smtp.sendingResult.size(); i++) {
      // get the result item
      SMTP_Result result = smtp.sendingResult.getItem(i);

      Serial.print("Status: ");
      if (result.completed)
        Serial.println("success");
      else
        Serial.println("failed");

      Serial.print("Recipient: ");
      Serial.println(result.recipients.c_str());
      Serial.print("Subject: ");
      Serial.println(result.subject.c_str());
    }
    Serial.println("----------------\n");

    // free the memory
    smtp.sendingResult.clear();
  }
}

Scusa, ma hai letto il readme della libreria (che nasce per ESP32 che ha un bel po' di flash in più che il RA4M1 della UNO R4)?

...
Minimum 200k flash space device is recommended for library installation and user code.
...

... è facile, con tali premesse, superare i limiti della flash ! Aggiungi la parte che riguarda il WiFi, il tuo codice ed ecco che ... vai oltre il limite :confused:

Non credo tu abbia scelto la giusta MCU per quello che devi fare (prima di acquistare l'hardware, sarebbe bene avere in chiaro cosa si vuole fare e le risorse che occorrono), molto meglio se ti prendi una semplice schedina basata su ESP32 :wink:

Guglielmo

P.S.: ... considera che, minimo, un ESP32 ha 4 MBytes di flash, ma ce ne sono da 8 e da 16 MBytes, il RA4M1 che monta Arduino UNO R4 ha SOLO 256 KBytes di flash ... vedi un po' tu.

Mi dispiace averti fatto perdere tempo e ti ringrazio per l'aiuto. La prossima volta starò più attento

Ma figurati ... siamo qui apposta, per cercare di trovare delle soluzioni o per cercare di dare qualche consiglio ... e poi ... sai quanti impegni a Ferragosto :joy: :joy: :joy:

Buon Ferragosto !!!

Guglielmo