Ejecutar sketch sin estar conectado al PC

Hola!

Ojalá podáis ayudarme, os cuento;

Uso un MKR1300 para conectarme a TTN y enviar datos de un DHT11. Hasta aquí todo bien, pero cuando quiero que envíe los datos sin estar conectado al USB del ordenador sino a otra fuente de alimentación no recibo datos y aquí empieza la investigación.

Pienso que el problema es que le faltan las librerias porque en en cuanto ejecuto el programa de ArduinoIDE en el PC funciona perfectamente.

  • ¿A caso las librerias añadidas al sketch como “#include <DHT.h>” por ejemplo, no se guardan en la memoria del Arduino?

  • ¿Debería modificar el boatlooder para que ejecutara el programa sin tener que estar abierto el ArduinoIDE en el PC?

Gracias!!

#include <MKRWAN.h> 
#include <DHT.h>

#define DHTTYPE DHT11 
#define DHTPIN 2


LoRaModem modem;
DHT dht(DHTPIN, DHTTYPE);

String appEui = "xxxxxxxxxxxxxxxx";
String appKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxx";


void setup() {
  //CONEXIÓN
  Serial.begin(115200);
  while (!Serial);
  // change this to your regional band (eg. US915, AS923, ...)
  if (!modem.begin(EU868)) {
    Serial.println("Failed to start module");
    while (1) {}
  }
  Serial.print("Your module version is: ");
  Serial.println(modem.version());
  Serial.print("Your device EUI is: ");
  Serial.println(modem.deviceEUI());

  int connected = modem.joinOTAA(appEui, appKey);
  if (!connected) {
    Serial.println("No se ha podido conectar");
    while (1) {}
  }
  modem.minPollInterval(60);
  
//SENSORES
//DHT11
  {
  Serial.begin(9600);
  Serial.println("Conectado");
  Serial.println(F("Iniciando Sensor"));

  dht.begin();
  Serial.println(F("Sensor iniciado correctamente"));
}
}


void loop()
{{
    
  // Wait a few seconds between measurements.
  float h = dht.readHumidity();
  
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);


  Serial.print(h);
  Serial.print(F("% Humedad  "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(hic);
  Serial.print(F("°C Sensación Térmica "));
 
}

  Serial.println ();
  Serial.println("Enviando Datos");

  int err;
  modem.beginPacket();
  modem.print(dht.readTemperature());
  modem.print(dht.readHumidity());
  err = modem.endPacket(true);
  if (err > 0) {
    Serial.println("¡Datos enviados correctamente!");
    Serial.println("Tiempo de espera 2 min");
    delay(1000*120);
  } else {
    Serial.println("Error enviando mensaje, espabila!");
    Serial.println("Tiempo de espera 5 min");
   delay(1000*500);
   }
  Serial.println("Fin Bucle");
  
  if (!modem.available()) {
    Serial.println("Sin mensajes recibidos");
    return;
  }
  char rcv[64];
  int i = 0;
  while (modem.available()) {
    rcv[i++] = (char)modem.read();
  }
  Serial.print("Received: ");
  for (unsigned int j = 0; j < i; j++) {
    Serial.print(rcv[j] >> 4, HEX);
    Serial.print(rcv[j] & 0xF, HEX);
    Serial.print(" ");
  }
  
}

Lo arreglé

Elimine la parte en el void loop

Serial.begin(115200);
while (!Serial);

Hasta que no abría el serial no arrancaba el programa y ahora entendí porque.

Justamente tenías un error esperando que se abriera un terminal cosa que nunca ocurría.
No hay mejor experiencia que aquella que uno mismo descubre por el método que sea. En tu caso un poco de prueba/error, otro de fortuna pero como nos ocurre a todos. Asi se aprende cuando no tienes a alguien que te diga que tal cosa es lo que falla.
Felicitaciones!!.