Requisitos
Arduino IDE instalado
Una cuenta activa de Ubidots
X-NODE WIFI/BLE (ESP32) de Microside
Tabla de contenido
Configuración del ambiente de desarrollo Arduino
Lectura de los datos del sensor
Envío de datos a Ubidots
1. Configuración del ambiente de desarrollo Arduino
Microside cuenta con una guía sobre cómo programar el X-NODE WIFI/BLE usando el IDE Arduino, sin embargo, aquí se resumen los principales pasos.
1.1. Una vez descargado e instalado el IDE Arduino, haz clic en "File" → "Preferences", y luego ubica la sección "Additional Boards Manager URLs". Al hacer clic aparecerá una ventana como la siguiente:
Notarás que en tu interfaz el campo de texto está vacío. Allí se debe copiar la siguiente URL:
https://dl.espressif.com/dl/package_esp32_index.json
Luego de copiar la URL en el campo sugerido, la ventana debe lucir como la imagen de arriba. Hacer clic en "OK" para continuar.
1.2. A continuación ubique en la barra de tareas la sección "Tools" → "Board" → "Boards manager", como en la siguiente imagen, y haz clic en "Boards manager".
Se abrirá una ventana como la siguiente. Allí vamos a buscar la librería que usaremos. Busca "ESP32", selecciona la versión más reciente y luego haz clic en "Install".
1.3. Luego de instalar la librería, vamos a seleccionar el dispositivo que usaremos. Escoge la tarjeta "ESP32 Dev Module" y asegúrate de seleccionar el mismo puerto serial en donde está conectada la tarjeta.
PROTIP: por lo general los dispositivos conectados estarán en el puerto "/dev/ttyACM0" o "/dev/ttyUSB0" dependiendo de tu sistema operativo.
¡Ahora estamos listos para programar el X-NODE y enviar datos a Ubidots!
2. Lectura de los datos del sensor
XIDE tiene varios tipos de sensores externos que puedes agregar según los requisitos de tu proyecto. En este caso, usaremos una placa de desarrollo que tiene el sensor de temperatura y humedad SHT40 ya integrado.
El SHT40 de Sensirion usa la comunicación I2C para enviar los datos al microcontrolador. Afortunadamente, la empresa Adafruit ya ofrece una librería para leer los datos fácilmente, así que vamos a instalarla:
2.1. Instala la librería Adafruit SHT4X haciendo clic en "Tools" → "Manage libraries":
Luego busca el término "sht4x" para ubicar la librería e instala su última versión:
2.2. Haz lo mismo para la librería "Adafruit BusIO":
2.3. Prueba el funcionamiento usando el sketch "SHT4test":
Al compilar y subir el código, podemos ver los datos del sensor en la consola del puerto serial:
3. Envío de datos a Ubidots
Ubidots puede recibir datos de sensores mediante protocolos MQTT, HTTP, TCP o UDP. Para fortuna de todos los makers, el equipo de Ubidots ya ha creado librerías para el ESP32 que facilitan esta tarea. Como referencia, aquí te dejamos un link a los repositorios:
En este caso, vamos a usar el protocolo HTTP para enviar los datos a nuestra plataforma.
3.1. Instala la librería de Ubidots que permitirá enviar los datos a través del protocolo HTTP. Para ello debes ir a este enlace y descargar el repositorio como un archivo .ZIP. Una vez descargada la librería, es necesario agregarla a la IDE Arduino; para ello haz clic en "Sketch" → "Include Library" → "Add .Zip Library".
A continuación se abrirá una ventana como la siguiente. Allí debemos de buscar la librería recién descargada, que, por lo general, se aloja en la carpeta "Downloads" o "Descargas", luego haz clic en el botón "OK".
PROTIP: Para poder usar la librería de Ubidots recién instalada, es necesario reiniciar la IDE Arduino.
Para más información acerca de cómo instalar todas nuestras librerías, puedes consultar nuestra guía detallada en el siguiente link.
3.2. Usa la librería de Ubidots recién instalada para enviar los datos recopilados por el sensor hacia nuestra plataforma.
Pega el siguiente código en el IDE Arduino; este hace uso de la librería del SHT40 para leer los datos del sensor. Además, la librería de Ubidots se usa para enviar los datos recopilados a nuestra plataforma usando el protocolo HTTP.
Para que este programa funcione como es debido, es necesario cambiar algunas partes:
"YOUR UBIDOTS TOKEN"
: acá es necesario poner el token personal del usuario manteniendo las comillas. Para saber rápidamente cuál es el token, esta guía sirve de soporte."YOUR WIFI USERNAME"
: acá es necesario introducir el nombre de usuario de la red Wi-Fi que usará el X-NODE. Recuerda usar las comillas."YOUR WIFI PASSWORD"
: en esta sección se encuentra la contraseña de la red Wi-Fi a la que el X-NODE se conecta.
// This example sends data to multiple variables to
// Ubidots through HTTP protocol.
/****************************************
* Include Libraries
****************************************/
#include "Ubidots.h"
#include "Adafruit_SHT4x.h"
/****************************************
* Define Instances and Constants
****************************************/
const char* UBIDOTS_TOKEN = "YOUR UBIDOTS TOKEN"; // Put here your Ubidots TOKEN
const char* WIFI_SSID = "YOUR WIFI USERNAME"; // Put here your Wi-Fi SSID
const char* WIFI_PASS = "YOUR WIFI PASSWORD"; // Put here your Wi-Fi password
Ubidots ubidots(UBIDOTS_TOKEN, UBI_HTTP);
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
/****************************************
* Auxiliar Functions
****************************************/
// Put here your auxiliar functions
/****************************************
* Main Functions
****************************************/
void setup() {
Serial.begin(115200);
ubidots.wifiConnect(WIFI_SSID, WIFI_PASS);
ubidots.setDebug(true); // Uncomment this line for printing debug messages
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("Adafruit SHT4x test");
if (! sht4.begin()) {
Serial.println("Couldn't find SHT4x");
while (1) delay(1);
}
Serial.println("Found SHT4x sensor");
Serial.print("Serial number 0x");
Serial.println(sht4.readSerial(), HEX);
}
void loop() {
sensors_event_t humidity, temp;
uint32_t timestamp = millis();
sht4.getEvent(&humidity, &temp);// populate temp and humidity objects with fresh data
timestamp = millis() - timestamp;
Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" degrees C");
Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");
//PROTIP #1
//change "temperature" and "humidity" for the variables names that you wish
ubidots.add("temperature", temp.temperature); // Change for your variable name
ubidots.add("humidity", humidity.relative_humidity);
//PROTIP #2
//To set a label to your device, change ubidots.send() to ubidots.send("your-device-label")
bool bufferSent = false;
bufferSent = ubidots.send(); // Will send data to a device label that matches the device Id
if (bufferSent) {
// Do something if values were sent properly
Serial.println("Values sent by the device");
}
delay(5000);
}
PROTIP: De manera opcional, es posible cambiar los nombres de las variables y del dispositivo editando las partes del código marcadas con "PROTIP #1" y "PROTIP #2", respectivamente.
3.3. Para visualizar los datos enviados a Ubidots nos dirigimos a la sección de dispositivos en nuestra cuenta; allí podremos ver el dispositivo recientemente creado y con ingestión de datos. También podemos confirmar que el flujo de datos está funcionando al observar en la consola serial de Arduino una respuesta "201", que, según nuestra tabla de responses, significa una petición realizada con éxito a nuestra API.
De vuelta en nuestra cuenta de Ubidots, vemos los datos llegando en tiempo real en un Dashboard en el que hemos configurado las variables de temperatura y humedad que el dispositivo es capaz de medir.