/
/
Monitoramento de Temperatura com Heltec ESP32 LoRa

Monitoramento de Temperatura com Heltec ESP32 LoRa

Sumário

Baixe agora a apostila Arduino Iniciante e comece seus projetos

Compartilhe seu conhecimento e receba em dinheiro ou produtos.

Materiais utilizados

Introdução

Com o avanço da tecnologia hoje temos cada vez mais dispositivos conectados na internet, com isso a IoT (internet of Things) é uma das áreas que mais cresce na atualidade, algumas situações impõem desafios à tecnologias de transmissão de dados mais populares como WiFi e Ethernet. Um exemplo disso seria conectar sensores em áreas remotas e sem acesso à rede elétrica. A tecnologia LoRa é uma solução para situações assim. Neste artigo, iremos explorar os princípios básicos do protocolo LoRa (Long Range) e como ele pode ser usado com a Placa LoRa Wifi 433MHz SX1276 - ESP32 Display OLED 0.96 para projetos em IoT usando o IDE do Arduino.

LoRa

O LoRa é uma tecnologia de radiotransmissão de longo alcance e baixo consumo criada pela Semtech™, ou seja, com essa tecnologia podemos criar projetos para aplicações de longa distancia, como por exemplo um termômetro em uma plantação distante alimentado por uma bateria ou painel solar. A tecnologia usa bandas de radiofrequência em sub-gigahertz sem licença, como 433 MHz, 868 MHz. Aqui no Brasil usamos a 915MHz regulada pela a Anatel. Com ela podemos criar links de transmissão entre dispositivos na escala de quilômetros (3-4 Km para regiões urbanas e em zonas rurais 15 Km ou mais).

Frequências LoRa no Brasil
Frequências LoRa no Brasil
A resolução da Anatel que trata dessas faixas de frequência está disponível no site neste link.

Projeto e Componentes

O projeto que vamos criar é um termômetro remoto. Vamos criar uma rede Peer-to-Peer (ponto a ponto) com um sensor de temperatura DHT11 conectado a um transmissor, e um receptor mostrando os dados no display. Materiais necessários para o projeto Monitoramento de Temperatura com Heltec ESP32 LoRa

A placa Heltec Wi-Fi ESP32 LoRa possui um módulo LoRa SX1276, um microprocessador Xtensa 32-Bits LX6 com uma tela OLED de 0,96” com resolução de 128×64. Também conta com um conector para bateria para alimentação remota.  Demais características podem ser encontradas em ESP32 LoRa WiFi.
Placa LoRa Wifi 915MHz SX1276 - ESP32 Display OLED 0.96
Placa LoRa Wifi 915MHz SX1276 - ESP32 Display OLED 0.96
WiFi-LORA-32-V2-pinout

O sensor DHT11 é um sensor de temperatura e umidade de saída de sinal digital garantindo alta confiabilidade e estabilidade a longo prazo. O elemento sensor de temperatura é um termistor do tipo NTC e o sensor de umidade é do tipo HR202, o circuito interno faz a leitura dos sensores e se comunica a um microcontrolador através de um sinal serial de uma via. Demais características podem ser encontradas em DHT11. Nesse projeto pode ser usado o DHT22 com as devidas adaptações.

DHT11-Pinout
Sensor de Umidade e Temperatura DHT11
Sensor de Umidade e Temperatura DHT11

Esquema de Ligação

As ligações no transmissor: DHT11 - Heltec

  • VCC    >   VCC
  • GND   >   GND
  • Data    >   17
O receptor não tem ligações. Heltec_Lora_esquema

Configurações e Instalação das Bibliotecas

Para utilizar a placa Heltec precisamos instalar e configurar as bibliotecas. Clique em Arquivos > Preferências, vá até a opção URLs Adicionais de Gerenciamento de Placas e adicione: https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series/releases/download/0.0.5/package_heltec_esp32_index.json Em seguida entre em Ferramentas > Placas > Gerenciador de Placas: Na busca, digite Heltec ESP32, e instale o pacote Heltec ESP32 Series Dev-boards Opção URLs Adicionais Download da biblioteca da Heltec ESP32. Cliquem em  Sketch > Incluir Biblioteca > Gerenciador de Biblioteca. Na busca, digite Heltec ESP32, e instale o pacote Heltec ESP32 Series Dev-boards Para mais informações acesse: https://heltec-automation-docs.readthedocs.io/en/latest/esp32/quick_start.html

Programação

Após a conexão entre a placa Heltec ESP32 e o Arduino IDE, basta copiar e colar o código deste post. Na IDE clique em Ferramentas > Placas > Heltec ESP32 Arduino e escolha a placa Heltec LoRa 32 V2 escolher a placa Após os passos anteriores, deve-se carregar na placa o programa.

Código do Transmissor

O transmissor lê o sensor, envia os dados via LoRa e, em seguida, imprime no display OLED e pisca o LED. Cabeçalhos utilizados
//inclusão de bibliotecas
#include "heltec.h"
#include "DHTesp.h"

#define BAND    915E6  //Escolha a frequência

DHTesp dht;

String packet ;
float currentTemp;
float currentHumidity;

/* Protótipo da função */
void getTemp();
void sendPacket();

/*
  Nome da função: getTemp
  objetivo: ler a temperatura e atibiu a variável currentTemp.
*/
void getTemp()
{
  float temperature = dht.getTemperature();
 
  if (temperature != currentTemp) { //Verifica se houve mudança na temperatura
    currentTemp = temperature;
    digitalWrite(LED, HIGH);   // Liga o LED
    delay(500);                // Espera 500 milissegundos
    digitalWrite(LED, LOW);    // Desliiga o LED
    delay(500);                // Espera 500 milissegundos
  }
  delay(1000);
}

/*
  Nome da função: sendPacket
  objetivo: envia a temperatura via LoRa armazenada na variável currentTemp.
*/
void sendPacket()
{
  LoRa.beginPacket();
  LoRa.print("Temperatura: ");
  LoRa.print(currentTemp);
  LoRa.endPacket();
}

/******************* função principal (setup) *********************/
void setup()
{
  pinMode(LED,OUTPUT); //inicializa o LED
  
  Heltec.begin(true /*Habilita o Display*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Habilita debug Serial*/, true /*Habilita o PABOOST*/, BAND /*Frequência BAND*/);
 
  Heltec.display->init();
  Heltec.display->flipScreenVertically();  
  Heltec.display->setFont(ArialMT_Plain_16);
  Heltec.display->clear();
  Heltec.display->drawString(33, 5, "Iniciado");
  Heltec.display->drawString(10, 30, "com Sucesso!");
  Heltec.display->display();
  delay(1000);
  
  dht.setup(17, DHTesp::DHT11); //inicializa o DHT no pino 17
   
  currentTemp = dht.getTemperature();
}

/******************* função em loop (loop) *********************/
void loop()
{
  getTemp(); //Ler temperatura
  
  Heltec.display->clear();
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  Heltec.display->setFont(ArialMT_Plain_16);
  
  Heltec.display->drawString(30, 5, "Enviando");
  Heltec.display->drawString(33, 30, (String)currentTemp);
  Heltec.display->drawString(78, 30, "°C");
  Heltec.display->display();

  sendPacket(); //Envia temperatura
}

Código do Receptor

O receptor aguarda a chegada de pacotes. Ao receber algum dado, imprime o valor no display OLED e pisca o LED. Cabeçalhos utilizados
#include "heltec.h"

#define BAND    915E6  //Escolha a frequência

String packSize = "--";
String packet ;

/* Protótipo da função */
void LoRaDataPrint();
void cbk(int packetSize);

/*
  Nome da função: LoRaDataPrint
  objetivo: imprime a temperatura e tamanho do pacote recebido no display.
*/
void LoRaDataPrint(){
  Heltec.display->clear();
  Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
  Heltec.display->setFont(ArialMT_Plain_10);
  Heltec.display->drawString(0 , 1 , "Recebendo "+ packSize + " bytes");
  Heltec.display->setFont(ArialMT_Plain_16);
  Heltec.display->drawString(15, 16, "Temperatura");
  Heltec.display->drawString(33, 38, packet);
  Heltec.display->drawString(78, 38, "°C");
  Heltec.display->display();
}

/*
  Nome da função: cbk
  recebe como parâmetos um inteiros (packetSize)
  objetivo: recebe a temperatura via LoRa e armazena na variável packet.
*/
void cbk(int packetSize) {
  packet ="";
  packSize = String(packetSize,DEC);
  for (int i = 0; i < packetSize; i++) {
    packet += (char) LoRa.read(); //Atribui um caractere por vez a váriavel packet 
  }
  LoRaDataPrint();
}

/******************* função principal (setup) *********************/
void setup()
{
  pinMode(LED,OUTPUT); //inicializa o LED
  
  Serial.begin(9600);
  Heltec.begin(true /*Habilita o Display*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Habilita debug Serial*/, true /*Habilita o PABOOST*/, BAND /*Frequência BAND*/);
 
  Heltec.display->init();
  Heltec.display->flipScreenVertically();  
  Heltec.display->setFont(ArialMT_Plain_10);
  Heltec.display->clear();
  Heltec.display->drawString(10, 5, "Iniciado com Sucesso!");
  Heltec.display->drawString(10, 30, "Aguardando os dados...");
  Heltec.display->display();
  Serial.println("Iniciado com Sucesso!");
  Serial.println("Aguardando os dados...");
  delay(1000);
  
  LoRa.receive(); // Habilita o rádio LoRa para receber dados
}

/******************* função em loop (loop) *********************/
void loop()
{
  int packetSize = LoRa.parsePacket();
  if (packetSize) { //Verifica se há dados chegando via LoRa
    cbk(packetSize);
    digitalWrite(LED, HIGH);   // Liga o LED
    delay(500);                // Espera 500 milissegundos
    digitalWrite(LED, LOW);    // Desliiga o LED
    delay(500);                // Espera 500 milissegundos
    Serial.print("Recebendo a temperatura: ");
    Serial.print(packet); //Imprime no monitor serial a temperatura
    Serial.println("°C");
  }
  delay(10);
}

Resultado Final

O resultado final do projeto você pode conferir no vídeo abaixo. No vídeo é mostrado o transmissor conectado a um Power Bank de 4.7V, transmitindo os dados e o receptor mostrando os dado recebidos. Em um dado momento, utilizei um soprador térmico para mudar a temperatura.

Conclusão

Com este projeto é possível obter êxito em diversas aplicações onde é necessário coletar dados remotos e transmiti-los para um receptor e dele salvar em algum lugar ou enviar para a internet. LoRa é uma tecnologia que veio para solucionar problemas de comunicação de longas distancia, além de resolver esse problema ela também e de baixo consumo, baixo custo de implementação e manutenção e de implementação simples em alguns casos. Para mais materiais como esse, continue acompanhando as postagens semanais do blog e não deixe de visitar nossa loja. Lá você encontra todos os componentes necessários para desenvolver esse e muitos outros projetos! Que a força estejam com vocês! NÃO ENTREM EM PÂNICO! Até mais! Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!

Sobre o Autor


Saulo Aislan

Graduando em Tecnologia em Telemática pelo IFPB – Campus de Campina Grande - PB. Tenho experiência com os microcontroladores da família Arduino, ESP8266, ESP32, STM32 e microprocessador Raspberry Pi. Tenho projetos na áreas de IoTs voltada para a indústria 4.0, agroindústria e indústria aeroespacial civil utilizando LoRa, Bluetooth, ZigBee e Wi-Fi. Atualmente estudando e desenvolvendo em FreeRTOS para sistemas em tempo real com ESP32 e LoRaWan para Smart City e compartilhando alguns projetos no blog da Eletrogate.

Monitoramento remoto de temperatura utilizando a tecnologia LoRa com a placa Heltec ESP32 LoRa e o sensor DHT11 em zona urbana ou rural.

Precisa dos componentes para este projeto?

Encontre tudo na Loja Eletrogate com frete grátis para compras acima de R$ 200

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *