Subir datos del sensor DHT11 a ThingSpeak con Arduino MKR1000
Componentes y suministros
| Componente | Cantidad |
|---|---|
| Sensor de temperatura y humedad DHT11 (4 pines) | 1 |
| Arduino MKR1000 | 1 |
Sobre este proyecto
Ya había desarrollado código para el ESP8266 12-E para subir datos de sensores ambientales, tomados por el DHT11, de forma inalámbrica a ThingSpeak y graficarlos. Solo necesitaba hacer pequeños cambios para que funcionara con el nuevo Arduino MKR1000.
Paso 1: Conexión del sensor
Conecta la línea de datos del DHT al pin 1 del MKR1000 (etiquetado como 1 en la parte posterior de la placa).
Paso 2: Bibliotecas necesarias
Descarga las siguientes bibliotecas:
Paso 3: Configuración del gestor de placas
- Ve a Herramientas → Placa → Gestor de placas en el IDE de Arduino
- Busca "Arduino SAMD Boards (32-bits ARM Cortex M0+)"
- Instala la versión 1.6.3 (la versión 1.6.4 tuvo problemas y no instalaba la placa MKR1000 correctamente)
Paso 4: Configuración de ThingSpeak
- Crea una cuenta gratuita en ThingSpeak.com
- Configura los campos para graficar (humedad y temperatura)
- Copia tu "Write API Key" de ThingSpeak y pégala en el sketch junto con tu SSID y contraseña WiFi
Paso 5: Carga y ejecución
- Selecciona el puerto COM correcto (busca MKR1000)
- Compila y sube el código
- Deberías ver las actualizaciones enviándose a ThingSpeak en el Monitor Serie
Código
Combinación de sketches de Adafruit, WiFi101 WebClient y plantillas de ThingSpeak para Arduino. Modificado por Stephen Borsay para el MKR1000.
/* Este sketch combina el sketch DHT de Adafruit, WiFi101 WebClient y el ejemplo de Arduino para ThingSpeak. Modificado por Stephen Borsay para MKR1000, uso libre. */
#include <SPI.h> // No necesario ya que no usamos el shield, solo el chip
#include <WiFi101.h>
#include "DHT.h"
#define DHTPIN 1 // Pin al que estamos conectados, pin 1 es el 5º pin desde el final
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21
//#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);
String apiKey = "TuApiKeyAqui"; // API key de ThingSpeak
char ssid[] = "TuSSIDAqui"; // Nombre de tu red WiFi
char pass[] = "TuPasswordAqui"; // Contraseña de tu red
int keyIndex = 0; // Índice de clave de red (solo para WEP)
char server[] = "api.thingspeak.com"; // Dirección del servidor (usando DNS)
WiFiClient client;
void setup() {
Serial.begin(9600);
while (!Serial) { ; } // Espera a que el puerto serie conecte (solo USB nativo)
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("Escudo WiFi no presente");
while (true); // No continuar
}
// Intentar conectar a la red WiFi
while (WiFi.status() != WL_CONNECTED) {
Serial.print("Intentando conectar a SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, pass); // Conectar a red WPA/WPA2
delay(10000); // Esperar 10 segundos para la conexión
}
Serial.println("Conectado a WiFi");
printWifiStatus();
}
void loop() {
delay(2000); // Esperar entre mediciones
// Usamos int en lugar de float por problemas de tamaño de paquete/conversión
int h = dht.readHumidity();
int t = dht.readTemperature(); // Celsius
int f = dht.readTemperature(true); // Fahrenheit
// Verificar si alguna lectura falló
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("¡Fallo al leer del sensor DHT!");
return;
}
// Calcular índice de calor
int hif = dht.computeHeatIndex(f, h);
int hic = dht.computeHeatIndex(t, h, false);
// Mostrar en Monitor Serie
Serial.print("Humedad: "); Serial.print(h); Serial.print(" %\t");
Serial.print("Temperatura: "); Serial.print(t); Serial.print(" *C ");
Serial.print(f); Serial.print(" *F\t");
Serial.print("Índice de calor: "); Serial.print(hic); Serial.print(" *C ");
Serial.print(hif); Serial.println(" *F\n");
Serial.println("\nIniciando conexión al servidor...");
if (client.connect(server, 80)) {
Serial.println("Conectado al servidor");
// Preparar datos para ThingSpeak
String tsData = "field1=" + String(h) + "&field2=" + String(t) +
"&field3=" + String(f) + "&field4=" + String(hic) +
"&field5=" + String(hif);
// Enviar petición HTTP POST
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(tsData.length());
client.print("\n\n");
client.print(tsData);
client.stop();
delay(1000);
}
}
void printWifiStatus() {
Serial.print("SSID: "); Serial.println(WiFi.SSID());
IPAddress ip = WiFi.localIP();
Serial.print("Dirección IP: "); Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("Intensidad de señal (RSSI): "); Serial.print(rssi); Serial.println(" dBm");
}
Código en GitHub: Mismo código en GitHub para MKR1000
Esquemáticos
Conecta la línea de datos del DHT al pin 1 del MKR1000 (5º pin desde arriba). Conecta 5V y GND al sensor DHT, ambos proporcionados por el MKR1000.
Proceso de manufactura
- Descubra Cómo Parts.Cat.Com Simplifica la Compra de Repuestos y Ahorra Tiempo y Dinero
- Shop.Cat.Com: Su Recurso Integral para Equipos, Accesorios y Herramientas
- Optimice su Maquinaria Cat®: Guía Definitiva de My.Cat.com
- Breakout compacto DHT de temperatura y humedad para Raspberry Pi – ATtiny85 y DHT22/DHT11
- Construya un Monitor de Temperatura ThingSpeak con Raspberry Pi y BrickPi
- Tu primer proyecto IoT con Raspberry Pi, DHT11 y ThingSpeak
- Entrevista a Philip Cotton, fundador de 3Dfilemarket.com, experto en educación de impresión 3D en Reino Unido
- Arduino MKR1000: Pinout, Especificaciones y Guía para Proyectos IoT
- PicoCoreMX8MM: Módulo ARM Ultra-Compacto Impulsado por NXP i.MX 8M Mini
- Kontron Presentación COM HPC: Nuevo Estándar Embedded Computing Alto Rendimiento
- Acero ASTM A551 Clase DHT Tratada Térmicamente – Propiedades Clave y Rendimiento