Esta práctica ya la he realizado utilizando LUA pero en este artículo voy a programar el módulo ESP8266 con el IDE de Arduino. El esquema es sencillo:
Yo dispongo de este módulo que solo dispone de tres conectores pero no he encontrado su esquema:
Si deseas más información sobre estos módulos consulta este artículo
Para programarlo utilizo la librería SimpleDHT11 que puedes instalar haciendo click en Programa - Incluir librerías - Gestionar librerías. Buscamos dht y elegimo SimpleDHT:
Para añadirlo a nuestro proyecto:
#include <SimpleDHT.h>
Hemos conectado el pin DATA del módulo DHT11 en el puerto D0 del módulo ESP8266 que corresponde con GPIO16.
int pinDHT11 = 16;A continuación declaramos una instancia de la librería para comunicarnos con el sensor:
SimpleDHT11 dht11;
En loop definimos dos variables tipo byte t y h:
byte t = 0;
byte h = 0;
Para leer los datos del sesor utilizamos:
dht11.read(pinDHT11, &t, &h, NULL)
y luego la mostramos por el puerto serie. El código completo es el siguiente:
#include <SimpleDHT.h>
int pinDHT11 = 16; // Puerto D0 entrada de datos
SimpleDHT11 dht11; // Modelo de sensor
void setup() {
Serial.begin(9600);
delay(500);
}
void loop() {
byte t = 0;
byte h = 0;
if (dht11.read(pinDHT11, &t, &h, NULL)) {
Serial.print("Error en la lectura.");
return;
}
// Muestra por el puerto serie las medidas obtenidas
Serial.print("Humedad relativa: ");
Serial.print((int)h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print((int)t);
Serial.println(" *C");
//El sensor realiza la lectura cada 20 segundos
delay(20000);
}
Con este código obtenemos las siguientes lecturas:
Publicación en Thingspeak
ThingSpeak es una plataforma Open Source para conectar productos y servicios al Internet de las Cosas (IoT). Permite a los desarrolladores interactuar con los dispositivos utilizando tecnologías Web estándar.
En este artículo obtendrás más información de esta plataforma y de cómo darte de alta.
Vamos instalar la librería de ThingSpeak en el IDE de arduino. Hacemos click Programa - Incluir librería - Gestionar Librerías y en búsqueda escribimos thingspeak
Hacemos click en instalar y listo. Ahora, para añadir la librería a nuestro proyecto:
#include <ThingSpeak.h>
Además, incluimos la librería ESP8266WiFi:
#include <ESP8266WiFi.h>
Definimos los valores de nuestra wifi y creamos una instancia de WiFiClient:
const char* ssid = "WLAN_E17C";
const char* password = "ced0ccb58c84e525e35f";
WiFiClient client;
Ademas definimos los valores de nuestro canal en ThingSpeak:
unsigned long myChannelNumber = NUMERO_CANAL;
const char* myWriteAPIKey = "API_kEY";
Además, incluimos la librería ESP8266WiFi:
#include <ESP8266WiFi.h>
Definimos los valores de nuestra wifi y creamos una instancia de WiFiClient:
const char* ssid = "WLAN_E17C";
const char* password = "ced0ccb58c84e525e35f";
WiFiClient client;
Ademas definimos los valores de nuestro canal en ThingSpeak:
unsigned long myChannelNumber = NUMERO_CANAL;
const char* myWriteAPIKey = "API_kEY";
En NUMERO_CANAL y API_KEY teneis que introducir los datos de vuestro canal
En setup() establecemos la conexión wifi e inicializamos ThinkSpeak:
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { // wait for WiFi
delay(500);
Serial.print(".");
}
ThingSpeak.begin(client);
Para enviar los datos de temperatura y humedad a ThingSpeak utilizamos:
ThingSpeak.setField(1,(int)t);
ThingSpeak.setField(2,(int)h);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
Si solo necesitamos enviar un dato (por ejemplo la temperatura) podríamos utilizar:
ThingSpeak.writeField(myChannelNumber, 1, (int)t, myWriteAPIKey);
ThingSpeak solo acepta actualizaciones cada 15 segundas como mínimo
El código completo es el siguiente:
#include <SimpleDHT.h>
#include <ThingSpeak.h>
#include <ESP8266WiFi.h>
const char* ssid = "SSID";
const char* password = "PASSWORD";
WiFiClient client;
unsigned long myChannelNumber = NUMERO_CANAL;
const char* myWriteAPIKey = "API_KEY"; // API Key del canal
int pinDHT11 = 16; // Puerto D0 entrada de datos
SimpleDHT11 dht11;
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA); //Establece el módulo como cliente wifi
WiFi.disconnect(); //Se desconecta de cualquier WiFi conectado
delay(100);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { // wait for WiFi
delay(500);
Serial.print(".");
}
ThingSpeak.begin(client);
}
void loop() {
byte t = 0;
byte h = 0;
if (dht11.read(pinDHT11, &t, &h, NULL)) {
Serial.print("Error en la lectura.");
return;
}
// Muestra por el puerto serie las medidas obtenidas
Serial.print("Humedad relativa: ");
Serial.print((int)h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print((int)t);
Serial.println(" *C");
// Envía los datos a ThinkSpeak
ThingSpeak.setField(1, (int)t);
ThingSpeak.setField(2, (int)h);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(20000);
}
El resultado que obtenemos es el siguiente:
ThingSpeak.setField(1,(int)t);
ThingSpeak.setField(2,(int)h);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
Si solo necesitamos enviar un dato (por ejemplo la temperatura) podríamos utilizar:
ThingSpeak.writeField(myChannelNumber, 1, (int)t, myWriteAPIKey);
ThingSpeak solo acepta actualizaciones cada 15 segundas como mínimo
El código completo es el siguiente:
#include <SimpleDHT.h>
#include <ThingSpeak.h>
#include <ESP8266WiFi.h>
const char* ssid = "SSID";
const char* password = "PASSWORD";
WiFiClient client;
unsigned long myChannelNumber = NUMERO_CANAL;
const char* myWriteAPIKey = "API_KEY"; // API Key del canal
int pinDHT11 = 16; // Puerto D0 entrada de datos
SimpleDHT11 dht11;
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA); //Establece el módulo como cliente wifi
WiFi.disconnect(); //Se desconecta de cualquier WiFi conectado
delay(100);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { // wait for WiFi
delay(500);
Serial.print(".");
}
ThingSpeak.begin(client);
}
void loop() {
byte t = 0;
byte h = 0;
if (dht11.read(pinDHT11, &t, &h, NULL)) {
Serial.print("Error en la lectura.");
return;
}
// Muestra por el puerto serie las medidas obtenidas
Serial.print("Humedad relativa: ");
Serial.print((int)h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print((int)t);
Serial.println(" *C");
// Envía los datos a ThinkSpeak
ThingSpeak.setField(1, (int)t);
ThingSpeak.setField(2, (int)h);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(20000);
}
El resultado que obtenemos es el siguiente:
Fuentes:
Visualizando la temperatura en Thingspeak
ESP8266 WiFi con el IDE de Arduino
Send Data to ThingSpeak with Arduino
ESP8266 WiFi con el IDE de Arduino
Send Data to ThingSpeak with Arduino
Enlaces: