Índice:

Conectando um sensor DHT11 / DHT22 à nuvem com uma placa baseada em ESP8266: 9 etapas
Conectando um sensor DHT11 / DHT22 à nuvem com uma placa baseada em ESP8266: 9 etapas

Vídeo: Conectando um sensor DHT11 / DHT22 à nuvem com uma placa baseada em ESP8266: 9 etapas

Vídeo: Conectando um sensor DHT11 / DHT22 à nuvem com uma placa baseada em ESP8266: 9 etapas
Vídeo: ESP32 + Sensor DHT11 / DHT21 / DHT22 2024, Setembro
Anonim
Conectando um sensor DHT11 / DHT22 à nuvem com uma placa baseada em ESP8266
Conectando um sensor DHT11 / DHT22 à nuvem com uma placa baseada em ESP8266

No artigo anterior, conectei minha placa NodeMCU baseada em ESP8266 a um serviço Cloud4RPi. Agora, é hora de um projeto real!

Suprimentos

Requisitos de hardware:

  • Qualquer placa baseada em um chip ESP8266 (por exemplo, NodeMCU)
  • Um sensor DHT11 ou DHT22

Software e serviços:

  • Biblioteca de sensores DHT por Adafruit - v1.3.7
  • Sensor Unificado Adafruit - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI - Painel de controle em nuvem para dispositivos IoT
  • PlatformIO IDE para VSCode

Etapa 1: medir temperatura e umidade

Medir temperatura e umidade
Medir temperatura e umidade

Eu já tinha um sensor DHT11, então decidi usá-lo para medições de temperatura e umidade. Vamos escolher uma biblioteca Arduino para ler os dados do sensor.

O registro do Arduino contém várias bibliotecas, das quais selecionei a mais popular.

De acordo com o repositório GitHub, também somos obrigados a adicionar um pacote Adafruit Unified Sensor.

Etapa 2: Criar e configurar o projeto

Criar e configurar o projeto
Criar e configurar o projeto

Já descrevi como criar um projeto PlatformIO e instalar bibliotecas na primeira parte. Meu projeto se chama “MyNodeMCU”. A estrutura é mostrada acima.

Este projeto é um exemplo Cloud4RPi ligeiramente modificado. Decidi armazenar o token do dispositivo e as credenciais de Wi-Fi no arquivo de configuração em vez de no código.

O arquivo platform.io tem a seguinte aparência:

[platformio] default_envs = nodemcuv2 [env: nodemcuv2] plataforma = espressif8266 framework = arduino board = nodemcuv2

Etapa 3: instalar bibliotecas

Instalar Bibliotecas
Instalar Bibliotecas

A instalação das bibliotecas é bastante simples. Você pode fazer isso a partir da interface gráfica do IDE ou adicionando os nomes de bibliotecas necessários à seção lib_deps do arquivo platform.io:

; … lib_deps = cloud4rpi-esp-arduino Adafruit Unified Sensor DHT sensor de build_flags biblioteca = -D MQTT_MAX_PACKET_SIZE = 1024 -D MQTT_MAX_TRANSFER_SIZE = 128 -D CLOUD4RPI_DEBUG = 0 -D SSID_NAME = / "_ YOUR_WIFI _ \" -D SSID_PASSWORD = / "_ YOUR_WIFI_PASS _ \" - D CLOUD4RPI_TOKEN = / "_ YOUR_DEVICE_TOKEN _ \"

Bibliotecas adicionadas serão instaladas automaticamente na subpasta de um projeto.

O cabeçalho main.cpp tem a seguinte aparência:

#include #include #include #include "DHT.h"

Etapa 4: conectar um sensor DHT11

Adafruit fornece um exemplo DHTtester.ino de uma conexão de sensor.

Este código inicializa um sensor e define uma estrutura para armazenar o resultado da medição (caso tenha sido bem sucedido):

#define DHTPIN 2 // Pino digital conectado ao sensor DHT # define DHTTYPE DHT11 // DHT 11 //… DHT dht (DHTPIN, DHTTYPE); dht.begin (); //… struct DHT_Result {float h; float t; }; DHT_Result dhtResult;

A próxima função mostra como ler os dados do sensor e armazená-los na estrutura de dados descrita acima

void readSensors () {float h = dht.readHumidity (); // Lê a temperatura como Celsius (o padrão) float t = dht.readTemperature ();

// Verifique se alguma leitura falhou e saia

if (isnan (h) || isnan (t)) {Serial.println (F ("Falha ao ler do sensor DHT!")); Retorna; } dhtResult.h = h; dhtResult.t = t; }

Etapa 5: Envio de dados para a nuvem

Assim que tivermos esses dados, a próxima etapa é enviá-los ao serviço Cloud4RPi.

A página Cloud4RPi para Arduino descreve a API da biblioteca, que é um conjunto de métodos usados para:

  • criar, ler e atualizar variáveis,
  • envie valores de variáveis para a nuvem usando o protocolo MQTT.

A biblioteca oferece suporte a três tipos de variáveis: Bool, Numeric e String.

O fluxo de trabalho da biblioteca começa com a criação de uma instância de API usando o token de dispositivo do site cloud4rpi.io (consulte a parte 1 do artigo para obter detalhes).

#if definido (CLOUD4RPI_TOKEN) Cloud4RPi c4r (CLOUD4RPI_TOKEN); #else Cloud4RPi c4r ("!!! _ NO_DEVICE_TOKEN _ !!!"); #fim se

Em seguida, declare variáveis para leituras DHT11:

c4r.declareNumericVariable ("DHT11_Temp"); c4r.declareNumericVariable ("DHT11_Hum");

Em seguida, obtenha os dados do sensor, salve-os em variáveis e publique os dados no Cloud4RPi:

c4r.setVariable ("DHT11_Temp", dhtResult.t); c4r.setVariable ("DHT11_Hum", dhtResult.h); c4r.publishData ();

A temperatura e a umidade não mudam rapidamente, portanto, não é necessário enviar mais de um valor a cada 5 minutos.

Etapa 6: Diagnóstico

Cloud4RPi oferece suporte a dados de diagnóstico junto com valores de variáveis. Usei o tempo de atividade, a intensidade do sinal de Wi-Fi e o endereço IP como dados de diagnóstico:

c4r.declareDiagVariable ("IP_Address"); c4r.declareDiagVariable ("RSSI"); // Intensidade do sinal WiFi c4r.declareDiagVariable ("Uptime");

Observação: a função millis que uso para obter o tempo de atividade é redefinida para zero a cada aproximadamente 50 dias. O que é mais do que suficiente para o meu projeto.

O código a seguir define os valores das variáveis de diagnóstico:

c4r.setDiagVariable ("RSSI", (String) WiFi. RSSI () + "dBm"); c4r.setDiagVariable ("IP_Address", WiFi.localIP (). toString ()); c4r.setDiagVariable ("Uptime", uptimeHumanReadable (currentMillis)); c4r.publishDiag ();

A função uptimeHumanReadable converte milissegundos em uma forma conveniente:

String uptimeHumanReadable (milissegundos longos sem sinal) {static char uptimeStr [32]; segundos longos sem sinal = milissegundos / 1000; minutos longos sem sinal = segundos / 60; horas int sem sinal = minutos / 60; dias int sem sinal = horas / 24; segundos - = minutos * 60; min - = horas * 60; horas - = dias * 24; sprintf (uptimeStr, "% d dias% 2.2d:% 2.2d:% 2.2d", (byte) dias, (byte) horas, (byte) minutos, (byte) segundos); return String (uptimeStr); }

A função produz uma string como esta 5 dias 10:23:14 em vez de um grande número estranho.

Etapa 7: iniciar e depurar o projeto

Iniciar e depurar o projeto
Iniciar e depurar o projeto

Depois de compilar o código criado e colocá-lo no NodeMCU, o dispositivo se conecta a um serviço de nuvem e começa a enviar dados.

Você pode aumentar o detalhamento do log definindo a variável de pré-processador CLOUD4RPI_DEBUG como 1 (adicione -D CLOUD4RPI_DEBUG = 1 à seção build_flags no arquivo platform.io).

Em seguida, abra o site cloud4rpi.io e observe o novo dispositivo online. Abra-o para ver todos os valores de variáveis recebidos do dispositivo: sensor e diagnósticos.

Etapa 8: Configuração do painel

Configuração do painel
Configuração do painel

Nesta etapa, a conexão de dados com a nuvem está operacional. Agora, vamos configurar a representação visual dos dados.

Usei a IU de configuração do painel para criar o painel a seguir.

O painel é compartilhável, então eu o compartilho instantaneamente com meu amigo.

Etapa 9: Conclusão

Conclusão
Conclusão

O código completo do projeto está disponível na essência.

É tudo por agora!

Dúvidas e sugestões são bem-vindas nos comentários.

Recomendado: