Envio de Dados do Sensor DHT11 para o ThingSpeak com Arduino MKR1000
Componentes e Materiais
- Sensor de Temperatura e Umidade DHT11 (4 pinos) × 1
- Arduino MKR1000 × 1
Sobre este Projeto
Já havia desenvolvido código para o ESP8266 12-E enviar dados de sensores ambientais, coletados pelo DHT11, via Wi-Fi para o site ThingSpeak e gerar gráficos. Apenas precisei fazer pequenas alterações para funcionar com o novo Arduino MKR1000.
Passo 1: Conexão do Hardware
Conecte a linha de dados do DHT ao pino 1 do MKR1000 (identificado como "1" na parte traseira da placa).
Passo 2: Bibliotecas Necessárias
Baixe as seguintes bibliotecas:
Passo 3: Configuração do Board Manager
No Arduino IDE:
- Vá em Ferramentas → Placa → Gerenciador de Placas
- Pesquise por "Arduino SAMD Boards (32-bits ARM Cortex M0+)"
- Instale a versão 1.6.3 (a versão 1.6.4 apresentou problemas com a instalação da placa MKR1000)
Passo 4: Configuração do ThingSpeak
- Crie uma conta gratuita no ThingSpeak.com
- Configure os campos (fields) para graficar umidade e temperatura
- Copie sua "Write API Key" do ThingSpeak
- Insira a API Key, SSID e senha do Wi-Fi no sketch fornecido
Passo 5: Upload e Execução
- Selecione a porta COM correta (procurando por MKR1000)
- Compile e carregue o código
- Observe as atualizações sendo enviadas ao ThingSpeak na janela Serial
Divirta-se!
Código
Sketch combinado: Adafruit DHT, WiFi101 WebClient e templates Arduino ThingSpeak. Modificado por Stephen Borsay para MKR1000.
/* Este sketch combina o sketch DHT da Adafruit, WiFi101 WebClient e o exemplo Arduino do ThingSpeak
Modificado por Stephen Borsay para o MKR1000, fique à vontade para usar */
#include <SPI.h> // não necessário pois não usamos shield, apenas chip
#include <WiFi101.h>
#include "DHT.h"
#define DHTPIN 1 // pino conectado, pino 1 é o 5º a partir da extremidade
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21
//#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);
String apiKey = "YourApiKeyHere"; // API Key do ThingSpeak
char ssid[] = "YourSSIDHERE"; // SSID da rede (nome)
char pass[] = "YourPasswordHere"; // senha da rede
int keyIndex = 0; // índice da chave de rede (apenas para WEP)
char server[] = "api.thingspeak.com"; // endereço do servidor (usando DNS)
WiFiClient client;
void setup() {
Serial.begin(9600);
while (!Serial) { ; } // aguarda porta serial (necessário para USB nativo)
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("Shield WiFi não presente");
while (true); // não continua
}
// tenta conectar à rede WiFi
while (WiFi.status() != WL_CONNECTED) {
Serial.print("Tentando conectar ao SSID: ");
Serial.println(ssid);
WiFi.begin(ssid, pass); // WPA/WPA2
delay(10000); // aguarda 10 segundos
}
Serial.println("Conectado ao WiFi");
printWifiStatus();
}
void loop() {
delay(2000); // intervalo entre medições
// leitura dos sensores (usando int por limitações de conversão float)
int h = dht.readHumidity();
int t = dht.readTemperature(); // Celsius
int f = dht.readTemperature(true); // Fahrenheit
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Falha na leitura do sensor DHT!");
return;
}
// cálculo do índice de calor
int hif = dht.computeHeatIndex(f, h);
int hic = dht.computeHeatIndex(t, h, false);
// saída serial
Serial.print("Umidade: "); 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 calor: "); Serial.print(hic); Serial.print(" *C ");
Serial.print(hif); Serial.println(" *F\n");
Serial.println("\nIniciando conexão ao servidor...");
if (client.connect(server, 80)) {
Serial.println("Conectado ao servidor");
String tsData = "field1=" + String(h) + "&field2=" + String(t) +
"&field3=" + String(f) + "&field4=" + String(hic) +
"&field5=" + String(hif);
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("Endereço IP: "); Serial.println(ip);
long rssi = WiFi.RSSI();
Serial.print("Força do sinal (RSSI): "); Serial.print(rssi); Serial.println(" dBm");
}
Código no GitHub: Mesmo código no GitHub para MKR1000
Esquemático
Conecte a linha de dados do DHT ao pino 1 do MKR1000 (5º pino a partir da extremidade). Conecte 5V e GND ao sensor DHT, ambos fornecidos pelo MKR1000.
Processo de manufatura
- PicoCoreMX8MM: Módulo ARM Ultra‑Compacto Alimentado por NXP i.MX 8M Mini
- Kontron Revela COM HPC: Novo Padrão de Computação Embarcada de Alto Desempenho
- Breakout Compacto DHT de Temperatura e Umidade para Raspberry Pi – ATtiny85 & DHT22/DHT11
- Construa um Monitor de Temperatura ThingSpeak com Raspberry Pi e BrickPi
- Crie Seu Primeiro Projeto IoT com Raspberry Pi, DHT11 e ThingSpeak
- MKR1000 Pinout: A Placa Ideal para Desenvolvimento IoT
- Como o Parts.Cat.Com Simplifica a Aquisição de Peças e Economiza Tempo e Dinheiro
- Shop.Cat.Com: Seu Recurso Completo para Equipamentos, Implementos e Ferramentas
- Otimize Máquinas Cat®: O Guia Definitivo do My.Cat.com
- ASTM A551 Classe DHT Tratada Termicamente: Propriedades e Desempenho do Aço