Diariamente, podemos ver uma evolução clara dos módulos/kits de desenvolvimentos disponíveis no mercado. Além disso, tão importante quanto a evolução em si, tais módulos apresentam preços cada vez mais acessíveis, permitindo que muitos comprem estes hardwares e façam projetos interessantes, o que impulsiona e fortalece a comunidade maker e futuros profissionais da área.
Um dos módulos que abriu muitas possibilidades neste quesito foi o NodeMCU (ESP8266 + periféricos), analisado e revisto aqui neste link. Mais recentemente, o ESP32 (sucessor dos ESP8266) surgiu e com ele vieram módulos / kits de desenvolvimento muito úteis para projetos de Internet das Coisas. Dentre os módulos que usam como base o ESP32, destaco o ESP32 Wi-Fi LoRa, também conhecido como WiFi LoRa 32(V2) (do fabricante HELTEC), assunto deste artigo. Além de contar com o poderoso ESP32, este módulo conta com um rádio LoRa, abrindo assim uma gama de possibilidades de projetos IoT. E é justamente dele que este artigo se trata: apresentação do módulo WiFi LoRa 32(V2), inclusive te ensinando a fazer seu primeiro programa para o módulo.
Módulo - overview
O módulo WiFi LoRa 32(V2), fabricado pela empresa HELTEC, trata-se de um poderoso módulo dotado de conectividade wi-fi, bluetooth e LoRa, além de contar com um display OLED. Ele pode ser observado na figura 1, juntamente com sua antena para o rádio LoRa.
Em resumo, as especificações técnicas deste módulo são:
- ESP32, trazendo com ele, conectividade wi-fi e bluetooth
- Frequência de operação: 240MHz
- Memória Flash: 64M-bits
- Wi-Fi: 802.11 b/g/n/e/i
- Bluetooth: suporta o Bluetooth “tradicional” e BLE
- Display OLED 0.96” da cor azul
- Rádio LoRa, utilizando como chip o SX1276 ou SX1278, e com sensibilidade de recepção de -139dBm
- Alcance máximo do LoRa (utilizando antena oferecida no módulo): 3Km em áreas não urbanas / abertas.
- Frequências de LoRa disponíveis: 868-915, 923MHz (para o chip SX1276) 433-510MHz (para chip SX1278).
- Range de temperatura para operação: de -40°C até + 80°C
- Tensão de alimentação: 5V
Em suma, podemos observar que se trata de uma solução completa para a grande maioria dos protótipos e projetos de pequeno e médio porte que envolvam IoT.
Para mais informações, consulte as informações do módulo presente no site do fabricante oficial: http://www.heltec.cn/project/wifi-lora-32/?lang=en
Pinagem
A pinagem do módulo WiFi LoRa 32(V2) pode ser vista na figura 2.
Porém, devemos prestar atenção nos seguintes pontos importantes relacionados a pinagem deste módulo:
O display OLED utiliza GPIOs para comunicação I²C diferentes daqueles assumidos por grande parte das bibliotecas disponíveis. Portanto, na Arduino IDE, utilize a chamada “Wire.begin(OLED_SDA_PIN, OLED_SCL_PIN);” antes da inicialização de qualquer biblioteca de display OLED.
Sobretudo se você não for utilizar LoRa em seu projeto, não utilize os GPIOs que constam funções do LoRa para outras funcionalidades (GPIOs 26, 27, 14, 18, 5 e 19). Isto diminui a chance de curtos e concorrência de sinais.
Sobretudo se você não for utilizar o display OLED em seu projeto, não utilize os GPIOs que constam funções do display (GPIOs 4 e 15). Isto diminui a chance de curtos e concorrência de sinais.
As entradas analógicas do módulo suportam no máximo 1,8V. Qualquer valor acima disso nas entradas analógicas pode danificar o módulo.
A corrente máxima que um GPIO configurado como output pode fornecer é 12mA. Não respeitar este limite significa, muitas vezes, danificar o ESP32.
Os GPIOs configurados como input suportam, no máximo, 3,3V. Não respeitar este limite significa, muitas vezes, danificar o ESP32.
Segundo recomendações do fabricante, não ligue o módulo com a antena do rádio LoRa desconectada
Utilização do módulo com a Arduino IDE
Agora chegou a hora de configurar a Arduino IDE para programar os módulos WiFi LoRa 32(V2). Antes de mais nada, assegure-se de estar com a versão mais recente da Arduino IDE instalada. para isso, baixe e instale a versão mais recente da Arduino IDE aqui: https://www.arduino.cc/en/main/software
Assim que estiver com a Arduino IDE mais atual instalada, siga o procedimento abaixo. Infelizmente, as bibliotecas originais do fabricante possuem algumas falhas para comunicação com o display OLED e o chip LoRa, desta forma eu preparei o procedimento de forma a contornar esses problemas e permitir que você a aproveitar 100% da placa sem falhas relativas às bibliotecas.
1. A primeira coisa a ser feita é instalar as bibliotecas básicas para uso do ESP32. Para isso, siga este ótimo tutorial de Fernando K.
2. Após o procedimento acima, é hora de instalar a biblioteca para utilizar o rádio LoRa. Para isso, baixe o arquivo zip da biblioteca clicando aqui.
Na Arduino IDE, vá em Sketch > Include Library > Add .zip Library. Na janela que surgir, vá até a pasta que você salvou a biblioteca baixada, clique sobre o arquivo .zip e clique em Ok
3. Feito isso, a biblioteca está adicionada e pronta para uso.
IMPORTANTE: a biblioteca considera que o chip LoRa está ligado em pinos diferentes dos que estão ligados no módulo WiFi LoRa 32(V2). Desta forma, para utilizar a biblioteca sem problemas, inclua em seu programa os seguintes defines:
#define SCK_LORA 5
#define MISO_LORA 19
#define MOSI_LORA 27
#define RESET_PIN_LORA 14
#define SS_PIN_LORA 18
E, ao inicializar o chip LoRa, utilize o seguinte código:
SPI.begin(SCK_LORA, MISO_LORA, MOSI_LORA, SS_PIN_LORA); LoRa.setPins(SS_PIN_LORA, RESET_PIN_LORA, LORA_DEFAULT_DIO0_PIN); if (!LoRa.begin(BAND)) Serial.println("Falha ao iniciar radio LoRa");
else Serial.println("Radio LoRa inicializado corretamente");
4. Agora, é o momento de instalar a biblioteca do display OLED. Para isso, vá em Sketch > Include Library > Manage Libraries. No campo de busca, digite “ADAFRUIT SSD1306” procure pela biblioteca da Adafruit, conforme mostra a figura 3.
5. Em “Select Version” selecione a versão mais recente e clique em “Install”. Após alguns segundos, a biblioteca estará instalada e pronto para uso.
IMPORTANTE: o display OLED utiliza GPIOs para comunicação I²C diferentes daqueles assumidos por grande parte das bibliotecas disponíveis. Portanto, na Arduino IDE, utilize a chamada “Wire.begin(OLED_SDA_PIN, OLED_SCL_PIN);” antes da inicialização de qualquer biblioteca de display OLED. Em termos de código-fonte, ficaria assim:
Utilizar os seguintes includes:
#include
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Ao declarar o objeto:
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, 16);
Ao inicializar:
Wire.begin(4, 15);
display.begin(SSD1306_SWITCHCAPVCC, 0x3c)
6. Repita os passos 4 e 5 (nas partes referentes à instalação da biblioteca) para a biblioteca “Adafruit GFX Library”. Ela também é necessária para se utilizar os displays OLED.
7. Repita os passos 4 e 5 (nas partes referentes à instalação da biblioteca) para a biblioteca “Heltec ESP32 Dev-Boards”. Ela é necessária para se conseguir comunicação e acesso a alguns recursos do módulo.
8. Pronto, agora você possui bibliotecas para aproveitar 100% dos recursos do módulo WiFi LoRa 32(V2).
Seu primeiro programa para o módulo WiFi LoRa 32(V2)
Com todas as bibliotecas necessárias instaladas, você está pronto para fazer seu primeiro programa para o módulo WiFi LoRa 32(V2). Neste primeiro programa, será escrito no display OLED algumas informações (incluindo um contador de tempo de placa ligada, em segundos), de modo que você tudo que você irá precisar para rodar o exemplo será do módulo e um cabo micro-USB (usado para programação e alimentação).
O código-fonte está abaixo:
/* Includes para header files das biliotecas do OLED */ #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> /* Endereço I2C do display */ #define OLED_ADDR 0x3c /* distancia, em pixels, de cada linha em relacao ao topo do display */ #define OLED_LINE1 0 #define OLED_LINE2 10 #define OLED_LINE3 20 #define OLED_LINE4 30 #define OLED_LINE5 40 /* Configuração da resolucao do display (este modulo possui display 128x64) */ #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 /* Objeto do display */ Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, 16); /* Variaveis */ int contador = 0; /* Funcao setup */ void setup() { /* inicializa display OLED */ Wire.begin(4, 15); if(!display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) Serial.println("Display OLED: falha ao inicializar"); else { Serial.println("Display OLED: inicializacao ok"); /* Limpa display e configura tamanho de fonte */ display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); } } /* Programa principal */ void loop() { display.clearDisplay(); display.setCursor(0, OLED_LINE1); display.println("Ola!"); display.setCursor(0, OLED_LINE2); display.println("Programa:"); display.setCursor(0, OLED_LINE3); display.println("teste oled"); display.setCursor(0, OLED_LINE4); display.print("Tempo ligado: "); display.setCursor(0, OLED_LINE5); display.print(contador); display.println("s"); display.display(); contador++; delay(1000); }
Antes de compilar e rodar, certifique-se que a placa do Heltec_Wifi_LoRa_32 esteja selecionada em Tools > Board. Para compilar e rodar, basta fazer exatamente como outro Arduino qualquer.
A figura 4 mostra o projeto funcionando:
Conclusão
Neste artigo, conhecemos o módulo WiFi LoRa 32(V2) e vimos suas principais características, as quais se destacam o poder computacional do ESP32 e as possibilidades de conectividade do módulo (Wi-Fi, Bluetooth/BLE e LoRa). Tais características transformam este módulo em um item completo para protótipos e projetos de pequeno e médio porte.
Além disso, foi ensinado como se instalar as bibliotecas para todos os periféricos do módulo e como programá-lo via Arduino IDE, abrindo possibilidades para você construir os mais diversos projetos.