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).

 

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.

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..

 

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.

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.
6 Número de Comentários
  • Allan C GARCIA
    26 agosto 2019 at 15:05
    Deixe seu Comentário

    Muito bem explicado, só não entendi quando você manda o contador no sender na transmissão, que está sem definição de variável.

    O conteúdo fez eu entender algumas coisas que estava me deixando doido já kkk Agora o proximo projetinho já vai ter mais especificações em LoraWAn VLW.

    • luiz cancela
      3 dezembro 2020 at 19:10
      Deixe seu Comentário

      como vc resolveu este problema

    • Juliano
      27 abril 2021 at 22:52
      Deixe seu Comentário

      Allan, boa noite, explique por favor como resolveu esse problema. Abraço. Juliano

  • MARCELO MONTEIRO FARIASo
    23 agosto 2021 at 23:48
    Deixe seu Comentário

    No último exemplo, se eu quisesse comunicar duas placas com um mesmo receiver, só que acionando um led em outra porta, como ficaria o código.
    Obrigado gente.

  • jp
    15 setembro 2021 at 23:34
    Deixe seu Comentário

    Boa noite e no caso eu aperto o push button liga o led aperto novamente desliga o led

    • Matheus Gebert Straub
      28 setembro 2021 at 14:11
      Deixe seu Comentário

      Olá JP! Para isto é necessário fazer uma alteração no código, que ao invés de verificar o nível lógico do pino, irá incorporar um status ao seu projeto e este será responsável pelo controle do LED.

    Deixe seu Comentário

    *

    *

    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

    Artigos Relacionados