Esp32 Lora WiFi

ESP32 LoRa WiFi SX1278

O ESP32 LoRa WiFi é uma pequena placa de desenvolvimento que integra três formas distintas de comunicação: Wifi, Bluetooth e a rede de comunicação de longo alcance – LoRa (que é o grande destaque dessa placa). Na figura abaixo está ilustrado o diagrama pinout.

 

Ela possui o microprocessador Xtensa 32-Bits LX6 que apresenta baixo consumo de energia, além de se destacar  por ser um processador dual core. Está integrada com uma tela funcional OLED de 0,96” com resolução de 128×64. Também conta com um controlador de carga e conector JST na parte inferior para uma bateria (Li-Ion ou Li-Po) de 3.7V e até 1000mAh para alimentação remota, sem a necessidade de fios. Demais características podem ser encontradas em ESP32 LoRa WiFi.

 

Configuração na IDE do Arduino

Para programar o módulo ESP32 LoRa WiFi, devemos instalar uma seleção de placas fornecidas pela Heltec. De forma a fazer essas configurações de maneira mais rápida, iremos usar o Git. Caso você não tenha ele instalado, poderá baixá-lo para instalar em seu sistema.

Obs 1: Observe que alguns comandos podem variar de acordo com o idioma do seu sistema. No exemplo abaixo a pasta de documentos é descrita como “Documents”, em inglês.

Obs 2: Caso você tenha seguido nosso tutorial de instalação da placa ESP32, pode ser que apareçam alguns problemas de conflito entre as bibliotecas. Caso isso aconteça com você, a solução mais rápida e efetiva é apagar os arquivos da pastas “Documents/Arduino/hardware” e seguir esse tutorial normalmente.

Caso não tenha a Arduino IDE instalada, baixe aqui.

 

Primeira etapa

Primeiramente iremos instalar o suporte as placas da Heltec. Para isso, siga os passos abaixo.

  • No menu iniciar, acesse o Git Bash.
  • Navegue até a pasta Documents/Arduino/hardware
    • Use o comando “cd Documents/Arduino/hardware”
    • Caso o mesmo falhe, verifique se existe a pasta hardware dentro da pasta Arduino. Caso não exista, você pode criar.
  • Em seguida, copie, cole e execute o comando abaixo, no Git Bash:
    • “git clone https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series.git heltec”
  • O terminal ficará mais ou menos como o mostrado abaixo.

  • Feito isso, vá até a pasta /Documents/Arduino/hardware/heltec/esp32/tools no seu windows explorer e dê um clique duplo no arquivo “get.exe”. Deixe ele ser executado e, quando ele acabar, fechará automaticamente.

 

  • Finalmente, os modelos de placa da Heltec poderão ser acessados através do menu de seleção de placa do Arduino, conforme a figura abaixo. Nesse tutorial, usaremos o modelo WiFi LoRa 32.

Segunda etapa

Nessa etapa, instalaremos a biblioteca Heltec. Para isso, siga os passos abaixo.

  • No menu iniciar, acesse o Git Bash.
  • Navegue até a pasta Documents/Arduino/libraries
    • Use o comando “cd Documents/Arduino/libraries”
  • Em seguida, copie, cole e execute o comando abaixo, no Git Bash:
    • “git clone https://github.com/HelTecAutomation/Heltec_ESP32.git”
    • Deverá fica uma janela parecida com a figura abaixo.

  • Feito isso, a biblioteca estará instalada e poderá ser vista no meu de exemplos da IDE do Arduino, conforme figura abaixo:

 

Testando a configuração

Para testarmos o funcionamento da ESP32 LoRa WiFi SX1278, copie e cole o código abaixo na IDE do Arduino. Conecte a placa e então selecione a porta. Faça o upload do código. Talvez seja necessário que você aperte o botão PRG ao passar o código (na maioria das vezes o código passou direto quando eu testei).

#include "Arduino.h"
#include "heltec.h"

void setup () {
 Heltec.begin (verdadeiro, falso, verdadeiro);

 Heltec.display setContrast (255);
 Heltec.display clear ();
 
 Heltec.display setFont (ArialMT_Plain_24);
 Heltec.display drawString (0, 0, "LoRa WiFi");
 
 Heltec.display setFont (ArialMT_Plain_16);
 Heltec.display drawString (0, 25, "Usinainfo");
 
 Heltec.display setFont (ArialMT_Plain_10);
 Heltec.display drawString (0, 45, "www.usinainfo.com.br/blog/");

 Heltec.display display ();
}

void loop () {}

 

Com isso, um texto será exibido no display, conforme a figura abaixo.

Você pode ter percebido que para escrever no display usamos uma estrutura um pouco diferente. Isso acontece por que a Heltec reutiliza as funções da biblioteca original da SSD1306 e faz as adaptações necessárias para que ela funcione perfeitamente nesse módulo. Para utilizar as funções, basta adicionar “Heltec.” antes do objeto display e também adicionar a seta “->”.

Isso acontece por que umas das linguagens base do Arduino – C – provém estruturas chamadas struct, que seriam uma espécie de classe em um formato primitivo. O operador -> indica um ponteiro para uma das variáveis da struct Heltec, display. Para compreender melhor essa parte de programação é necessário um estudo mais aprofundado em algoritmos e estruturas de dados, mais especificamente sobre ponteiros.

 

Projeto de leitura e saída analógica (PWM)

Nesse projeto com ESP32 LoRa WiFi SX1278, faremos o controle do brilho de uma LED através de um potenciômetro. Para isso, conectamos uma LED à um resistor de 150 ohmsna porta 12. O potenciômetro está conectado na porta 13. Os fios de cor preta indicam o GND e a de cor vermelha indica a tensão de 3.3V.

Após montar o circuito, copie e cole o código abaixo na IDE do Arduino.

int pinoLED = 12;
int pinoPOT = 13;
int brilho;

const int freq = 5000;
const int ledChannel = 0;
resolução int const = 8;

void setup () {
pinMode (pinoPOT, INPUT);
ledcSetup (ledChannel, freq, resolução);
ledcAttachPin (pinoLED, ledChannel);
}

void loop () {
brilho = analogRead(pinoPOT);
brilho = map(brilho, 0, 4095, 0, 255);
ledcWrite(ledChannel, brilho);
atraso (100);
}

Após o upload do código ser feito, você poderá controlar a LED conforme o gif abaixo.

Nesse código, controlamos a LED com o auxílio de uma função diferente do usual. Utilizamos as funções “ledc”.

Primeiramente, definimos três variáveis (ledChannel, freq, resolution) para delimitar o canal de acionamento da LED, a frequência e a resolução (relacionados à modulação por largura de pulso – PWM). Esses valores são utilizados na função ledcSetup.

Em seguida, vinculamos uma das GPIO a essa configuração da ledcSetup com a função ledcAttachPin – informando o canal e o GPIO da LED.

Para acioná-la, usamos a função ledcWrite, que recebe como parâmetros o canal da LED e o brilho, variável entre 0 e 255. Por isso que usamos a função map – logo na linha anterior à ledcWrite – para diminuir a resolução do potenciômetro de 4095 para no máximo 255.

Note que isso é o equivalente ao analogWrite que usamos com uma placa Arduino. Porém, essa função ainda não está implementada na biblioteca fornecida pela Espressif. Já a função analogRead está. Dessa maneira vimos como fazer leitura e escrita analógica.

 

Comunicação LoRa

LoRa é um protocolo de comunicação sem fio de longo alcance – abreviação de Long Range (longo alcance). Ela é mantida pela Semtech.

Dentre as características desse protocolo, encontra-se o baixo consumo de energia requerido pela rede, a criptografia AES128 end-to-end, autenticação mútua, proteção de integridade e confidencialidade. Tudo isso com o poder se comunicação de até 1000 metros em áreas urbanas e mais de 1000 metros em áreas rurais [Ref. 1].

O funcionamento do protocolo não está no escopo desse artigo-tutorial, visto que conhecimentos em redes – como o modelo TCP/IP e tipos de topologia de rede – são necessários para o entendimento. Iremos, porém, implementar de modo prático uma rede entre dois módulos SX1278. Essa será uma comunicação do tipo Sender/Receiver, ou seja, um dos módulos irá enviar informações para o outro módulo.

 

Esquema

Um dos módulos, denominado “Sender“, está conectado com um push button e um resistor de 10k ohms. O fio amarelo amarelo ilustra a conexão com a GPIO 12. O outro módulo, denominado “Receiver”, está conectado a uma LED na GPIO 12 (ilustrada pelo fio amarelo) e um resistor de 150 ohms.

Após a montagem do circuito, iremos usar dois códigos diferentes. Um deles é específico para o Sender e outro é específico para o Receiver.

 

Código “Sender

Nesse código executamos uma função que inicializa um objeto a ser transmitido – .beginPacket(). Em seguida, adicionamos algo ao pacote com o comando .print(). Note que você pode executar mais de um print no mesmo pacote. No código abaixo, enviamos o estado da GPIO 12. Em seguida, para enviar o pacote, usamos o comando endPacket(). Por fim, há o acionamento da LED interna à placa juntamente com um delay, apenas para indicar visualmente o funcionamento do código..

#include "heltec.h"
#define BAND 433E6

void setup () {
Heltec.begin (verdadeiro, verdadeiro, verdadeiro, verdadeiro, banda);
}

void loop () {
Serial.print ("Envio de pacote:");
Serial.println (contador);

LoRa.beginPacket ();
LoRa.print(digitalRead(12));
LoRa.endPacket ();

digitalWrite(25, HIGH);
atraso (400);
digitalWrite(25, LOW);
atraso (400);
}

 

Código “Receiver

Nesse código, criamos uma variável st que recebe o que foi recebido pela rede. No loop, criamos uma variável de escopo que recebe o status da rede. Quando verifica-se que há algo sendo transmitido (na estrutura if)  inicializamos um while para armazenar o que foi recebido. Em seguida, se foi recebido o valor 1 (correspondente a pressionar o push button), acionamos a LED. Caso contrário, deixamos ela desligada.


#include "heltec.h"

#define BAND 433E6
char st;
void setup () {
Heltec.begin (verdadeiro, verdadeiro, verdadeiro, verdadeiro, banda);
pinMode (12, OUTPUT);
}

void loop () {
int packetSize = LoRa.parsePacket ();

if (packetSize) {
Serial.print ("Pacote recebido '");

while (LoRa.available ()) {
st = (char) LoRa.read ();
Serial.println (st);
}

if (st == '1')
digitalWrite(12,HIGH);
outro
digitalWrite(12,LOW);

Serial.print ("'com RSSI");
Serial.println (LoRa.packetRssi ());
}
}

Com o upload dos códigos feitos, teremos o resultado ilustrado no gif abaixo.

O funcionamento da rede LoRa é bem complexo e, portanto, caso você queira se aprofundar, recomendo que antes de estudá-lo, você tenha sólidos conhecimentos dos modelos e topologias de redes.

 

Conclusão

Nesse tutorial exploramos a placa ESP32 LoRa WiFi SX1278, capaz de realizar comunicação LoRa. Vimos como fazer leituras e escritas tanto digitais quanto analógicas. Por fim, implementamos um projeto de comunicação com duas placas, enviando dados em uma e recebendo na outra. Há muito mais o que ser explorado no âmbito da Internet das Coisas com essa poderosa placa.

 

Referências

[1] Augustin, A., Yi, J., Clausen, T. e Townsley, W. (2016). Um estudo de LoRa: Redes de longo alcance e baixo consumo de energia para a Internet das coisas. Sensors16 (9), 1466.

Categorias
ESP32

Bacharel em Ciência da Computação pela URI – Campus de Santo Ângelo, com experiência no desenvolvimento de pesquisas em Robótica e prototipação de Sistemas Robóticos.
Sem Comentários

Enviar Resposta

*

*

Sobre nós

Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

Sugestões
  • O Projeto Arduino de Irrigação Automática nos mostra que sempre existe algo escondido que nos arranca um sorriso e nos deixa impressionado. Conhecimento nunca é de mais e desbravar...
  • O ESP32 LoRa WiFi é uma pequena placa de desenvolvimento que integra três formas distintas de comunicação: Wifi, Bluetooth e a rede de comunicação de longo alcance – LoRa...
  • Adicionar em um Projeto ESP32 um Display torna a visibilidade de dados muito mais interessante. Nesse tutorial, demonstraremos como conectar um display de 16×2 em uma ESP32. Utilizaremos também...
  • Continuando a série de tutoriais sobre Micropython ESP32, iremos desenvolver alguns projetos para exemplificar o seu uso. Em todos os exemplos, estaremos utilizando o uPyCraft IDE. O entendimento do...

Artigos Relacionados

  • Projeto ESP32 com Display 16×2

    Adicionar em um Projeto ESP32 um Display torna a visibilidade de dados muito mais interessante. Nesse tutorial, demonstraremos como conectar um display de 16×2 em uma ESP32. Utilizaremos também...
  • Micropython ESP32: Parte 2

    Continuando a série de tutoriais sobre Micropython ESP32, iremos desenvolver alguns projetos para exemplificar o seu uso. Em todos os exemplos, estaremos utilizando o uPyCraft IDE. O entendimento do...
  • Micropython ESP32: Parte 1

    Micropython ESP32 é uma linguagem de programação compacta, porém eficiente, derivada de Python 3. Ela inclui diversas subfunções da biblioteca padrão do Python e é otimizada para rodar em...
  • Projeto ESP32 com Display OLED e Sensor AM2302 DHT22 Medindo Temperatura e Umidade

    Nesse Projeto ESP32 com Display iremos usar o Sensor AM2302 para exibir informações de temperatura e umidade no display integrado do NodeMCU ESP32 Display OLED. Veremos como utilizar a...