¿Qué es GOBLIN 2?
GOBLIN 2 es una tarjeta de desarrollo diseñada para ser autónoma del “Internet de las Cosas", tiene un módulo para controlar la carga de una batería Li-Po de 3.7V a 4.2V, que se puede cargar a través de una celda solar o un Micro-USB. GOBLIN 2 es compatible con Arduino y ATMEL Studio, versátil en conectividad y listo para comunicación remota.
También cuenta con un microcontrolador ATMEGA328P, 5 puertos analógicos y 10 digitales, de los cuales solo 5 funcionan como PWM, también integra conectividad para cada protocolo RS-485 y salidas de voltaje de 24V, 5V y 3.3V que son ideales para sensores industriales o sensores con señal analógica/digital.
Su diseño para el “Internet de las Cosas” se debe al SIM5320A que incorpora un enlace Dual-BAND UMTS/HSDPA a 850/1900MHz y Quad-Band GSM/GPRS/EDGE a 850/900/1800/1900mhz, por lo que puede tener conectividad con servidores web a través de cualquier red celular.
Al agregar el módulo SIM5320A, está disponible en sus salidas para ser conectado a un teclado, micrófono/altavoces y USB para explotar la red celular, al alcance de sus necesidades e innovaciones.
En esta guía aprenderás cómo configurar el GOBLIN 2 para enviar datos a Ubidots.
Si deseas leer más sobre el hardware del GOBLIN 2, por favor visita el siguiente enlace.
Requisitos
Un GOBLIN 2
Una tarjeta SIM activa con un plan de datos
Cable MicroUSB
Configuración de hardware
El GOBLIN 2 tiene características increíbles, así que debes conocerlo bien para poder crear proyectos IoT increíbles en solo unos minutos.
Para comenzar, por favor ve a la "Guía rápida" del Equipo de VERSE Technology, y revisa la documentación paso a paso. ¡Es importante leerlo cuidadosamente para asegurarte de que todo esté perfecto!
Configuración de Ubidots
Primero, ve a tu cuenta de Ubidots. Si no tienes una, crea una aquí.
1.- Ve a la sección de dispositivos haciendo clic en la pestaña "Dispositivos".
2.- Crea un nuevo dispositivo, solo presiona el botón de signo más.
Una vez que el dispositivo esté creado, deberías ver algo como esto:
3.- Entra al dispositivo recién creado para agregar una nueva variable. Selecciona "Agregar variable".
Asigna un nombre a la variable, en este caso decidimos llamarla "sensor". Además, en el ícono de abajo podrás conocer el ID de la variable, lo necesitarás en el código.
4.- Además, necesitarás el TOKEN. Haz clic en tu "nombre de usuario" y selecciona Credenciales de API:
Copia y pega esto en tu código.
Configuración de Arduino
Como mencionamos antes, el GOBLIN 2 es compatible con Arduino y ATMEL Studio. En esta guía decidimos configurar el GOBLIN 2 con el IDE de Arduino.
Una de las preguntas comunes es "¿Qué placa debo usar?" ¡Muy simple! Solo selecciona el Arduino/Genuino UNO.
Te proporcionaremos un código de ejemplo para comenzar a enviar datos a Ubidots; si estás familiarizado o deseas explorar sobre ello, consulta nuestra referencia de API aquí.
Debes agregar algunos parámetros de tu cuenta de Ubidots al código, como el token y el ID de la variable, también necesitarás el APN de tu operador móvil. Ve al paso "Configuración de Ubidots" para saber dónde puedes encontrar los parámetros necesarios.
Para agregar el APN por favor ve a esta línea en el código y cámbiala por la de tu operador móvil:
NOTA: Asegúrate de la posición del "Interruptor 2", debe estar en la posición “PROGRAM” (deslizado hacia la derecha). ¡Eso es importante porque habilita el modo de programación para ATMEL-328P! Con esto, podemos comunicarnos con el microcontrolador desde la PC y cargar programas desde el IDE de Arduino.
Con el siguiente programa podrás enviar datos a la nube de Ubidots usando el ID de la variable:
#include <SoftwareSerial.h> SoftwareSerial SIM5320(5, 4); //RX, TX#define ONE_WIRE_BUS 10 //PIN DS18B20char BUFFER_USART; //BUFFER RX String token = "PUT_YOUR_TOKEN_HERE"; //TOKEN UBIDOTSString id = "PUT_VARIABLE_ID_HERE"; //ID VARIABLE UBIDOTSvoid setup() { pinMode(5, OUTPUT); //PIN ON SIM5320 SIM5320.begin(9600); SIM5320_ON(); //ON SIM5320 delay(10000); SETUP_SIM5320(); //START SIM5320}void loop() { WEB(); //SEND JSON UBIDOTS delay(15000); //SAMPLE TIME}///////////////////////////////////////////////////////////////////////////ISR (USART_RX_vect){ BUFFER_USART = UDR0; //READ THE BUFFER RX}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void WEB() { int LONG_JSON = 15; int SEND = 221; float temp = 20.0; SIM5320.println(F("AT+CIPOPEN=0,\"TCP\",\"industrial.api.ubidots.com\",80")); // delay(5000); SIM5320.print("AT+CIPSEND=0,"); // delay(50); SIM5320.println(SEND); // delay(600);/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SIM5320.print(F("POST /api/v1.6/variables/")); delay(50); SIM5320.print(id); delay(50); SIM5320.println(F("/values HTTP/1.1")); delay(50); SIM5320.println(F("Content-Type: application/json")); delay(50); SIM5320.print(F("Content-Length:")); delay(50); SIM5320.println(LONG_JSON); delay(50); SIM5320.print(F("X-Auth-Token: ")); delay(50); SIM5320.println(token); delay(50); SIM5320.println(F("Host: industrial.api.ubidots.com")); delay(50); SIM5320.println(""); /////////////////////////////////////////////////////////////// SIM5320.print("{\"value\":"); delay(10); SIM5320.print(temp,2); delay(50); SIM5320.println("}"); delay(50); SIM5320.write(0x1A); delay(5000); SIM5320.println(F("AT+CIPCLOSE=0")); delay(4000);}void SIM5320_ON() { digitalWrite(5, HIGH); delay(2000);// digitalWrite(5, LOW); delay(2000);}/////////////////////////////////////////////////////////////////////////////void SETUP_SIM5320(){ SIM5320.println(F("AT+CFUN=1")); //SIM5320 WORKING WITH ALL THE FEATURES delay(250); SIM5320.println(F("AT+CNMP=2")); //AUTOMATIC MODE delay(250); SIM5320.println(F("AT+CVAUXV=61")); //3.0V OUTPUT VOLTAGE delay(250); SIM5320.println(F("AT+CNBP=0xFFFFFFFF7FFFFFFF ")); //ALL BANDS delay(500); SIM5320.println(F("AT+CSQ")); //SIGNAL LEVEL delay(250); SIM5320.println(F("AT+CREG?")); delay(250); SIM5320.println(F("AT+COPS?")); delay(250); SIM5320.println(F("AT+CGSOCKCONT=1,\"IP\",\"MOBILE_OPERATOR_APN\"")); // e.g. Telcel MX: internet.itelcel.com - Movistar COL: internet.movistar.com.co delay(250); SIM5320.println(F("AT+CNSMOD?")); //CURRENT NETWORK delay(250); SIM5320.println(F("AT+CSOCKSETPN=1")); delay(250); SIM5320.println(F("AT+CIPMODE=0")); delay(250); SIM5320.println(F("AT+CNBP?")); delay(250); SIM5320.println(F("AT+NETOPEN")); delay(8000); SIM5320.println(F("AT+IPADDR")); //IP delay(500); SIM5320.println(F("AT+CGSN")); //IMEI delay(500);}
También si lo deseas, puedes usar este código de ejemplo para enviar datos a Ubidots usando la etiqueta del dispositivo y la variable:
#include <SoftwareSerial.h>#define token "PUT_YOUR_TOKEN_HERE" //TOKEN UBIDOTSSoftwareSerial SIM5320(5, 4); // RX, TXchar BUFFER_USART; // BUFFER RXString devLabel = "goblin-2"; // ETIQUETA DEL DISPOSITIVO - UBIDOTSString varLabel = "humidity"; // ETIQUETA DE LA VARIABLE - UBIDOTSint sensor = A0; // PIN DECLARADOvoid setup() { pinMode(5, OUTPUT); // PIN EN SIM5320 pinMode(sensor, INPUT); // PIN COMO ENTRADA SIM5320.begin(9600); SIM5320_ON(); // ENCENDER SIM5320 delay(10000); SETUP_SIM5320(); // INICIAR SIM5320}void loop() { WEB(); // ENVIAR JSON UBIDOTS delay(15000); // TIEMPO DE MUESTRA}///////////////////////////////////////////////////////////////////////////ISR (USART_RX_vect){ BUFFER_USART = UDR0; // LEER EL BUFFER RX}/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////void WEB(){ char buffer_tmp[8]; int LONG_JSON =13; // LONGITUD DEL JSON, e.i: {"humidity":} int SEND = 225; // NÚMERO DE CARACTERES A ENVIAR (ENCABEZADO + JSON) float hum = analogRead(sensor); // LECTURA DEL SENSOR ANALÓGICO dtostrf(hum, 4, 2, buffer_tmp); // CONVERTIR FLOAT A UN ARREGLO DE CARACTERES String hum_s = buffer_tmp; // CONVERTIR EL FLOAT HUM A STRING PARA PODER CALCULAR LA LONGITUD SEND += LONG_JSON + hum_s.length(); // NÚMERO DE CARACTERES A ENVIAR (ENCABEZADO + JSON + SENSOR FLOAT (DINÁMICO)) LONG_JSON += hum_s.length(); // LONGITUD JSON CARACTERES FIJOS + DINÁMICOS DEL SENSOR ANALÓGICO SIM5320.println(F("AT+CIPOPEN=0,\"TCP\",\"industrial.api.ubidots.com\",80")); // delay(5000); SIM5320.print("AT+CIPSEND=0,"); // delay(50); SIM5320.println(SEND); // delay(600); /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SIM5320.print(F("POST /api/v1.6/devices/")); delay(50); SIM5320.print(devLabel); delay(50); SIM5320.println(F(" HTTP/1.1")); delay(50); SIM5320.println(F("Host: industrial.api.ubidots.com")); delay(50); SIM5320.println(F("User-Agent: GOBLIN-2/1.0")); delay(50); SIM5320.print(F("X-Auth-Token: ")); delay(50); SIM5320.println(token); delay(50); SIM5320.println(F("Connection: close")); delay(50); SIM5320.println(F("Content-Type: application/json")); delay(50); SIM5320.print(F("Content-Length:")); delay(50); SIM5320.println(LONG_JSON); delay(50); SIM5320.println(""); /////////////////////////////////////////////////////////////// SIM5320.print("{\"" + varLabel + "\":" + hum_s + "}\r\n\r\n"); // {"humidity":} 13 CARACTERES ESTÁTICOS delay(50); SIM5320.write(0x1A); delay(6000);}void SIM5320_ON(){ digitalWrite(5, HIGH); // ENCENDER EL SIM CON UN PULSO ON-OFF (USANDO EL PIN 5) delay(2000);// digitalWrite(5, LOW); delay(2000);}/////////////////////////////////////////////////////////////////////////////void SETUP_SIM5320(){ SIM5320.println(F("AT+CFUN=1")); // SIM5320 FUNCIONANDO CON TODAS LAS CARACTERÍSTICAS delay(250); SIM5320.println(F("AT+CNMP=2")); // MODO AUTOMÁTICO delay(250); SIM5320.println(F("AT+CVAUXV=61")); // VOLTAJE DE SALIDA 3.0V delay(250); SIM5320.println(F("AT+CNBP=0xFFFFFFFF7FFFFFFF")); // TODAS LAS BANDAS delay(500); SIM5320.println(F("AT+CSQ")); // NIVEL DE SEÑAL delay(250); SIM5320.println(F("AT+CREG?")); delay(250); SIM5320.println(F("AT+COPS?")); delay(250); SIM5320.println(F("AT+CGSOCKCONT=1,\"IP\",\"CELLULAR_OPERATOR_APN\"")); // e.g. Telcel MX: internet.itelcel.com - Movistar COL: internet.movistar.com.co delay(250); SIM5320.println(F("AT+CNSMOD?")); // MOSTRAR LA RED delay(250); SIM5320.println(F("AT+CSOCKSETPN=1")); delay(250); SIM5320.println(F("AT+CIPMODE=0")); delay(250); SIM5320.println(F("AT+CNBP?")); delay(250); SIM5320.println(F("AT+NETOPEN")); delay(8000); SIM5320.println(F("AT+IPADDR")); // IP delay(500); SIM5320.println(F("AT+CGSN")); // IMEI delay(500);}
Una vez que el código esté cargado en el GOBLIN 2, abre el monitor serial para visualizar la respuesta de los comandos AT. Recuerda cambiar la posición del interruptor 2 a la posición “SIM_AT+” (deslizado hacia la izquierda). Esto habilita el modo de comunicación con el SIM5320A desde la PC, y se utiliza para enviar comandos AT+ directamente desde un monitor serial, como el IDE de Arduino, a la red celular.
Una vez que el led de STATUS NET esté parpadeando, deberías comenzar a recibir la respuesta en el monitor serial:
Ahora, estás recibiendo datos en tu cuenta de Ubidots:
Es tu momento de crear un increíble dashboard para visualizar tus datos. Si no sabes cómo hacerlo, echa un vistazo a este video.
Si deseas aprender más sobre el GOBLIN 2 y Ubidots, echa un vistazo a estos tutoriales en video para hacer un increíble proyecto IoT!