Esp32 e DHT22 usando servidor mqtt Mosquitto

Eletrônica

Aqui está um exemplo de código que você pode usar. Este código lê os dados do sensor DHT22 na porta 19 e publica os resultados via MQTT no servidor Mosquitto.




    <!-- Inclua as bibliotecas necessárias -->
    #include <Wire.h>
    #include <Adafruit_Sensor.h>
    #include <DHT.h>
    #include <DHT_U.h>
    #include <WiFi.h>
    #include <PubSubClient.h>

    <!-- Defina o pino do sensor DHT e o tipo de sensor DHT -->
    #define DHTPIN 19
    #define DHTTYPE DHT22

    <!-- Substitua pelas credenciais da sua rede WiFi -->
    const char* ssid = "your_SSID";
    const char* password = "your_PASSWORD";

    <!-- Endereço IP do servidor MQTT -->
    const char* mqtt_server = "192.168.0.13";

    <!-- Criação dos objetos cliente WiFi e MQTT -->
    WiFiClient espClient;
    PubSubClient client(espClient);

    <!-- Criação do objeto sensor DHT -->
    DHT_Unified dht(DHTPIN, DHTTYPE);

    void setup() {
      <!-- Inicia a comunicação serial -->
      Serial.begin(115200);
      delay(10);

      <!-- Inicia o sensor DHT -->
      dht.begin();

      <!-- Conecta ao WiFi -->
      WiFi.begin(ssid, password);

      <!-- Aguarda até a conexão ser estabelecida -->
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.println("Conectando ao WiFi..");
      }

      Serial.println("WiFi conectado");

      <!-- Configura o servidor MQTT -->
      client.setServer(mqtt_server, 1883);
    }

    void loop() {
      <!-- Se não estiver conectado ao servidor MQTT, tenta reconectar -->
      if (!client.connected()) {
        reconnect();
      }

      <!-- Mantém a conexão MQTT ativa -->
      client.loop();

      <!-- Cria um objeto para armazenar os dados do sensor -->
      sensors_event_t event;

      <!-- Lê a temperatura do sensor DHT -->
      dht.temperature().getEvent(&event);
      if (isnan(event.temperature)) {
        Serial.println("Erro ao ler a temperatura!");
      } else {
        Serial.print("Temperatura: ");
        Serial.print(event.temperature);
        Serial.println(" *C");

        <!-- Publica a temperatura no servidor MQTT -->
        client.publish("esp32/dht22", String(event.temperature).c_str(), true);
      }

      <!-- Lê a umidade do sensor DHT -->
      dht.humidity().getEvent(&event);
      if (isnan(event.relative_humidity)) {
        Serial.println("Erro ao ler a umidade!");
      } else {
        Serial.print("Umidade: ");
        Serial.print(event.relative_humidity);
        Serial.println("%");

        <!-- Publica a umidade no servidor MQTT -->
        client.publish("esp32/dht22", String(event.relative_humidity).c_str(), true);
      }

      <!-- Aguarda 2 segundos antes de ler novamente -->
      delay(2000);
    }

    <!-- Função para reconectar ao servidor MQTT -->
    void reconnect() {
      <!-- Enquanto não estiver conectado, tenta reconectar -->
      while (!client.connected()) {
        Serial.print("Conectando ao MQTT...");
        if (client.connect("ESP8266Client")) {
          Serial.println("conectado");
        } else {
          Serial.print("falhou, rc=");
          Serial.print(client.state());
          Serial.println(" tentando novamente em 5 segundos");
          delay(5000);
        }
      }
    }
    


Por favor, substitua "your_SSID" e "your_PASSWORD" pelas credenciais da sua rede WiFi. Este código irá conectar o ESP32 à sua rede WiFi e ao servidor MQTT. Ele lê a temperatura e a umidade do sensor DHT22 a cada 2 segundos e publica esses valores no tópico “esp32/dht22” no servidor MQTT.


Lembre-se de instalar as bibliotecas necessárias através do gerenciador de bibliotecas do Arduino IDE. As bibliotecas necessárias são: Adafruit_Sensor, DHT sensor library, WiFi e PubSubClient.

Fonte
Equipe SuaDica
Mais Dicas