Problems with Deep Sleep mode

Questions about the Waspmote v15 and its modules
Post Reply
albertoL
Posts: 32
Joined: Mon May 27, 2019 11:38 am
Company: Fundación CETIM

Problems with Deep Sleep mode

Post by albertoL » Mon Dec 02, 2019 11:58 am

Hi.

I am having problems with the "Deep sleep mode".

When I run the sample code, this function works without problems. But when I execute it in my code, I cannot send the Waspmote to DeepSleep mode for more than two minutes.
Since if I do this, when the "LOOP" is executed again and I give the instruction _4G.ON (); To start the 4G module and receive the GPS position, the Waspmote is restarted.


We had the Waspmote a week off and then we reloaded the code and it worked correctly without having done anything, until it returned to give the same error.

Which may be due? the battery is 100% charged and this only happens when trying to receive the GPS position for the second time.
He actualizado la API a la última versión.


Thank you.

libelium-dev
Posts: 27967
Joined: Mon Sep 28, 2009 1:06 pm

Re: Problems with Deep Sleep mode

Post by libelium-dev » Tue Dec 03, 2019 11:56 am

Hi,

Could you please share the code used with us? In addition, please copy here the output through the serial monitor.

What sensors are connected to the node? What is the battery level of the node?

It could be caused by interferences in the I2C bus if it's managed properly.

Regards

albertoL
Posts: 32
Joined: Mon May 27, 2019 11:38 am
Company: Fundación CETIM

Re: Problems with Deep Sleep mode

Post by albertoL » Tue Dec 03, 2019 1:33 pm

Hi.

I have connected the sensors of CO, SO2, NO2 and O3, in addition to a fan. The current battery level is 90%, although I have tried 100% charged and the same thing happens.


I share the code I am using:

Code: Select all


#include <WaspSensorGas_Pro.h>
#include <BME280.h>
#include <WaspFrame.h>
#include <Wasp4G.h>
#include <WaspPM.h>

WaspUART uart = WaspUART();


int num_medida = 0; // Para llevar la gestión del número de envíos

byte reg_error[7] = {0, 0, 0, 0, 0, 0, 0};


// Variables para el soplador
const bool sopladorPower = DIGITAL3; 

// Variables para gestión de datos en SD
int dia_hoy;

char carpeta[] = "/CARPETA1";
char subcarpeta[] = "/CARPETA1/CARPETA2";
char archivo[] = "/CARPETA1/CARPETA2/medidas.TXT";

// Configuración APN
char apn[] = "";
char login[] = "";
char password[] = "";

char moteID[] = "node_01";  // Waspmote ID

uint8_t socketId = Wasp4G::CONNECTION_1;  // Socket ID para el envío por 4G

const char certificado[] PROGMEM =
  "-----BEGIN CERTIFICATE-----\r"\

  "-----END CERTIFICATE-----";

// Certificado para SSL
int Certificado_SSL()
{
  int error;

  char ca_cert[2000];
  // -----------------------------

  // borra el buffer
  memset(ca_cert, 0x00, sizeof(ca_cert));
  strcat_P(ca_cert, (char*)pgm_read_word(&(certificado[0])));

  // Configura el certificado SSL
  error = _4G.manageSSL(socketId, Wasp4G::SSL_ACTION_STORE, Wasp4G::SSL_TYPE_CA_CERT, ca_cert);

  return error;
}


void Reinicio_Alarmas()  
{
  for (int posicion = 0; posicion <= 6; posicion++)
  {
      reg_error[posicion] = 0;
  }
}


void setup()
{
  int error;

  uint8_t status;
  // -----------------------------

  // Parpadeo de cada uno de los leds 3 veces 1000ms para indicar el inicio del SETUP
  Utils.blinkGreenLED(1000, 3);    // LED1
  Utils.blinkRedLED(1000, 3);      // LED0

  Reinicio_Alarmas();

  status = Utils.checkNewProgram();

  switch (status)
  {
    case 0:
      reg_error [0] = 2;
      USB.println(F("REPROGRAMMING ERROR"));
      Utils.blinkRedLED(300, 3);
      break;

    case 1:
      reg_error [0] = 0;
      USB.println(F("REPROGRAMACIÓN OK"));
      Utils.blinkGreenLED(300, 3);
      break;

    default:
      reg_error [0] = 1;
      USB.println(F("REINICIANDO"));
      Utils.blinkGreenLED(500, 1);
  }

  RTC.ON();

  pinMode(sopladorPower, OUTPUT);
  pinMode(GP_I2C_MAIN_EN, OUTPUT);

  // open USB port
  USB.ON();

  frame.setID(moteID);  // Waspmote ID

  _4G.set_APN(apn, login, password);
  _4G.show_APN();

  error = _4G.ON();

  if (error == 0)
  {
    USB.println(F("1. 4G module ready..."));

    status = _4G.checkDataConnection(60);

    if (status == 0)
    {
      _4G.setTimeFrom4G();   

      dia_hoy = RTC.date;
      
      USB.println(RTC.getTime());
      USB.println(RTC.getTimestamp());
    }

    error = Certificado_SSL();

    if (error == 0)
    {
      USB.println(F("2. Set CA certificate OK"));

      reg_error [1] = 0;
      reg_error [2] = error;
    }
    else
    {
      USB.print(F("2. Error setting CA certificate. Error="));
      USB.println(error, DEC);

      reg_error [1] = 1;
      reg_error [2] = error;
    }
  }
  _4G.OFF();

  //  Así cada vez que hace el SETUP crea la carpeta del día
  Gestion_Carpetas_SD(true);  

  // Comprobar que funciona el soplador
  Control_Soplador(true);
  delay(5000);
  Control_Soplador(false);

  Utils.blinkGreenLED(500, 3);   // Enciende el LED Verde para indicar fin de SETUP
}

void Reposo()   // Manda la placa y los sensores a REPOSO, pero los deja encendidos para los calentamientos y ahorrar batería
{
  // Después de 2 minutos se despierta
  PWR.deepSleep("00:00:02:00", RTC_OFFSET, RTC_ALM1_MODE1, ALL_ON);
}

void Posicion_GPS()
{
  int intentos = 0;
  int satelites;

  uint8_t error;
  uint8_t gps_status;
  // -----------------------------

  _4G.ON();


  gps_status = _4G.gpsStart();

  while (gps_status != 0 and intentos < 3) 
  {
    // Reinicia el GPS
    _4G.gpsStop();  // Stop GPS
    delay(1000);

    gps_status = _4G.gpsStart();  // Start GPS
    intentos++;
  }

  intentos = 0;

  error = _4G.waitForSignal(5000);

  while (error != 0 and intentos < 3)
  {
    error = _4G.waitForSignal(5000);
    intentos++;
  }

  satelites = _4G._numSatellites;

  if (satelites == 0)
  {
    reg_error [5] = 1;
  }
  else
  {
        reg_error [5] = 0;
  }

  frame.addSensor(SENSOR_GPS, _4G.convert2Degrees(_4G._latitude, _4G._latitudeNS), _4G.convert2Degrees(_4G._longitude, _4G._longitudeEW));

  _4G.gpsStop();
  _4G.OFF();
}

void Espera_nuevas_Medidas ()
{
  // Se va a reposo y después de 15 minutos se despierta para hacer el siguiente ciclo de mediciones
  PWR.deepSleep("00:00:03:00", RTC_OFFSET, RTC_ALM1_MODE1, ALL_OFF);

  // Después de despertarse comprueba el flag de la interrupción
  if( intFlag & RTC_INT )
  {
    // Borra el flag de la interrupción
    intFlag &= ~(RTC_INT);
  }
}

void Crear_Frame()
{
  // Crea un nuevo frame (ASCII)
  frame.createFrame(ASCII, moteID);
}

void Sensor_BME()
{
  digitalWrite(GP_I2C_MAIN_EN, HIGH); // Activa la comunicación con la placa

  BME.ON(); // Enciende el sensor de Temperatura, humedad y presión

  // Realiza las medidas y las guarda en el frame
  frame.addSensor(SENSOR_GASES_PRO_TC, BME.getTemperature(BME280_OVERSAMP_16X, BME280_FILTER_COEFF_OFF));
  frame.addSensor(SENSOR_GASES_PRO_HUM, BME.getHumidity(BME280_OVERSAMP_16X));
  frame.addSensor(SENSOR_GASES_PRO_PRES, ((BME.getPressure(BME280_OVERSAMP_16X, BME280_FILTER_COEFF_OFF)) / 1000));

  digitalWrite(GP_I2C_MAIN_EN, LOW); // Desactiva la comunicación con la placa
}

void Leer_Sensores()
{
  Gas CO (SOCKET_2);
  Gas NO2 (SOCKET_3);
  Gas O3 (SOCKET_4);
  Gas SO2 (SOCKET_6);
  // -----------------------------

  Sensor_BME();   // Antes de hacer las medidas de los gases mide Temperatura, Humedad y Presión

  CO.ON();  // Enciende sensor de CO
  NO2.ON();    // Enciende sensor de NO2
  O3.ON(); // Enciende sensor de O3
  SO2.ON(); // Enciende sensor de SO2

  Control_Soplador(true);  // El tiempo para renovación y coger la muestra de aire, se hace con el tiempo de calentamiento de los sensores
  USB.println("calentando");
  Reposo();  //  Necesita 30s para mover todo el aire que hay dentro. Con los 2 minutos de calentamiento debería de ir sobrado
  USB.println("Listo!");
  frame.addSensor(SENSOR_GASES_PRO_O3, O3.getConc());   
  USB.println(O3.getConc());
  O3.OFF();

  frame.addSensor(SENSOR_GASES_PRO_CO, CO.getConc()); 
  USB.println(CO.getConc());
  CO.OFF();

  frame.addSensor(SENSOR_GASES_PRO_SO2, SO2.getConc());  
  USB.println(SO2.getConc());
  SO2.OFF();

  frame.addSensor(SENSOR_GASES_PRO_NO2, NO2.getConc());  
  USB.println(NO2.getConc());
  NO2.OFF();
}


void Control_Soplador (bool on)
{
  if (on == true) // Si el soplador está encendido, lo apaga. Y si está apagado lo enciende
  {
    PWR.setSensorPower(SENS_3V3, SENS_ON);
    digitalWrite(sopladorPower, HIGH);
    delay(500);
  }
  else
  {
    digitalWrite(sopladorPower, LOW);
    delay(500);
    PWR.setSensorPower(SENS_3V3, SENS_OFF);
  }
}



void Gestion_Carpetas_SD(bool Setup)    // Crea las carpetas y archivos necesarios para guardas las medidas. /DATAS_MES/MEDID_DIA/medidas.TXT
{
  int mes;
  int borrar_carpeta_mes;
  int dia_comprobar;

  uint8_t respuesta_sd;
  // -----------------------------

  //USB.println(Setup);
   if (Setup == false)    // Se cumple cuando la llamo desde el "LOOP"
  {
    dia_comprobar = RTC.date;
    
    dia_comprobar = dia_comprobar - dia_hoy;

    if (dia_comprobar == 1 or dia_comprobar < 0) // Al cambiar de mes la resta va a dar un número negativo
    {
      dia_hoy = RTC.date;   // Actualiza el día que es, para las comprobaciones
  
      
      // Se crean las carpetas y archivos necesarios para guardar las medidas
      SD.ON();
  
      // Crea la carpeta del mes
      sprintf(carpeta, "/DATAS_%02u", RTC.month);
    
      respuesta_sd = SD.mkdir(carpeta);
    
      if ( respuesta_sd == true )   // Solo va a crear una carpteta principal por mes
      {
        mes = RTC.month;
        borrar_carpeta_mes = mes - 6;
    
        if (borrar_carpeta_mes <= 0)
        {
          borrar_carpeta_mes = 12 + borrar_carpeta_mes;
        }
    
        Borrar_Carpeta_SD(borrar_carpeta_mes);    // Cada vez que crea una carpeta nueva, borra una carpeta de hace 6 meses
    
        USB.print(F("Created directory system:"));
        USB.println(carpeta);
      }
      else
      {
        USB.println(F("mkdir Error: CARPETA `MES` CREADA ANTERIORMENTE"));
      }
    
      sprintf(subcarpeta, "/DATAS_%02u/MEDID_%02u", RTC.month, RTC.date);
    
      respuesta_sd = SD.mkdir(subcarpeta);   // Crea una carpeta secundaria con el día que se hacen las medidas
    
      if ( respuesta_sd == true )   // Solo va a crear una carpeta secundaria por día
      {
        num_medida = 0;   
        USB.println(F(" CARPETA `DIA` CREADA"));
      }
      else
      {
        USB.println(F("mkdir Error: CARPETA `DIA` CREADA ANTERIORMENTE"));
      }
    
      sprintf(archivo, "%s/medidas.TXT", subcarpeta); // Crea un archivo para almacenar las medidas de cada día
    
      respuesta_sd = SD.create(archivo);
      if ( respuesta_sd == true )
      {
        USB.println(F("FILE created"));
      }
      else
      {
        USB.println(F("FILE NOT created"));
      }
    
      SD.OFF();
    }
  }

   else     // Se cumple cuando la llamo desde el "SETUP"
   {
      // Se crean las carpetas y archivos necesarios para guardar las medidas
      SD.ON();
 
      sprintf(carpeta, "/DATAS_%02u", RTC.month);
    
      respuesta_sd = SD.mkdir(carpeta);
    
      if ( respuesta_sd == true )
      {
        mes = RTC.month;
        borrar_carpeta_mes = mes - 6;
    
        if (borrar_carpeta_mes <= 0)
        {
          borrar_carpeta_mes = 12 + borrar_carpeta_mes;
        }
    
        Borrar_Carpeta_SD(borrar_carpeta_mes);
        
        USB.print(F("Created directory system:"));
        USB.println(carpeta);
      }
      else
      {
        USB.println(F("mkdir Error: CARPETA `MES` CREADA ANTERIORMENTE"));
      }
    
      sprintf(subcarpeta, "/DATAS_%02u/MEDID_%02u", RTC.month, RTC.date);
    
      respuesta_sd = SD.mkdir(subcarpeta);  
        
      if ( respuesta_sd == true ) 
      {
        num_medida = 0;    
        USB.println(F(" CARPETA `DIA` CREADA"));
      }
      else
      {
        USB.println(F("mkdir Error: CARPETA `DIA` CREADA ANTERIORMENTE"));
      }
    
      sprintf(archivo, "%s/medidas.TXT", subcarpeta);
    
      respuesta_sd = SD.create(archivo);
      if ( respuesta_sd == true )
      {
        USB.println(F("FILE created"));
      }
      else
      {
        USB.println(F("FILE NOT created"));
      }
      SD.OFF();
   }
}

void Borrar_Carpeta_SD (int borra_mes)
{
  uint8_t respuesta_sd;

  char carpeta_borrar [] = "/CARPETA1";
  // -----------------------------

  sprintf(carpeta_borrar, "/DATAS_%02i", borra_mes);

  respuesta_sd = SD.rmRfDir(carpeta_borrar);

  if ( respuesta_sd == true )
  {
    reg_error [6] = 10;
    //  USB.println(F("Carpeta borrada"));
  }
  else
  {
    reg_error [6] = 11;
  }
}

void Guardar_Medidas_SD()
{
  uint8_t respuesta_sd;

  char almacena_frame[520];
  // -----------------------------

  SD.ON();

  frame.showFrame();

  // Conversión de binario a ASCII
  Utils.hex2str( frame.buffer, almacena_frame, frame.length);
    
  USB.print(F("Frame to be stored:"));
  USB.println(almacena_frame);
  USB.println( strlen(almacena_frame) );

  respuesta_sd = SD.appendln(archivo, almacena_frame);

  if ( respuesta_sd == 1 )
  {
    USB.println(F("\n1 - medida añadida"));
  }
  else
  {
    reg_error [6] = 21;
    USB.println(F("\n1 - ERROR GUARDANDO MEDIDA"));
  }

  SD.OFF();

  Reinicio_Alarmas();   // Reinicia el registro de alarmas
}


void loop()
{
  USB.println(F("Empieza"));
  Utils.setLED(LED1, LED_ON);   // Enciende el LED verde para indicar que está midiendo

  Gestion_Carpetas_SD(false); // Le paso false para indicarle que no se le llama desde el "SETUP"


  Crear_Frame();

  frame.addSensor(MessageID, num_medida);  
  
  USB.println(RTC.getTime());
  frame.addSensor(SENSOR_DATE, RTC.year, RTC.month, RTC.date);
  frame.addSensor(SENSOR_TIME, RTC.hour, RTC.minute, RTC.second);

  Posicion_GPS();

  Leer_Sensores();

  Control_Soplador(false); // Apaga el soplador

  Utils.setLED(LED1, LED_OFF); 

  Guardar_Medidas_SD();


  num_medida++;

  USB.println(num_medida);

  USB.println(F("Fin"));

  Utils.blinkRedLED(200, 5);    // Para indicar que se va a tiempo de espera

  Espera_nuevas_Medidas ();

          USB.println("///////-----------------++++++++++-------------\\\\\\\\\\");
}

And the output by the serial monitor.

Code: Select all

J#
REINICIANDO
*****************************
APN: ac.vodafone.es
LOGIN: vodafone
PASSWORD: vodafone
*****************************
J#
REINICIANDO
*****************************
APN: ac.vodafone.es
LOGIN: vodafone
PASSWORD: vodafone
*****************************
1. 4G module ready...
Tue, 19/12/03, 13:06:23
Tue, 19/12/03, 13:06:23
2. Set CA certificate OK
mkdir Error: CARPETA `MES` CREADA ANTERIORMENTE
mkdir Error: CARPETA `DIA` CREADA ANTERIORMENTE
FILE NOT created
Empieza
Tue, 19/12/03, 13:06:35
calentando
Listo!
0.0331903576
0.3804567146
0.0630527210
0.0000000000
===============================
Current ASCII Frame:
Length: 157
Frame Type:  134
frame (HEX): 3C3D3E860B2332463034413245383035393345344233236E6F64655F30312330234D657349443A3023444154453A31392D31322D332354494D453A31332D362D3335234750533A302E3030303030303B302E3030303030302354433A32322E33372348554D3A33342E3823505245533A3130312E3636234F333A302E30313923434F3A302E34323323534F323A302E303534234E4F323A302E30303023
frame (STR): <=>†#2F04A2E80593E4B3#node_01#0#MesID:0#DATE:19-12-3#TIME:13-6-35#GPS:0.000000;0.000000#TC:22.37#HUM:34.8#PRES:101.66#O3:0.019#CO:0.423#SO2:0.054#NO2:0.000#
===============================
Frame to be stored:3C3D3E860B2332463034413245383035393345344233236E6F64655F30312330234D657349443A3023444154453A31392D31322D332354494D453A31332D362D3335234750533A302E3030303030303B302E3030303030302354433A32322E33372348554D3A33342E3823505245533A3130312E3636234F333A302E30313923434F3A302E34323323534F323A302E303534234E4F323A302E30303023
314

1 - medida añadida
1
Fin
///////-----------------++++++++++-------------\\\\\
Empieza
Tue, 19/12/03, 13:13:08
J#
As you can see, the first time you run the code without problems and the second time, when you try to turn on the 4G module to activate the GPS it is where it fails.
This I have verified, putting lines with comments in the library "Wasp4G", to check how far it came.

In addition, if I send the Waspmote to deep sleep 2 minutes or less, this problem does not occur. If the command more than two minutes is when it occurs.

Tanhks.

libelium-dev
Posts: 27967
Joined: Mon Sep 28, 2009 1:06 pm

Re: Problems with Deep Sleep mode

Post by libelium-dev » Wed Dec 04, 2019 11:12 am

Hi,

What is the battery level of the node?

How is the fan connected to Waspmote? Do you have Waspmote OEM or P&S?

Why did you declare the uart object in the code? Is there any device connected to the UART pins?

You can improve your code reading the BME sensor as is showed in the following link. In this way, the I2C bus is managed in the library and you don't have to manage the GP_I2C_MAIN_EN pin in your code.
http://www.libelium.com/development/was ... re-sensor/

Also, try to use snprintf() function instead of sprintf() since it can cause stability problems and the node could be blocked. For example, carpeta variable is declared as "/CARPETA1" which size is 9 bytes, if you use sprintf() and the size of the new string is more than 9 bytes the node could be blocked.

Regards

albertoL
Posts: 32
Joined: Mon May 27, 2019 11:38 am
Company: Fundación CETIM

Re: Problems with Deep Sleep mode

Post by albertoL » Wed Dec 04, 2019 4:11 pm

Hi.

I made the suggested improvements but did not solve the problem.

The battery level of the node is 90%.
We have an OEM Waspmote, with the fan controlled from the DIGITAL 3 pin, to turn it on or off.
The gas sensors are in sockets 2, 3, 4 and 6.
In socket D I have a particle meter, so there is an object of the UART. Because my meter works at 2400 bauds. But I turn it off when I don't use it.
I have tried to put the PD2 pin at 115200 bauds when I turn off the meter but it does not solve the problem.

What I don't understand is that in summer everything was working correctly. Now we have resumed the tests with the team and we found this problem.

Thank you!

albertoL
Posts: 32
Joined: Mon May 27, 2019 11:38 am
Company: Fundación CETIM

Re: Problems with Deep Sleep mode

Post by albertoL » Tue Dec 10, 2019 4:21 pm

Hola.

Sigo intentando entender porque falla mi código.

He quitado la instrucción de DeepSleep y la parte de configuración del pin PD2 para recibir la comunicación del medidor de partículas. Y al intentar encender el módulo 4G el programa se reinicia, pero no todas las veces.

El punto en el que el programa se reinicia se lo indico ahora.

Code: Select all

uint8_t Wasp4G::ON()
{
	uint8_t counter;
	uint8_t answer;
	char command_buffer[50];

	// set UART1 multiplexer to Socket1
	Utils.setMuxSocket1();

	// Set UART
	_uart = UART1;
	_baudrate = LE910_RATE;
	beginUART();

	// Power on the module
	digitalWrite(GPRS_PW, LOW);
	delay(500);
	digitalWrite(GPRS_PW, HIGH);		// [b]This is the point at which my code restarts. It is the _4G.ON () function of the file "Wasp4G.ccp"[/b]
	delay(1000);
	answer = check_DS2413();

	if ( answer == 0) delay(10000);
	else
	{
		if (read_DS2413() == 0)
		{
			// Turn on module with DS2413
			answer = on_DS2413();

			if (answer == 0)
			{
				return 1;
			}
		}

	}

	// Check communication with the module sending a basic AT command
	counter = 15;
	answer = 0;
	while ((counter > 0) && (answer == 0))
	{
		answer = sendCommand("AT\r", LE910_OK, 1000);
		counter--;
	}

	if (answer == 0)
	{
		// No comunication with the module
		// Power off and return an error
		digitalWrite(GPRS_PW, LOW);

		// Error code for no communication
		return 1;
	}


	// Set Report Mobile Equipment Error (CMEE)
	counter = 3;
	answer = 0;
	strcpy_P(command_buffer, (char*)pgm_read_word(&(table_4G[19])));	//AT+CMEE=1\r
	while ((counter > 0) && (answer == 0))
	{
		answer = sendCommand(command_buffer, LE910_OK, LE910_ERROR, 500);
		counter--;
	}
	if (answer != 1)
	{
		// Error switching CME errors to numeric response
		// Power off and return an error
		digitalWrite(GPRS_PW, LOW);

		// Error code for error switching CME errors to numeric response
		return 2;
	}


	// Disable command echo
	counter = 3;
	answer = 0;
	strcpy_P(command_buffer, (char*)pgm_read_word(&(table_4G[20])));	//ATE0\r
	while ((counter > 0) && (answer == 0))
	{
		answer = sendCommand(command_buffer, LE910_OK, LE910_ERROR, 500);
		counter--;
	}
	if (answer != 1)
	{
		// Error disabling the echo from the module
		// Power off and return an error
		digitalWrite(GPRS_PW, LOW);

		// Error code disabling the echo from the module
		return 3;
	}


	// setup NETWORK_UTRAN
	answer = setWirelessNetwork(Wasp4G::NETWORK_3GPP);

	// get module version
	module_version = getModelVersion();

	return 0;
}
Thanks!

libelium-dev
Posts: 27967
Joined: Mon Sep 28, 2009 1:06 pm

Re: Problems with Deep Sleep mode

Post by libelium-dev » Wed Dec 11, 2019 12:33 pm

Hi,

The reboot could be because the 4G module needs more current than the battery can provide. Could you please try to use another battery? Also, if you have another Waspmote and 4G module, please try to replace each device to find out where the problem arises.

Please perform the tests without sensors connected to Waspmote.

Does Waspmote reboot by using the 4G example codes?

Regards

albertoL
Posts: 32
Joined: Mon May 27, 2019 11:38 am
Company: Fundación CETIM

Re: Problems with Deep Sleep mode

Post by albertoL » Wed Dec 11, 2019 1:50 pm

Hi.

We have been testing and the fault we detected is that the board is not able to put the GPR_PW pin to HIGH.
It is a bit weird, since sometimes it is capable, for example to turn on the GPS. And then to catch the 4G signal level can not.

The battery is only one year old and is that of Libelium.
We do not have another Waspmote, battery, or 4G module.

We will test without the connected sensors to see if the problem is fixed.

Thank you.

libelium-dev
Posts: 27967
Joined: Mon Sep 28, 2009 1:06 pm

Re: Problems with Deep Sleep mode

Post by libelium-dev » Thu Dec 12, 2019 8:49 am

Let us know once you have the result of your tests.

Regards

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest