SIM900: Enviar datos a ThingSpeak

ThingSpeak es un plataforma Broker MQTT que permite recoger y almacenar datos de sensores en la nube y desarrollar aplicaciones IoT

ThingSpeak también ofrece aplicaciones que permiten analizar y visualizar tus datos en MATLAB y actuar sobre los mismos

El broker

Hará falta un protocolo (un lenguaje) usado para la comunicación machine-to-machine (M2M) en la»Internet of Things«

 

La Arquitectura MQTT

La arquitectura de MQTT sigue una topología de estrella, con un nodo central.

El broker es el encargado de gestionar la red y de transmitir los mensajes, para mantener activo el canal, los clientes mandan periódicamente un paquete (PINGREQ) y esperan la respuesta del broker (PINGRESP).

De esta manera diferentes dispositivos (con relativos «bajos recursos») pueden mantener conexiones estables, además que su código fue liberado y es regulado por la OASIS (Organization for the Advancement of Structured Information Standards).

Programa: enviar datos desde SIM900 a Thingspeak a través de MQTT

Ver código de fuente en Github

La comunicación con el módem GPRS se hará por medio de comandos AT

#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);

void setup()
{
ATGSM.begin(9600); //Velocidad de conexión con el módem GPRS
Serial.begin(115200);

Serial.println(" >>> ");

pinMode(LED_BUILTIN, OUTPUT);

//Turning modem On / Encender el módem
pinMode(9, OUTPUT);
digitalWrite(9, HIGH);
delay (999);
digitalWrite(9, LOW);

}

void loop()
{

Serial.println ("--------------- ------------- ------------------- ");
Serial.println ("------------------- Iniciando ciclo -------------");
Serial.println (" ------------- --------------- ------------------- ");

if (ATGSM.available()) Serial.write(ATGSM.read());

//Calcula temperaturas y humedades con función random
temp = temp + (0.1 * random(-5, 5));
humi = humi + (0.1 * random(-5, 5));
if (temp < 0) temp = 0.1; if (temp > 38) temp = 38;
if (humi <= 10) humi++;

Serial.print ("temp: "); Serial.print (temp);
Serial.print ("humi: "); Serial.println (humi);

mqttZentinella(temp, humi); //La función mqttZentinela enviará los datos que se le pasen en el argumento, en este caso, temperatura y humedad

}

void mqttZentinella(float a_temperatura, float b_humedad)
{
String temperatura = String (a_temperatura);
String humedad = String (b_humedad);

Serial.println (" --> --> --> mqttZentinella <-- <-- <-- ");

unsigned long startCycleMillis = millis();

//Para obtener más información, lea la documentación de SIM900
ATGSM.println("AT");
delay(500);

// CÓDIGO PIN
Serial.println("Verificación del código PIN");
ATGSM.println("AT+CPIN?"); //

delay(500);

// REGÍSTRESE EN LA WEB
Serial.println("Registrando");
ATGSM.println("AT+CREG?");
delay(500);

// LLAMADA DE NOMBRE
Serial.println("AT: AT+CGATT?");
ATGSM.println("AT+CGATT?");
delay(500);

// CERRAR LA CONEXIÓN
Serial.println("Cerrando conexión");
ATGSM.println("AT+CIPSHUT");
delay(1000);
Serial.println("");
Serial.println(" >> ESTADO DE CONEXIÓN >> ");

ATGSM.println("AT+CIPSTATUS");
delay(2000);

// INICIAR CONEXIÓN MULTI IP
ATGSM.println("AT+CIPMUX=0");
delay(2000);

showSerialData();

Serial.print("=> APN ");
ATGSM.println("AT+CSTT=\"internet\"");
// IMPORTANTE: internet este es el nombre APN de mi red
// Posiblemente tengas que cambiar esto porque cada red tiene diferentes de APN, además que alguas usuario y contraseña

delay(1000);

showSerialData();
Serial.print("Estado de la conexión GPRS: ");
ATGSM.println("AT+CIICR"); // Iniciar una conexión inalámbrica
delay(3000);

showSerialData();
Serial.print("Dirección IP local: ");
ATGSM.println("AT+CIFSR"); // Establecer una dirección IP local
delay(2000);

showSerialData();

ATGSM.println("AT+CIPSPRT=0");
delay(3000);

showSerialData();

Serial.println("CREANDO UNA CONEXIÓN TCP: ");
ATGSM.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",\"80\""); //Iniciar conexión
delay(6000);

showSerialData();

Serial.print(" > ENVÍO DE DATOS A TRAVÉS DE UNA CONEXIÓN TCP >");
ATGSM.println("AT+CIPSEND");//begin send data to remote server
delay(4000);
showSerialData();

// ---------------------
// Cadena para los campos de Thingspeak, necesita crear una nueva cadena para cada dato + flotante al comienzo del código

String str = "GET http://api.thingspeak.com/update?api_key=SLXXZIH8IBWUGJHX&field1=" + temperatura + "&field2=" + humedad;
// --------------------- //

ATGSM.println(str);
delay(4000);
showSerialData();

ATGSM.println((char)26); // response from server, in that case it will be entry nbr

delay(5000);
//time for response , ATTN: it depends form networ status (signal power, signal quality)

ATGSM.println();

showSerialData();

ATGSM.println("AT+CIPSHUT");// cerrando la conexión
delay(100);
showSerialData();

Serial.println("");
Serial.print("Tiempo del ciclo mqttZentinella: ");
Serial.print((millis() - startCycleMillis) / 1000);
Serial.println(" segundos");

}
void showSerialData()
{
while (ATGSM.available() != 0)
Serial.write(ATGSM.read());
/*
String buffer = "";
while (ATGSM.available() ) {
char c = ATGSM.read();
buffer += c;
}
return buffer;

*/

}

Te puede interesar...

La Internet de las Cosas (IoT)

Internet de las cosas es un concepto que se refiere a la interconexión digital de objetos cotidianos con Internet

Conectar placa SIM GSM900 con Arduino

El módulo «GPRS Shield Arduino Uno» cuenta con un microcontrolador SIM900 en una placa de desarrollo, Al igual que el Arduino que es otra placa de desarrollo. Tener un dispositivo con una tarjeta...

El microcontrolador

Un microcontrolador μC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria. Incluye en su interior las tres principales unidades funcionales de una computadora: unidad...

La placa de desarrollo

Son PCB con componentes electrónicos que ayudan a hacer circuitos, prototipos, inventos o experimentos. Incluso productos vendidos comercialmente tienen una placa de desarrollo dentro, pues es más económico así que desarrollar una placa...

¿Cómo programar CHIPS?

«Arduino IDE» es un programa de código abierto que se utiliza como herramienta para la programación de microcontroladores

HUE CAT

PROGRAMACIÓN Y DISEÑO

GDPR