top of page
Crescer (fundo transparente)_Negativo_pn

Monitorando Temperaturas com ESP32

Neste blog, vamos aplicar os conhecimentos e ferramentas discutidos em artigos anteriores, com o objetivo de demonstrar como ler dados de dois sensores (utilizando RS485) e enviá-los diretamente para uma planilha do Google.


Será apresentado como criar um sistema que fornece informações atualizadas sobre a temperatura de um líquido, bem como a temperatura e umidade do ambiente em tempo real. Além disso, esses dados serão enviados para uma planilha do Google, proporcionando uma maneira fácil e conveniente de armazenar, visualizar e analisar as informações coletadas ao longo do tempo. Esse tipo de ferramenta é extremamente útil em projetos da Indústria 4.0.


Se o seu desejo é fazer um projeto utilizando o Google Planilhas com ESP32 e sensores, este blog é a escolha ideal para você.



Sumário

 


1. Conhecendo a topologia do sistema

 

O projeto é composto por um tanque com água, sensores PT100 e XY-MD02, juntamente com uma CPB32h, um roteador e a integração com a planilha do Google. Na figura a seguir, podemos visualizar a topologia completa do sistema.

 


Com essa topologia a CPB32h pode medir a temperatura da água no tanque utilizando o PT100 e ao mesmo tempo a temperatura e umidade do ambiente utilizando o XY-MD02. Os dados são processados e em seguida enviados via Wi-Fi para a planilha do Google, garantindo uma comunicação eficiente e contínua entre os dispositivos.

 

Agora vamos examinar com mais detalhes cada componente do nosso sistema. Para medir a temperatura da água, estamos utilizando um PT100 juntamente com o módulo PTA8D08. Na figura a seguir podemos ver os dois componentes.



O PTA8D08 destaca-se como um módulo robusto, especialmente projetado para aplicações industriais, capacitando para leitura de até 8 sensores de temperatura PT100. Sua comunicação é estabelecida por meio de RS485, utilizando o protocolo MODBUS. Para ver mais informações sobre ele e um exemplo de aplicação recomendamos que veja este artigo do nosso blog.

 

Para medir a temperatura e umidade ambiente, utilizamos o sensor XY-MD02. Este sensor incorpora internamente o sensor de temperatura e umidade SHT20, reconhecido no setor de desenvolvimento pela sua qualidade e confiabilidade dos dados fornecidos durante a operação. Você pode visualizar o XY-MD02 na figura a seguir.



O sensor XY-MD02 utiliza comunicação através do protocolo RS485, seguindo as normas do padrão industrial Modbus. Para obter mais informações sobre ele e ver um exemplo de aplicação, recomendamos que acesse este artigo em nosso blog.

 

Como ambos os sensores utilizam RS485 e seguem as regras do protocolo Modbus, é possível conectá-los em paralelo no barramento da comunicação RS485. Diante disso, optou-se por utilizar a CPB32h, uma solução em hardware robusta e qualificada que permite a integração profissional do ESP32 em qualquer produto ou equipamento, independentemente da área de atuação. A CPB32h possui, por padrão, o hardware necessário para comunicação via RS232, mas podemos facilmente modificá-la para operar com RS485. Para fazer essa alteração de RS232 para RS485, consulte o item 4.5 do manual da CPB32h disponível neste link.

 

Neste projeto em particular, a CPB32h terá a responsabilidade de realizar a leitura do sensor, processar os valores obtidos, efetuar os cálculos necessários e enviar os dados para a planilha do Google. A figura a seguir ilustra a placa em questão.



Na figura a seguir podemos ver como foi feita a ligação dos sensores com a CPB32h.



A planilha do Google será utilizada para armazenar os dados coletados pelos sensores, juntamente com as respectivas datas e horários das leituras. No entanto, ela também pode ser utilizada para visualização e processamento desses valores. Na figura a seguir, é possível ver como os dados serão salvos na planilha.



Na coluna A da planilha, temos a data registrada; na coluna B, o horário; na coluna C, a temperatura ambiente; na coluna D, a umidade ambiente; e, por fim, na coluna E, a temperatura da água. Para ver como configurar a planilha, incluindo todos os mínimos detalhes de como enviar os dados para ela consulte este blog.



2. Entendendo o firmware

 

Primeiro, vamos compreender a comunicação dos sensores com o ESP32. Para isso, é necessário utilizar a biblioteca ModbusMaster, que contém todas as funções essenciais para implementar o protocolo MODBUS. A seguir, veja o código necessário para incluí-la no firmware:

 

#include <ModbusMaster.h>

 

Também é necessário informar o pino utilizado para definir a direção da comunicação RS485 e criar um objeto da classe ModbusMaster para cada dispositivo conectado à rede, conforme mostrado a seguir:


#define MAX485_dir  2

ModbusMaster xymd02;
ModbusMaster pta8d08;

 

O ESP32 irá comunicar-se com o MAX485 utilizando a Serial 2. Portanto, dentro da função setup, devemos inicializar esta porta usando o seguinte código:

 

Serial2.begin(9600);

 

Para utilizar o MAX485 junto com a biblioteca ModbusMaster, é necessário definir as funções que serão executadas antes e depois de uma transmissão. No caso, para estabelecer a direção da comunicação, criamos as seguintes funções:

 

void preTransmission() {
  digitalWrite(MAX485_DIR, 1);
}

void postTransmission() {
  digitalWrite(MAX485_DIR, 0);
}

 

Essas funções serão utilizadas na hora de inicializar cada um dos dispositivos da rede MODBUS. A seguir, podemos ver como é feita a inicialização de cada um dos dispositivos.

 

  xymd02.begin(1, Serial2);
  pta8d08.begin(0, Serial2);

  xymd02.preTransmission(preTransmission);
  xymd02.postTransmission(postTransmission);

  pta8d08.preTransmission(preTransmission);
  pta8d08.postTransmission(postTransmission);

 

Primeiramente, utilizamos a função "begin" para informar o endereço do dispositivo e a porta serial utilizada para comunicação. Em seguida, especificamos as funções que serão executadas antes e depois de uma transmissão.

 

Dentro da função "loop", realizamos a leitura de cada um dos sensores, armazenando os valores recebidos nas variáveis correspondentes a cada um deles. Após cada leitura, o programa envia o valor obtido para a planilha do Google. Para obter mais detalhes sobre como é feita a leitura de cada sensor, recomendamos que consulte os blogs específicos sobre o XY-MD02 e o PTA8D08.

 

Agora, vamos ver como enviar os dados para a planilha do Google. Primeiramente, devemos declarar as bibliotecas necessárias e realizar as configurações para o funcionamento da comunicação WiFi. As bibliotecas utilizadas são:

 

#include <HTTPClient.h>
#include <WiFi.h>
#include "string.h"

 

E as configurações são feitas da seguinte forma:

 

const char* ssid     = "nome da rede";
const char* password = "senha";
char *server = "script.google.com";

char *GScriptId = "AKfycbz6OQACa2p6J0aio2t6s5hC_yjIPRhHi82jYm7JYkT24PIV3mfycbhsOUmgUm90YnJlHw";

const int httpsPort = 443;

WiFiClientSecure client;

  

Para conectar o ESP32 à rede, devemos chamar a função "connect_wifi" dentro da função "setup". Mais detalhes sobre a função "connect_wifi" podem ser vistos no código completo ao final dessa seção.

 

Agora, é necessário seguir as configurações e o exemplo base descritos no blog "Como publicar dados no Google Sheets usando ESP32". Neste projeto, fizemos uma simplificação no exemplo original para facilitar o entendimento. É importante ressaltar que, para realizar o envio dos dados, basta chamar a função "enviarMedicao()". Dentro dessa função, temos a seguinte linha de código:

 

String url = String("https://script.google.com") + "/macros/s/" + GScriptId + "/exec?" + "&value1=" + String(temp_ambiente) + "&value2=" + String(umidade) + "&value3=" + String(temp_pt100);

Neste trecho do código, estamos montando a string para enviar as variáveis "temp_ambiente", "umidade" e "temp_pt100". Portanto, se você deseja alterar a variável que será enviada ou adicionar mais variáveis, é neste ponto da função que você deve fazer as alterações necessárias.

 

Além disso, é fundamental configurar corretamente a planilha que receberá os dados. Para obter as instruções de configuração, consulte o blog original, pois sem essa configuração adequada, o código exemplo fornecido neste blog não funcionará corretamente.

 

A seguir, apresento o código completo do projeto e, em seguida, os resultados obtidos:

  

#include <ModbusMaster.h>
#include <HTTPClient.h>
#include <WiFi.h>
#include "string.h"

#define MAX485_dir  2

ModbusMaster xymd02;
ModbusMaster pta8d08;

const char* ssid     = "nome da rede";    
const char* password = "senha"; 

char *server = "script.google.com";  

char *GScriptId = "AKfycbz6OQACa2p6J0aio2t6s5hC_yjIPRhHi82jYm7JYkT24PIV3mfycbhsOUmgUm90YnJlHw"; //planilha teste

const int httpsPort = 443;

WiFiClientSecure client;
float temp_ambiente, umidade, temp_pt100;

void preTransmission() {
  digitalWrite(MAX485_dir, 1);
}
void postTransmission() {
  digitalWrite(MAX485_dir, 0);
}

void setup() {
  // Initialize control pins
  pinMode(MAX485_dir, OUTPUT);
  digitalWrite(MAX485_dir, 0);

  Serial.begin(115200);
  connect_wifi();

  Serial2.begin(9600);

  xymd02.begin(1, Serial2);
  pta8d08.begin(0, Serial2);

  // Callbacks allow us to configure the RS485 transceiver correctly
  xymd02.preTransmission(preTransmission);
  xymd02.postTransmission(postTransmission);
  // Callbacks allow us to configure the RS485 transceiver correctly
  pta8d08.preTransmission(preTransmission);
  pta8d08.postTransmission(postTransmission);

}

void loop() {

  Serial.println("______________Data Requested______________");
  Serial.println("");

  uint8_t result1 = pta8d08.readHoldingRegisters(0x0000, 1);
  if (result1 != pta8d08.ku8MBSuccess) {
    Serial.println("Erro na leiura do PTA8D08");
  }

  if (result1 == pta8d08.ku8MBSuccess) {
    // Get response data from sensor
    Serial.print("Temperatura PTA8D08: ");
    Serial.println(float(pta8d08.getResponseBuffer(0) / 10.00F));
    temp_pt100 = float(pta8d08.getResponseBuffer(0) / 10.00F);
  }

  delay(1000);

  uint8_t result2 = xymd02.readInputRegisters(0x0001, 2);
  if (result2 != xymd02.ku8MBSuccess) {
    Serial.print("Erro na leiura do XY-MD02   ");
    Serial.println(result2);
  }

  if (result2 == xymd02.ku8MBSuccess) {
    Serial.print("Temperatura XY-MD02: ");
    Serial.print(float(xymd02.getResponseBuffer(0)));
    temp_ambiente = float(xymd02.getResponseBuffer(0) );
    Serial.print("   Umidade XY-MD02: ");
    Serial.println(float(xymd02.getResponseBuffer(1) ));
    umidade = float(xymd02.getResponseBuffer(1) );
  }
  Serial.println("");
  enviarMedicao();
  delay(10000);
}


void connect_wifi(void)
{
  Serial.print("Connecting to wifi: ");
  Serial.println(ssid);
  Serial.flush();
  WiFi.begin(ssid, password);
  int cont_wifi = 0;
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
    cont_wifi++;
    if (cont_wifi > 50) {
      ESP.restart();
    }
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void enviarMedicao()
{
  HTTPClient http;

  String url = String("https://script.google.com") + "/macros/s/" + GScriptId + "/exec?" + "&value1=" + String(temp_ambiente) + "&value2=" + String(umidade) + "&value3=" + String(temp_pt100);

  Serial.print("Making a request");
  http.begin(url.c_str()); //Specify the URL and certificate
  http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS);
  int httpCode = http.GET();
  String payload;
  if (httpCode > 0) { //Check for the returning code
    payload = http.getString();

    Serial.println(httpCode);
    Serial.println(payload);
    //     testdrawstyles(payload);
    //if (httpCode == 200 or httpCode == 201) tempPing.Saida(0);
  }
  else {
    Serial.println("Error on HTTP request");
  }
  http.end();

}


3. Resultados


Na figura a seguir podemos ver uma foto da montagem feita para a realização deste projeto.

 

 

No monitor serial, é possível observar que o ESP32 consegue se conectar com sucesso à rede WiFi. Em seguida, os valores de temperatura e umidade obtidos dos sensores são apresentados. Por fim, é indicado que a escrita na planilha foi realizada corretamente.



No Google Planilhas, temos a capacidade de manipular esses dados de várias maneiras. Aqui, vamos apresentar um gráfico que ilustra temperatura e umidade ambiente, bem como a temperatura do líquido. Na figura a seguir, o eixo X representa o horário e o eixo Y representa os valores medidos.

 


No gráfico temos em laranja a umidade (em porcentagem), em azul a temperatura ambiente (em graus célsius) e em amarelo a temperatura da água (em graus célsius).


 

Após a introdução dos dados na planilha, adquirimos a habilidade de executar uma variedade de cálculos e criar diferentes relatórios. Podemos examinar a taxa de aumento da temperatura do líquido, avaliar a eficácia de materiais isolantes, acompanhar a temperatura em tempo real, fazer projeções de valores futuros com base em dados históricos, e explorar diversas outras aplicações.

 

Apesar de termos utilizado a leitura de sensores de temperatura, esse tipo de projeto pode ser implementado em várias áreas. O aspecto mais relevante é a economia de custos, visto que todo o armazenamento e processamento de dados são conduzidos gratuitamente pelo Google para os usuários.

 

Posts recentes

Ver tudo

Blog Crescer

bottom of page