Programar fácil con Arduino

Programar fácil con Arduino, entiende cómo funciona el mundo.

  • Blog
  • ¿Quién soy?
  • Podcast
  • Curso Arduino [GRATIS]
  • Curso Domótica [GRATIS]
  • Acceder
Usted está aquí: Inicio / ESP8266 / ThingSpeak y ESP8266

ThingSpeak y ESP8266

Charly Pascual

Si tuviera que resumir en una línea que es ThingSpeak te diría que es una plataforma para ahorrarte tiempo. Como todo lo que hay en la nube (o pretender ser). En el 2015 había 7, ahora hay 700 (por poner una magnitud), ahorrar código es ganar tiempo lo que tiene mucho valor, el tiempo es oro.

ThingSpeak es un ejemplo de esas plataformas que se han hecho un hueco en este mundillo. Trasladar la responsabilidad del tratamiento de datos es una opción para dedicarte a lo que te gusta que puede ser programar Arduinos y ESPs.

Pero lo que de verdad sorprende de ThingSpeak es su facilidad de uso, aquí los señores de MathWorks se lo han currado, créeme lo que te voy a decir, se tardan 10 minutos en darse de alta y crear un canal (la caja donde se almacenan los datos) y otros 15 en adecuar un código funcional que ya tengas escrito con datos de sensores.

Este artículo va justamente de eso, que veas la facilidad de uso. He simplificado al máximo la placa a utilizar, el código y los datos a subir a la nube, para centrarnos en ThingSpeak.

Adelante.

Indice de contenidos

  • 1 ¿Qué es ThingSpeak?
  • 2 ¿Cómo funciona ThingSpeak?
  • 3 Ejemplo con ThingSpeak y ESP8266
  • 4 Resumen sobre ThinkSpeak
ThingSpeak

¿Qué es ThingSpeak?

ThingSpeak es una plataforma de Análisis de datos para Internet de las Cosas IoT, pero podría analizar cualquier tipo de dato numérico, está en la nube y te permite de una manera muy intuitiva agregar y visualizar datos.

Puedes hacer más cosas, si subes tu propio código, aunque, no va a ser nuestra opción, a no ser que seas un monstruo en MATLAB. Es el lenguaje que hace la magia en ThingSpeak.

Algunas características:

  • Configura fácilmente los dispositivos para enviar datos usando los protocolos populares de IoT.
  • Visualiza los datos de tu sensor en tiempo real.
  • Datos agregados bajo demanda de fuentes de terceros.
  • Utiliza la potencia de MATLAB para darle sentido a tus datos IoT.
  • Ejecuta tus análisis de IoT automáticamente en función de los horarios o eventos.
  • Prototipado y creación de sistemas IoT sin configurar servidores o desarrollar software web.
  • Actúa automáticamente sobre tus datos y se comunica contigo empleando servicios de terceros como Twilio® o Twitter®.

Si te resulta engorroso, construirte un entorno de análisis y visualización de datos, esta es una opción chula, fácil de implementar, lo verás en este artículo.

Si eres un desarrollador y creas páginas web, por ejemplo, es muy fácil añadir estos gráficos en tu página.

Tiene una API para almacenar y recuperar (escribir y leer) datos usando el protocolo HTTP.

Podremos subir datos desde cualquier sensor conectado a un Arduino, ESP32, ESP8266, Raspberry Pi y más, mediante una librería disponible para cada dispositivo y comunicarse con ThingSpeak en la nube, vía conexión HTTP o MQTT.

¿Es seguro este tráfico de datos?

Soporta TLS que permite el cifrado de tu transferencia de información entre dos puntos, tu dispositivo y ThingSpeak.

Una vez los datos estén subidos a ThingSpeak puede acceder a ellos a través de cualquier navegador (recomiendan Google Chrome) y tanto las Cookies, Pop-Ups y JavaScript deben estar activadas y lógicamente una conexión a Internet.

¿Es gratis?

Si y no, para nosotros usuarios domésticos que nos gustaría ver nuestros datos gráficamente sí que lo es, con alguna reserva que te detallo.

Tu opción es la licencia FREE que te permite hasta 3 millones de mensajes/año o 8200 mensajes/día. La siguiente opción personal es la licencia HOME que multiplica por 10 casi todos los conceptos.

Las restricciones que tiene la versión FREE abarca otros puntos importantes:

  • El límite en el intervalo de envío de mensajes: entendiendo por mensajes cualquier tipo de dato que tú quieras subir a la nube de ThingSpeak, en la versión FREE son 15 segundos, este es tu máximo intervalo.
  • Número de Canales: los channels, ThingSpeak los ha llamado canales como los podía haber llamada cajas. Define una comunicación en la que se puede subir datos, que se agrupan, almacenan, analizan y finalmente publican para poder consumirlos a través de un simple navegador.
  • En la versión FREE el límite son 4 canales, la recomendación es que cada dispositivo tenga su canal particular y efectivamente como estas pensando tenemos a la vista un problema de crecimiento en el futuro.
  • Con la versión FREE solo se pueden compartir 3 canales con el público.

¿Cómo funciona ThingSpeak?

Parte ThingSpeak

  • Primero debes registrarte en la web de ThingSpeak.
  • Configurar un canal (channel). Esta parte es muy importante, porque define los datos que voy a recibir. Cada canal admite 8 campos de datos, 8 posibles datos que vas a poder subir a través de este canal.
    En este artículo voy a subir datos de latencia y calidad de una conexión wifi, pero podrían ser cualquiera, por ejemplo:
    • Temperatura
    • Humedad
    • Presión barométrica
    • Velocidad del viento
    • Dirección del viento
    • Lluvia
    • Nivel de luz
    • Nivel de batería
  • Una vez creado el canal, los datos que necesitas para transferir información desde nuestro dispositivo, son el Channel ID y la APIKeys, quédate con estos dos nombres.

Parte Dispositivo

  • Wemos D1 mini: es un ESP8266 donde la empresa/marca Lolin/Wemos ha encontrado un filón, ya que ha creado a su alrededor un monton de zócalos (shields), donde es posible añadirle funcionalidades sin gastar una gota de estaño, es mi favorito. Desde este dispositivo vamos a enviar datos a la nube de ThingSpeak.
  • Los datos:
    • Latencia, ping al DNS de Google que es 8.8.8.8, para medir la latencia que es el tiempo en milisegundos de lo que tarda una señal/paquete en ir al DNS de Google y volver a mi dispositivo.
    • Intensidad de la señal WiFi en dBm.
  • Librerías para nuestro Wemos D1 mini ESP8266
    • ESP8266WiFi: vamos a enviar datos a una nube de internet, necesitamos un cliente HTTP.
    • ESP8266Ping: una librería muy sencilla para hacer ping tanto a IP como HOST y que nos devuelve la latencia en milisegundos. Este es su contenedor en GitHub.
    • ThingSpeak: esta librería está desarrollada por MathWorks que es la empresa que esta detrás de ThingSpeak, en su contenedor de GitHub tienes toda la información. Nosotros añadiremos la librería desde el propio IDE Arduino.
    • Por último, un temporizador que nos gestiona la extracción de datos cada 15/20 segundos, aquí voy a utilizar la función millis().

El resumen: utilizando un Wemos D1 configurado en nuestro IDE Arduino, capturo cada 15/20 segundos los datos de latencia e intensidad wifi y los envío a ThingSpeak gracias a una librería desarrollada por la misma MathWorks. Previamente, te has dado de alta en ThingSpeak y configurado un canal. Una vez se empiece a subir datos, podrás visualizarlos vía la web de ThingSpeak.

Este es nuestro mapa

Ejemplo con ThingSpeak y ESP8266

Ya debes de tener claro la operativa. Si te parece vamos a empezar con la parte del ESP8266 y la extracción de datos que luego subiremos a ThingSpeak.

Ahora sí, empezamos a ensuciarnos las manos.

Paso 1. Comprar el dispositivo Wemos D1 mini

Tengo a mano un LOLIN D1 Mini V3.1.0, lo compré en el Lolin Official Store que tienen en AliExpress, pero ya no tiene ese mismo modelo, tienen el V4.

El V3 se puede encontrar en Amazon y también en AliExpress junto con otros modelos.

Paso 2. Configurar el dispositivo Wemos D1 mini ESP8266 en el IDE Arduino

Si no has trabajado nunca con un ESP8266 tienes que añadir la URL para tarjetas adicionales.

La URL es esta http://arduino.esp8266.com/stable/package_esp8266com_index.json

La añades en el IDE de Arduino, PREFERENCIAS + Gestor de URLs Adicionales de Tarjetas

Queda así:

Seleccionas la tarjeta en el menú de Herramientas + LOLIN(WEMOS) D1 R2 & mini

Abre un Archivo + Nuevo, el código por defecto nos viene bien, solo vas a probar que tienes comunicación con el ESP8266.

1
2
3
4
5
6
7
8
9
void setup() {
  // put your setup code here, to run once:
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}

Eliges el puerto correcto Herramientas + Puerto + depende de tu sistema operativo /dev/xx para Linux, Mac y COMx para los usuarios de Windows.

Y finalmente subimos el programa a la tarjeta, debe de salirte algo parecido a esto:

Ya tienes conectado correctamente el ESP8266 en tu IDE de Arduino, vamos a añadirle código.

Paso 3. Programación de los datos a subir a ThingSpeak

Acuérdate, 2 tipos de datos que vamos a subir a ThingSpeak.

  • Ping al servidor DNS de Google, que es una prueba muy típica cuando queremos comprobar si estamos conectados a Internet, mediremos la latencia que son los milisegundos que tarda en volver un paquete al DNS de Google con esta herramienta que existe en todos los sistemas operativos.
  • Intensidad de la señal Wifi RSSI en dBm (decibelios relativos al milivatio), lo que nos indicara la calidad de la cobertura. Os paso esta tabla:
Intensidad de la señalCalificadorUsos adecuados
-30 dBmExcelenteEsta es la máxima intensidad de señal alcanzable y será apropiada para cualquier situación de uso.
-50 dBmExcelenteEste excelente nivel de señal es adecuado para todos los usos de la red.
–65 dBmMuy buenoRecomendado para smartphones y tablets.
-67 dBmMuy buenoEsta intensidad de señal será suficiente para voz sobre IP y streaming de vídeo.
-70 dBmAceptableEste nivel es la intensidad mínima de la señal requerida para asegurar una entrega de paquetes fiable y le permitirá navegar por la web e intercambiar correos electrónicos.
-80 dBmMaloPermite la conectividad básica, pero la entrega de paquetes no es fiable.
-90 dBmMuy maloUn ruido que inhibe la mayoría de las funciones.
-100 dBmPeorRuido total.

Bien, vamos a por el código.

Lo único que debes de tener en cuenta es que la librería ESP8266Ping no viene por defecto en el IDE de Arduino tienes que instalarla.

Muy fácil, vete a su contenedor GitHub y descárgate la librería en un fichero ZIP.

Ten cuidado porque existe otra librería que se llama ESP8266-ping que incluye la librería Pinger.h que no es la que se utiliza aquí.

En la pagina web de GitHub clic en CODE + Download ZIP.

Se descarga este fichero ESP8266Ping-master.zip, puedes renombrarlo ESP8266Ping.zip

Ya solo queda incluirlo en el IDE de Arduino en Programa + Incluir Librería + Añadir biblioteca .ZIP, buscamos el fichero ESP8266Ping.zip con el explorador.

Y si todo te ha ido bien debe de aparecer ejemplos de código con esta librería en Archivo + Ejemplos.

Vamos al código, muy sencillo, lo he simplificado al máximo, simplemente cambiando los parámetros de tu conexión Wifi debe de funcionar. He comentado el código para que no te pierdas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
    CharlyPascual
    Este codigo se conecta a tu red wifi y recoge dos tipos de datos:
 
      1.- Realiza un ping a la IP 8.8.8.8 que es el DNS de Google ( podria ser cualquier IP)
      y recoge la latencia en milisegundos con la libreria ESP82666Ping.
      Esta libreria puede descargarse desde aqui https://github.com/dancol90/ESP8266Ping
      
      2.- Ejecuta el metodo WiFi.RSSI() de la libreria ESP8266WiFi para darnos en dBm la
      calidad de la cobertura Wifi del sitio donde estes
*/
 
#include <ESP8266WiFi.h>
#include <ESP8266Ping.h>
 
// Configuracion Wifi, adaptalo a tu casa
const char* ssid     = "TU_SSID";
const char* password = "TU_CLAVE";
 
// IP a la que vas a realizar el ping (puedes poner cualquiera), pero separado por comas
// y no por puntos
const IPAddress remote_ip(8, 8, 8, 8);
 
void setup() {
  Serial.begin(115200);
 
  // Empezamos conectandonos a la red WiFi
  Serial.println();
  Serial.println();
  Serial.print("Conectando ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  //Indicamos los datos de conexión para el monitor serial
  Serial.println("");
  Serial.println("Conectado WiFi");
  Serial.println("Direccion IP: ");
  Serial.println(WiFi.localIP());
  //Indicamos a la direccion IP a la que vamos a ejecutar el ping
  Serial.print("Pinging ip ");
  Serial.println(remote_ip);
}
 
void loop() {
  //Ejecutamos el metodo para saber la intensidad Wifi y lo asignamos a la variable rssi
  long rssi = WiFi.RSSI();
  Serial.print("RSSI: ");
  Serial.print(rssi);
  Serial.println(" dBm");
 
  //Ejecutamos el metodos para realizar el ping y el tiempo en milisegundos, lo
  //asignamos a la variable avg_time_ms
  if (Ping.ping(remote_ip)) {
    int avg_time_ms = Ping.averageTime();
    Serial.println("ping OK!!");
    Serial.print("Tiempo ");
    Serial.print(avg_time_ms);
    Serial.println(" ms");
  } else {
    Serial.println("Error :(");
  }
  //Paramos 15 segundos
  delay(15000);
}

Subimos el código y aquí puedes ver los resultados desde el Serial Monitor del IDE Arduino.

Perfecto, esta parte está cerrada, ya tenemos a mano los datos que queremos subir a ThingSpeak.

Paso 4. Configurar el canal de ThingSpeak

Vas a crear una cuenta en ThingSpeak y configurar un canal. Su creación es muy simple, en un par de clics y rellenando una serie de datos lo tendremos disponible sin mayor complicación.

Creamos la cuenta en su página web pulsando en el botón Get Started For Free.

Clic en Create one!

Rellenas los datos que se piden

Verás un aviso, simplemente haz clic en la cajita si no tienes cuenta en MATLAB.

Te pide verificar tu correo electrónico y continuamos.

Añadimos una clave a nuestra cuenta, aceptamos el Acuerdo de Servicio (que nunca leemos) y continuamos.

Y termina el alta de la cuenta. Hasta aquí la parte alta en ThingSpeak.

Vamos a crear un canal para nuestros datos, clic en New Channel.

Rellena los datos, aparte del nombre y descripción del canal, lo que te interesa son los 8 campos de datos (Field 1….8). Tú en este caso solo vas a utilizar 2, que son los dos que debes de rellenar y clic en Save Channel (abajo del todo en la página).

Y ya lo tienes, configurar el entorno de ThingSpeak es muy sencillo.

De esta pantalla quedaros con 2 parámetros que son necesarios para subir datos desde tu Wemos D1 mini ESP8266 .

  • Channel ID : 1641546
  • API Keys : Write API Key C018D0EVH8HDDG0M (en la pestaña API Keys)

Y por el mismo precio os explico brevemente lo que estás viendo en esta pantalla:

  • Private View: muestra la vista privada. Esta vista solo la puedes ver tú. Aquí se verán los datos de latencia e Intensidad que se envíen desde el Wemos ESP8266 en dos gráficas. Luego veremos cómo configurar estas gráficas.
  • Public View: si el canal es público, en esta pestaña te muestra cómo se ve desde fuera. Puede ser interesante tener un canal público para compartir con amigos o clientes (en el caso de utilizar una licencia comercial).
  • Channel Settings: aquí encontrarás la información del canal para poder modificarla. Puedes cambiar el nombre, la descripción o los campos que quieres emplear de este canal.
  • Sharing: en esta opción puedes seleccionar si el canal es privado (por defecto) o si lo quieres hacer público.
  • API Keys: algunos servicios requieren de unas claves para enviar y recibir datos. ThingSpeak es uno de ellos. Luego necesitaremos entrar en este apartado para obtener las API Keys de escritura.
  • Data Import/Export: es la pestaña donde podrás importar o exportar datos de forma masiva.

Paso 5. Configurar Wemos ESP8266 para enviar datos a ThingSpeak

Un apunte, he modificado el código para que en vez de utilizar la función delay() utilices como temporizador la función millis(). Esta función nos permite acceder al reloj interno de Wemos D1 devolviendo el valor en milisegundos.

Esta es la actualización del código, el ejemplo vale para temporizar cualquier ejecución de tu programa. En este caso, tienes que modificar la variable intervaloEnvio indicando el tiempo en milisegundos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//Temporizador ThingSpeak 15seg
unsigned long ultimoTiempo = 0; // almacena la ultima vez que se lanzo nuestro evento
unsigned long intervaloEnvio = 15000; //intervalo de ejecucion
 
void loop() {
  // Comprobar si se ha dado la vuelta
  if (millis() < ultimoTiempo)
  {
    // Asignar un nuevo valor
    ultimoTiempo = millis();
  }
  if ((millis() -  ultimoTiempo) > intervaloEnvio)
  {
    // Marca de tiempo para el siguiente intervalo
    ultimoTiempo = millis();
 
    //Ejecutamos el metodo para saber la intensidad Wifi y lo asignamos a la variable rssi
    long rssi = WiFi.RSSI();
    Serial.print("RSSI: ");
    Serial.print(rssi);
    Serial.println(" dBm");
 
    //Ejecutamos el metodos para realizar el ping y el tiempo en milisegundos, lo
    //asignamos a la variable avg_time_ms
    if (Ping.ping(remote_ip)) {
      int avg_time_ms = Ping.averageTime();
      Serial.println("ping OK!!");
      Serial.print("Tiempo ");
      Serial.print(avg_time_ms);
      Serial.println(" ms");
    } else {
      Serial.println("Error :(");
    }
  }
}

Volvamos al tajo, la parte de extracción de datos ya la tienes hecha, también hemos mejorado la parte del intervalo de tiempo, acuérdate que la versión FREE que vamos a utilizar solo nos permite envío de datos cada 15 segundos.

Vamos a añadir la parte de ThingSpeak, lo primero que debes hacer es cargar la librería que ThingSpeak ha desarrollado para IoT.

Para ello solo la tienes que buscar en el Administrador de librerías del IDE de Arduino, clic en Herramientas + Administrador de Bibliotecas, rellenas el cambo de búsqueda y clic en Instalar.

Te cuento como va a ir esto:

Incluimos la librería ThingSpeak en el código.

1
#include "ThingSpeak.h"

Indicamos los datos de acceso a tu canal ThingSpeak

1
2
3
//Datos acceso Canal ThingSpeak
unsigned long myChannelNumber = TU_1641546;
const char * myWriteAPIKey = "TU_C018D0EVH8HDDG0M";

Creamos un objeto de la clase WifiClient, objeto que utilizara la clase ThingSpeak para crear la petición HTTP y enviar la info a la nube de ThingSpeak.

1
WiFiClient  client;

Inicializamos la comunicación con ThingSpeak.

1
ThingSpeak.begin(client);  // Inicializamos ThingSpeak

Almacenamos los datos a enviar a ThingSpeak.

Acuérdate que hay un máximo de 8 campos de datos en variables de la clase ThingSpeak, como vamos a enviar dos tipos de datos tendremos dos líneas de código similares esta:

1
ThingSpeak.setField(numero, valor);

Enviamos datos a ThingSpeak con los datos del canal que configuramos.

numeroCanal -> Channel ID

writeAPIKey -> APIKeys

1
ThingSpeak.writeFields(numeroCanal, writeAPIKey);

Ahora toca modificar el código, creo que ya te hueles un poco por donde van a ir los tiros ¿te atreves a seguir por tu cuenta?. Es una buena práctica enfrentarse solo a un problema, si no, sigue leyendo.

Aqui lo tienes completo, comentado para que no te pierdas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
    CharlyPascual
    Este codigo se conecta a tu red wifi y recoge dos tipos de datos
 
      1.- Realiza un ping a la IP 8.8.8.8 que es el DNS de Google (podría ser cualquier IP)
      y recoge la latencia en milisegundos con la libreria ESP82666Ping.
      Esta libreria puede descargarse desde aqui https://github.com/dancol90/ESP8266Ping
 
      2.- Ejecuta el metodo WiFi.RSSI() de la libreria ESP8266WiFi para darnos en dBm la
      calidad de la cobertura Wifi del sitio donde estes
 
      3.- Gestiona a traves de la libreria ThingSpeak la subida de los valores de los datos
      anteriores a  tu canal en la nube de ThingSpeak
*/
 
#include <ESP8266WiFi.h>
#include <ESP8266Ping.h>
#include "ThingSpeak.h"
 
//Configuracion Wifi, adaptalo a tu caso
const char* ssid     = "TU_SSID";
const char* password = "TU_CLAVE";
WiFiClient  client;
 
//Datos acceso Canal ThingSpeak
unsigned long numeroCanal = 1641546;
const char * WriteAPIKey = "C018D0EVH8HDDG0M";
 
//Temporizador ThingSpeak XXseg
unsigned long ultimoTiempo = 0; // almacena la ultima vez que se lanzo nuestro evento
unsigned long intervaloEnvio = 20000; // 20 segundos
 
int avg_time_ms; // variable global
//IP a la que vas a realizar el ping (puedes poner cualquiera)
const IPAddress remote_ip(8, 8, 8, 8);
//const char* remote_ip = "www.google.com"; // ejemplo con nombre de dominio
 
void setup() {
  Serial.begin(115200);
 
  // Empezamos conectandonos a la red WiFi
  Serial.println();
  Serial.println();
  Serial.print("Conectando ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  //Indicamos los datos de conexión para el monitor serial
  Serial.println("");
  Serial.println("Conectado WiFi");
  Serial.print("Direccion IP: ");
  Serial.println(WiFi.localIP());
  Serial.print("Pinging ip "); // Indicamos a la direccion IP a la que vamos a ejecutar el ping
  Serial.println(remote_ip);
  ThingSpeak.begin(client);  // Inicializamos ThingSpeak
}
 
void loop() {
  // Comprobar si se ha dado la vuelta
  if (millis() < ultimoTiempo)
  {
    // Asignar un nuevo valor
    ultimoTiempo = millis();
  }
  if ((millis() -  ultimoTiempo) > intervaloEnvio)
  {
    // Marca de tiempo para el siguiente intervalo
    ultimoTiempo = millis();
 
    // Ejecutamos el metodo para saber la intensidad Wifi y lo asignamos a la variable rssi
    long rssi = WiFi.RSSI();
    Serial.print("RSSI: ");
    Serial.print(rssi);
    Serial.println(" dBm");
 
    // Ejecutamos el metodos para realizar el ping y el tiempo en milisegundos, lo
    // asignamos a la variable avg_time_ms
    if (Ping.ping(remote_ip)) {
      avg_time_ms = Ping.averageTime();
      Serial.println("ping OK!!");
      Serial.print("Tiempo ");
      Serial.print(avg_time_ms);
      Serial.println(" ms");
    } else {
      Serial.println("Error :(");
    }
    // Tenemos dos variables con son los datos a subir a ThingSpeak
    // rssi : mide la intensidad de la señal Wifi
    // avg_time_ms : mide la media de 5 ping
    ThingSpeak.setField(1, rssi);
    ThingSpeak.setField(2, avg_time_ms);
 
    // subimos los datos a nuestro canal en ThingSpeak
    //200 es el codigo tipico de una transmision OK en el protocolo HTTP
    int x = ThingSpeak.writeFields(numeroCanal, WriteAPIKey);
    if (x == 200) {
      Serial.println("Canal actualizado.");
    }
    else {
      Serial.println("Problema actualizando Canal, HTTP error code " + String(x));
    }
  }
}

La salida del Serial Monitor.

El resultado de todo nuestro trabajo.

Resumen sobre ThinkSpeak

El código tiene recorrido, para ser óptimo debe de tener una mejor gestión de errores, podríamos utilizar la librería Ticker para gestionar el temporizador y por supuesto añadirle sensores de todo tipo.

Pero como has podido ver, no tiene mucho misterio, sobre todo la parte ThingSpeak, pero si profundizas, el tratamiento de los datos que puede hacerse desde ThingSpeak, es brutal. Incluso tiene un conector para que recibas mensajes a tu cuenta de Twitter.

La versión FREE tiene limitaciones que se le pueden dar una vuelta, por ejemplo, tengo 4 ESP8266 con mediciones de temperatura y humedad ¿podría incluirlas en un único canal?

Yo creo que si, no lo he probado, pero si logro sincronizar los relojes de cada uno de los ESP8266 puedo escribir en mi canal cada 15 segundos utilizando números de campo diferentes desde cada ESP8266. Esto se puede hacer con un cliente NTP.

El servicio NTP (Network Time Protocolo) se emplea comúnmente en todos los sistemas informáticos que deban estar sincronizados a nivel horario, en nuestro caso para los Arduinos y ESPxx existe librerías que nos pueden dar este servicio. Si buscas por NTP en el gestor de librerías del IDE Arduino, lo verás.

Es un poco rebuscado, pero seguro que no soy el primero que lo piensa, te cuento: 4 canales por 8 campos por canal, son 32 campos/datos que puedes subir si no eres muy exigente con los intervalos, un ejemplo con 8 campos distribuidos por cada ESP8266:

  • ESP8266_1 — envio a los seg. 15 — campo 1 y 2
  • ESP8266_2 — envio a los seg. 30 — campo 3 y 4
  • ESP8266_3 — envio al os seg. 45 — campos 5 y 6
  • ESP8266_4 — envio a los seg. 60 — campos 7 y 8

Cada minuto lanzarías 4 paquetes de datos a ThingSpeak, uno desde cada ESP8266 y separados 15 segundos entre ellos, al mismo Channel ID y Write API Key. Lo dejo como una posible práctica.

Si no, la versión HOME tiene buena pinta, por 75 € anuales tienes 10 canales a tu disposición, todo depende de tus intereses, ahí no puedo entrar.

Gracias por tu tiempo que también es oro.

Gracias a Depositphotos por la cesión de las imágenes.

integraciones de Home Assistant

Integraciones de Home Assistant

En este tutorial voy a hablar de las integraciones de Home Assistant pero antes déjame contarte la historia de Jack, un norteamericano de bien, de los … [+ info...]

dispositivos inteligentes para el hogar

Tipos de dispositivos inteligentes para el hogar

En este artículo voy a hablar de los dispositivos domóticos o dispositivos inteligentes para el hogar que pueden ser integrados dentro de Home … [+ info...]

osciloscopios

Osciloscopio para proyectos con Arduino

Una imagen vale más que mil palabras. Seguro has escuchado esta frase alguna vez y es probable que en la mayoría de las ocasiones lo que dice sea … [+ info...]

Copyright © 2023 · Programar Fácil · Aviso legal

Utilizamos cookies propios y de terceros para mejorar nuestros servicios y experiencia de usuario. Si continua navegando, consideramos que acepta su uso.Aceptar Política de privacidad y cookies
Política de cookies

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Siempre activado
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Non-necessary
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
GUARDAR Y ACEPTAR