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);
}
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.
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);
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í:
----------
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.
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
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