Problemas al enviar informacion con modulo GPRS

Hola tengo problemas para enviar datos a través del modulo GPRS, tengo entendido que habia un bug que no permitia mandar la informacion pero lo arreglaron aun asi no me deja enviar nada tampoco me refleja el dispositivo me guie de los ejemplos de la pagina pero no me funciona me sale el siguiente mensaje

----------
payload:
Ubidots-Sim900/4.0.1|POST|BBFF-HecJ0KQYn0PnmepvPMfZGhPfOQ7cx7|combustible:=>
----------

Sending data...
Checking Power status SIM900 module
Sim900 is Powered Off
Powering on SIM900

este es el codigo que utilizo no se si estare colocando algo mal

/**************                      
* librerias y cambio de puerto serial
**************/
#include <GPRS_Shield_Arduino.h> // librerias de ubidots
#include <Ubidots.h> 
#include <SoftwareSerial.h>  // libreria que permite establecer pines digitales para comunicacion serie

SoftwareSerial D1(7, 8);  // pin 7 como RX, pin 8 como TX     
      
/**************                      
* constantes/credenciales
**************/    
    
const char *APN = "bam.clarochile.cl";
const char *USER = "clarochile";
const char *PASS = "clarochile";
const char *TOKEN = "BBFF-HecJ0KQYn0PnmepvPMfZGhPfOQ7cx7";
const char *DEVICE_LABEL = "gprs";
const char *VARIABLE_LABEL_1 = "combustible";   
const char *VARIABLE_LABEL_2 = "ubicacion";       

Ubidots client (TOKEN,APN,USER,PASS);


void setup() {                      
  Serial.begin(115200);
  D1.begin(115200);                       
  client.setDebug(true); // Establecer verdadero para que los mensajes de depuración estén disponibles   
}                                  
void loop() {
  float combustible = analogRead(A0);  // Lectura de pin A0
  int porcentaje; // Declaracion variable para conversion a porcentaje el combustible
  float ubicacion = 1; // Lectura Ubicacion
  char context[25];
  
  porcentaje = map(combustible, 0,512, 0, 100); //funcion map para mostrar porcentaje de combustible
  
  sprintf(context, "lat=1.2343$lng=132.1233"); //Envia Latitud y Longitud con ubicacion en el mapa
  
  client.send(VARIABLE_LABEL_1, porcentaje); // Envio porcentaje de Combustible

  client.add(VARIABLE_LABEL_2, ubicacion, context);  // Envio Ubicacion
  
  if(client.send(DEVICE_LABEL)){
    Serial.println("Data sent to Ubidots sucessfully!");
  }                                       
  delay(5000);                    
}

Puedes por favor verificar que tu dispositivo tenga abierto un canal a la nube? Puedes hacerlo corriendo el ejemplo base del fabricante https://github.com/Seeed-Studio/GPRS_SIM900/blob/master/examples/GPRS_HTTP_GET/GPRS_HTTP_GET.ino

Quedamos atentos

Hola @cnta1998,

Tienes un par de errores y adicionalmente, otras cosas por mejorar.
Antes de listar estos puntos, recuerda revisar el README de la librería, y sus ejemplos, en el repositorio de Github pues ahí está la documentación y correcto uso de la misma.

  1. Estás haciendo un mal uso del método send(). Este recibe dos const * char y le estás ingresando un float en la segunda posición. Adicionalmente, el primer y segundo parámetro corresponden al Device Label y al Device Name, respectivamente, siendo el segundo opcional.


    Con esto en mente, así debería mostrarse dicha línea:
    client.send(DEVICE_LABEL);

  2. El método add() siempre debe ser invocado antes que el de send() pues este es el que agrega los valores, contexto (opcional) y timestamp (opcional) de las variables al mensaje que se enviará. Entonces con todo el sentido, primero se agrega todo al mensaje y luego este se envía.
    NOTA: solo se puede enviar mensajes con máximo 5 variables o 256 bytes. Lo que se cumple primero.
    Debe quedar así:

client.add(VARIABLE_LABEL_1, porcentaje);
client.add(VARIABLE_LABEL_2, ubicacion, context);
client.send(DEVICE_LABEL);
  1. La librería ofrece 2 métodos para construir el contexto sin tener que hacerlo manual. Son addContext() y getContext(). Se usan así:
char context[30];
client.addContext("lat", "1.2343");
client.addContext("lng", "132.1233");
client.getContext(context);

Con estas sugerencias y arreglo de errores, la función loop() debe lucir así:

void loop() {
  float combustible = analogRead(A0);  // Lectura de pin A0
  int porcentaje; // Declaracion variable para conversion a porcentaje el combustible
  float ubicacion = 1; // Lectura Ubicacion
  char context[30];
  
  porcentaje = map(combustible, 0,512, 0, 100); //funcion map para mostrar porcentaje de combustible
  
  client.addContext("lat", "1.2343");
  client.addContext("lng", "132.1233");
  client.getContext(context);
  
  client.add(VARIABLE_LABEL_1, porcentaje);
  client.add(VARIABLE_LABEL_2, ubicacion, context);
  
  if(client.send(DEVICE_LABEL)){
    Serial.println("Data sent to Ubidots sucessfully!");
  } 
   
  free(context);                                   
  delay(5000);                    
}

probe lo que me dijiste y funciono bien, tuve que usar otro chip si por que la linea claro no es tan buena en 2g

probe el cambio que me dijiste y sigue igual mandado el mismo mensaje, ahora lee el readme como me dices a ver si me falta algo

Hola @cnta1998,

Vi que tengo un error pues estaba llamando el método send() dos veces. Ya lo corregí en el mensaje anterior pero lo pongo acá también.

void loop() {
  float combustible = analogRead(A0);  // Lectura de pin A0
  int porcentaje; // Declaracion variable para conversion a porcentaje el combustible
  float ubicacion = 1; // Lectura Ubicacion
  char context[30];
  
  porcentaje = map(combustible, 0,512, 0, 100); //funcion map para mostrar porcentaje de combustible
  
  client.addContext("lat", "1.2343");
  client.addContext("lng", "132.1233");
  client.getContext(context);
  
  client.add(VARIABLE_LABEL_1, porcentaje);
  client.add(VARIABLE_LABEL_2, ubicacion, context);
  
  if(client.send(DEVICE_LABEL)){
    Serial.println("Data sent to Ubidots sucessfully!");
  }
   
  free(context);                                   
  delay(5000);                    
}

Adicionalmente, ¿podrías mostrar de nuevo lo que se imprime en el monitor serial?

payload:
Ubidots-Sim900/4.0.1|POST|BBFF-HecJ0KQYn0PnmepvPMfZGhPfOQ7cx7|gprs:gprs=>combustible:199.000000,ubicacion:1.000000$lat=1.2343$lng=132.1233|end

Sending data…
Checking Power status SIM900 module
Sim900 is Powered Off
Powering on SIM900
ese mensaje me sigue saliendo

Hola @cnta1998

¿Podrías por favor hacer lo siguiente?

  1. Localiza la carpeta donde tiene la librería GPRS de Ubidots. Debe estar en Documentos > Arduino > Librerias.
  2. Busca el archivo “UbiTcp.cpp”. Es este pero en tu versión local.
  3. Descomenta las líneas 507, 508, 522, 523. Adjunto imagen. image
  4. Vuelve a subir el código a el Arduino UNO con estos cambios y verificar los mensajes de debug en el Monitor Serial.

–David

Hola @dsr
ahora me sale asi

----------
payload:
Ubidots-Sim900/4.0.1|POST|BBFF-HecJ0KQYn0PnmepvPMfZGhPfOQ7cx7|gprs:gprs=>combustible:49.000000,ubicacion:1.000000$lat=1.2343$lng=132.1233|end
----------

Sending data...
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
Checking Power status SIM900 module
Sim900 is Powered Off
Powering on SIM900
AT
AT

OK
Module Powered ON
AT+CPIN?
AT+CPIN?

+CPIN: READY

OK
Sim Card Correctly installed
Initializing module...
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CIPMODE=0
AT+CIPMODE=0

OK
AT+CIPMUX=0
AT+CIPMUX=0

OK
Initialization Completed
Registering module to the mobile Network
AT+CGATT=1
AT+CGATT=1

ERROR
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CREG?
AT+CREG?

+CREG: 1,3

OK
AT+CGATT=1
AT+CGATT=1

ERROR
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CREG?
AT+CREG?

+CREG: 1,3

OK
AT+CGATT=1
AT+CIPSTATUS
AT+CREG?
AT+CGATT=1
AT+CIPSTATUS
AT+CREG?
AT+CGATT=1
AT+CIPSTATUS
AT+CREG?

repitiendo estos 3 ultimos
AT+CGATT=1
AT+CIPSTATUS
AT+CREG?

Hola, de acuerdo a la información del datasheet del fabricante, cuando obtienes un error al usar el comando AT-CGATT=1 significa que tu módulo no puede alcanzar la red GPRS, esto puede deberse a diversas causas, desde cobertura hasta problemas de hardware. Te recomiendo verificar directamente con el fabricante la causa de la falla.

Saludos.

Hola @cnta1998

Fuera de la respuesta de @jotathebest, que es válida puesto que el error no es como tal de la librería sino de la conexión a las red GPRS, puedes intentar también con ejemplo de la librería que usamos por debajo: TinyGSM, específicamente este: https://github.com/vshymanskyy/TinyGSM/blob/master/examples/HttpClient/HttpClient.ino

hola @dsr probé con ese ejemplo que me pasaste pero a cada rato me decía error al compilar estoy usando un arduino uno y otra pregunta que quería hacerte el chip si o si tiene que tener plan de datos activo o con tener una bolsa de megas bastaría para conectarse

Hola @dsr conecte con un chip de otra compañia me tomo señal sale este mensaje ahora y lo ultimo se repite infinito, pero en mi perfil aun no me refleja ningun dispositivo

payload:
Ubidots-Sim900/4.0.1|POST|BBFF-HecJ0KQYn0PnmepvPMfZGhPfOQ7cx7|gprs:gprs=>combustible:106.000000|end

Sending data…
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
Checking Power status SIM900 module
Sim900 is Powered Off
Powering on SIM900
AT
AT

OK
Module Powered ON
AT+CPIN?
AT+CPIN?

+CPIN: READY

OK
Sim Card Correctly installed
Initializing module…
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CIPMODE=0
AT+CIPMODE=0

OK
AT+CIPMUX=0
AT+CIPMUX=0

OK
Initialization Completed
Registering module to the mobile Network
AT+CGATT=1
AT+CGATT=1

OK
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CREG?
AT+CREG?

+CREG: 1,4

OK
AT+CGATT=1
AT+CGATT=1

OK
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CREG?
AT+CREG?

+CREG: 1,4

OK
AT+CGATT=1
AT+CGATT=1

OK
AT+CIPSTATUS
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CREG?
AT+CREG?

+CREG: 1,4

Existe alguna manera de crear de forma “manual” un dispositivo por que segun entendi la libreria de gprs esta presentando un problema al momento de incluirlos de manera automatica en la pagina

@dsr sigo con el problema para conectar el modulo GPRS, cree el equipo manualmente en la plataforma toma señal bien el equipo y nada que se refleja