Monitorización Meteorológica en Tiempo Real con Arduino y ThingSpeak IoT
Componentes y materiales
| Arduino UNO | × | 1 |
| Espressif ESP8266 ESP-01 | × | 1 |
| Sensor Temperatura y Humedad DHT11 (3 pines) | × | 1 |
| Protoboard (genérica) | × | 1 |
| Cables Dupont (genéricos) | × | 1 |
| Fuente Alimentación Protoboard SparkFun 5V/3.3V | × | 1 |
Aplicaciones y servicios online
| ThingSpeak API |
| Arduino IDE |
| Microsoft Windows 10 |
Sobre el proyecto
ESTACIÓN METEOROLÓGICA ARDUINO THINGSPEAK
Iniciándote en IoT

Iniciarse en IoT puede ser abrumador por la gran cantidad de opciones. Bendito ThingSpeak. Este tutorial te guiará en tu primer proyecto ThingSpeak IoT, que es:
- Barato y accesible
- Fácil de entender
- GENIAL.
El proyecto: sensor de temperatura y humedad enviando datos a la nube ThingSpeak usando Arduino y módulo WiFi ESP-01.
Materiales necesarios
- Arduino UNO
- ESP-01
- Sensor DHT-11
- Protoboard
- Fuente Alimentación Protoboard
- Cables de conexión.




NOTA: Podrías alimentar sensor y WiFi desde Arduino, pero una fuente externa como el módulo Protoboard Power Supply es mejor porque los picos de corriente del WiFi no los puede suministrar la placa. ¡Lo probé, créeme!
CONEXIONES

ESP-01
- VCC → 3.3V
- GND → GND
- CH_PD → 3.3V
- RESET → 3.3V
- TX → Pin 2 (Arduino)
- RX → Pin 3 (Arduino)
DHT-11
- VCC → 5V
- OUT → A0
- GND → GND
¡No olvides poner el jumper de la fuente protoboard en 3.3V!
Enciende todo y si no humea ni huele a quemado, ¡todo bien!
CONFIGURAR THINGSPEAK
Ve a la web de ThingSpeak. Regístrate y crea un New Channel con dos fields: Temperature y Humidity.

Al crear el canal obtendrás las API Keys. Las usaremos después.

CONFIGURAR ARDUINO IDE
Paso clave: LIBRERÍAS. Usarás dos en el código y una tercera para que funcionen las anteriores.

SoftwareSerial.h viene incluida.
1. Librerías a instalar manualmente: Adafruit Unified Sensor Library y DHT Sensor Library.
2. Descarga ambas y añádelas via Sketch → Include Library → Add .ZIP Library.

RECTA FINAL
Código aquí: GitHub o copia abajo.
Antes de subir, modifica en el código:
- Pega tu Write API Key.
- Introduce tu SSID y contraseña WiFi.


Sube el código. Si todo correcto, tu canal ThingSpeak se verá así:

Nota: hay intervalo de 15 segundos entre actualizaciones de gráficas.
Si no funciona, comenta tus problemas abajo. Visita virginrobotics.blogspot.com para dudas y más proyectos.
Código
Código completo (Arduino)
String myAPIkey = "Tu Write API Key aqui";
#include <SoftwareSerial.h>
#include <DHT.h>;
SoftwareSerial ESP8266(2, 3); // Rx, Tx
#define DHTTYPE DHT11
#define DHTPIN A0
DHT dht(DHTPIN, DHTTYPE, 11);
float humidity, temp_f;
long writingTimer = 17;
long startTime = 0;
long waitTime = 0;
boolean relay1_st = false;
boolean relay2_st = false;
unsigned char check_connection = 0;
unsigned char times_check = 0;
boolean error;
void setup() {
Serial.begin(9600);
ESP8266.begin(9600);
dht.begin();
startTime = millis();
ESP8266.println("AT+RST");
delay(2000);
Serial.println("Conectando a Wifi");
while (check_connection == 0) {
Serial.print(".");
ESP8266.print("AT+CWJAP=\"NombreRedWifi\",\"Password\"\r\n");
ESP8266.setTimeout(5000);
if (ESP8266.find("WIFI CONNECTED\r\n") == 1) {
Serial.println("WIFI CONNECTED");
break;
}
times_check++;
if (times_check > 3) {
times_check = 0;
Serial.println("Reintentando conexion..");
}
}
}
void loop() {
waitTime = millis() - startTime;
if (waitTime > (writingTimer * 1000)) {
readSensors();
writeThingSpeak();
startTime = millis();
}
}
void readSensors(void) {
temp_f = dht.readTemperature();
humidity = dht.readHumidity();
}
void writeThingSpeak(void) {
startThingSpeakCmd();
String getStr = "GET /update?api_key=";
getStr += myAPIkey;
getStr += "&field1=";
getStr += String(temp_f);
getStr += "&field2=";
getStr += String(humidity);
getStr += "\r\n\r\n";
GetThingspeakcmd(getStr);
}
void startThingSpeakCmd(void) {
ESP8266.flush();
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += "184.106.153.149"; // IP api.thingspeak.com
cmd += "\",80";
ESP8266.println(cmd);
Serial.print("Start Commands: ");
Serial.println(cmd);
if (ESP8266.find("Error")) {
Serial.println("AT+CIPSTART error");
return;
}
}
String GetThingspeakcmd(String getStr) {
String cmd = "AT+CIPSEND=";
cmd += String(getStr.length());
ESP8266.println(cmd);
Serial.println(cmd);
if (ESP8266.find(">")) {
ESP8266.print(getStr);
Serial.println(getStr);
delay(500);
String messageBody = "";
while (ESP8266.available()) {
String line = ESP8266.readStringUntil('\n');
if (line.length() == 1) {
messageBody = ESP8266.readStringUntil('\n');
}
}
Serial.print("MessageBody received: ");
Serial.println(messageBody);
return messageBody;
} else {
ESP8266.println("AT+CIPCLOSE");
Serial.println("AT+CIPCLOSE");
}
}
Esquemáticos

Código en GitHub
https://github.com/imalwaysontheinternet/Weather-Stasion
Proceso de manufactura
- Construcción de una estación meteorológica exterior con Raspberry Pi 2 y ADS‑WS1
- Construya una estación meteorológica con Raspberry Pi que envíe datos diarios por email
- Estación Meteorológica Avanzada v2.0: Monitorización en Tiempo Real de Temperatura, Presión, Humedad y Altitud
- Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
- Construye un Iron Man animado con Arduino: componentes, sensores y guía paso a paso
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Construye un Brazo Robótico Impreso en 3D Controlado por Arduino – Guía Paso a Paso
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Estación Meteorológica Portátil Arduino por $10 – Nano, DHT22, BMP180 y LCD
- eDOT: Reloj Preciso y Estación Meteorológica Arduino con Control IR Integrado
- Construye un volante joystick personalizado con Arduino para gaming