ESP32 e Radio Lora 10x mais potente!



Um Radio LoRa 10 vezes mais potente, de 1W, ao invés do 0.1W dos tradicionais. Esse é o módulo E44-TTL-1W, que vou te apresentar hoje. Posso dizer que esse modelo é “butinado”, pois tem um transistor na saída que amplifica seu sinal, estendendo seu alcance. Vamos configurar esse módulo para uso com MCU ou PC e criar um exemplo para comunicarmos o computador com um ESP32.


Destaco, no entanto, que potência não é tudo, pessoal. Um amigo me contou que, com 500 miliwatts, ele, com seu radio amador, chega até o Japão. Quero dizer, então, que potência ajuda, claro, mas não é tudo.


E44-TTL-1W

O E44-TTL-1W é um módulo transceptor sem fio de 1W com tecnologia de espalhamento espectral LoRa. Opera em 900 ~ 931MHz, com base no RFIC SX1276, importado, original da Semtech, transmissão transparente disponível, nível TTL.
As vantagens dos módulos são mais concentradas na densidade de potência e melhor desempenho anti-interferência.


O módulo tem a função de criptografia e compactação de dados.
A função de compactação de dados diminui o tempo de transmissão e a probabilidade de ser interferida, enquanto melhora a confiabilidade e eficiência de transmissão.
Esse módulo é TX RX, basicamente. Tem pinos de controle e alimentação, mas é ligado na Uart. Podemos dizer que esse modelo simplifica absurdamente a comunicação com LoRa.
Um detalhe é que, dentro desse chip, não é LoRaWAN, mas um protocolo proprietário LoRa da EBYTE.
Na imagem abaixo, podemos ver um STM8L151G, que gasta pouca corrente, além do famoso SX1276.




E15-USB-T2 v1.2

No lado esquerdo da imagem temos o módulo, que visualmente parece um pendrive, o qual será ligado ao computador. Na direita temos o esquema que mostra cada pino deste dispositivo.




Características

1.       LoRa
Alta confiabilidade. Possibilidade de ser interceptada extremamente baixa.
2.       Ultra-low power consumption
Ele suporta WOR (wake on radio) para reduzir o consumo geral de energia.
3.       Fixed transmission
O módulo pode se comunicar com outros módulos que trabalham em diferentes canais e endereços.
4.       Broadcast transmission
Configurar o endereço do módulo para 0xFFFF possibilita a comunicação com outros módulos no mesmo canal.
5.       FEC (Forward Error Correction)
Em caso de interferência repentina, é possível corrigir os pacotes de dados interferidos de forma proativa, de modo que a confiabilidade e a faixa de transmissão sejam melhoradas.
6.       Sleep Mode
Quando o módulo trabalha em modo sleep (modo 3), ele está disponível para configuração, não para transmitir e receber. (6μA)
7.       Watchdog
Possui um watchdog integrado. Quando ocorrer uma exceção, o módulo será reiniciado em 0,107 segundos e continuará a trabalhar de acordo com os parâmetros anteriores.
8.       Parameter saving
Os parâmetros serão salvos após a configuração e não serão redefinidos quando desligado.



Definição dos pinos





Modos de Operação





Configuração

Para entrar em modo de configuração, precisamos colocar o módulo E15-USB com os pinos indicando o modo Sleep. Para isso desconecte os jumpers indicadores dos pinos M0 e M1, como na imagem abaixo.


Faça download do programa RF Setting através do link: 



Abaixo vemos a tela de configuração utilizando o programa RF Setting




Veremos agora como configurar o nosso módulo:

1.       Abrir o programa RF Setting.
2.       Selecionar a porta COM correspondente ao módulo.
3.       Clicar em OpenPort para obter acesso.
4.       Agora, clique em GetParam para obter os parâmetros salvos no módulo.
5.       Modifique os parâmetros de acordo com sua necessidade. (Principais: UartRate, Address e Channel)
6.       Após modificar os parâmetros, clique em SetParam. Os dados agora estão salvos no módulo.
7.       Clique em ClosePort para encerrar a configuração com o módulo.

Caso queira resetar as configurações padrão, basta clicar em Preset.




Modo de uso

Após as configurações serem finalizadas, já podemos utilizar nosso módulo E44-TTL-1W para comunicação, tanto com um MCU(microcontrolador) quanto com um PC.
Para utilizar no PC, basta conectar o módulo E44-TTL-1W no módulo E15-USB, como na figura abaixo.




No PC

Lembrando que, para uso no computador, configuramos o modo através dos pinos do módulo E15-USB. A figura abaixo nos mostra como conectar/desconectar os jumpers para cada modo.




No MCU

Para usarmos com um microcontrolador, basta fazer as ligações como segue a figura abaixo.




Exemplo

Faremos agora um exemplo para controlar os LEDs e um Buzzer de um ESP32 através do computador. Os comandos serão enviados por um terminal e o ESP32 receberá através do radio Lora.




Funcionamento

PC envia dados através da Serial para o módulo, que transforma esses dados em radiofrequência Lora e envia. O módulo recebe os dados via rádio e envia para o ESP32, através da Serial.




Configurações

Os dois módulos E44-TTL devem estar configurados como a imagem abaixo.



No PC

Após conectar o módulo E44-TTL-1W no módulo E15-USB, coloque-o no computador e utilize algum terminal para comunicação Serial. Por exemplo, o Termite.



No ESP32

Faremos um programa que, ao receber dados do radio LoRa, verificará os comandos para controlar os Leds ou o buzzer.



Biblioteca

Adicione biblioteca “TM1637Display”.
Acesse o link e faça download da biblioteca.
Descompacte o arquivo e cole na pasta de bibliotecas da IDE do arduino.
C:/Program Files (x86)/Arduino/libraries



COMANDOS

Para esse projeto, criei o seguinte protocolo de comandos para controle:




No ESP32

Incluímos a biblioteca responsável para comunicação com o display e inicializamos o display nos pinos que definirmos.

//Biblioteca responsável para comunicação com o display de 7 segmentos
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 14
#define DIO 13

const uint8_t PIN_BUZZER  = 23;
const uint8_t PIN_LED1    = 22;
const uint8_t PIN_LED2    = 21;
const uint8_t PIN_LED3    = 19;
const uint8_t PIN_LED4    = 18;

//Inicializa o display nos pinos definidos acima
TM1637Display display(CLK, DIO);

String data = "";
int counterReceive = 0;

String idMCU = "MCU_1";


No Setup, configuramos o brilho do display, e seguimos para o Loop.

void setup() {
  Serial.begin(9600);
  //configura o brilho do display com valor máximo
  display.setBrightness(0x07);
  display.showNumberDec(0);
  configurePins();
}

void loop() {
  if(Serial.available())
  {
    while(Serial.available())
    {
      data+=(char)Serial.read();
    }
    data.replace("\n","");
    if(data.equals("CHECK"))
    {
      Serial.println(idMCU+" OK");
      counterReceive++;
      //imprime no display o valor lido
      display.showNumberDec(counterReceive);   
    }
    else
    {
      parserData();
      counterReceive++;
      //imprime no display o valor lido
      display.showNumberDec(counterReceive);      
    }  
    data = "";  
  }
}





parserData

Nesta etapa, procedemos com o parser dos dados recebidos e verificamos quais os comandos relacionados ao Led e ao Buzzer.

//faz o parser dos dados recebidos para identificar o comando
void parserData()
{
  char command = data[0];
//  Serial.print(command);
  if(command == 'L')
  {
    uint8_t led = data[1]-'0'; 
    uint8_t value = data[2]-'0';
    configureLed(led, value);
  }
  else if(command == 'B')
  {
    uint8_t value = data[1]-'0';
    digitalWrite(PIN_BUZZER, value);
  }
  else if(command == 'A')
  {
    uint8_t value = data[1]-'0';
    allLeds(value);
  }
}


ConfigureLed

Configuramos a ligação ou desligamento do Led de acordo com o valor passado.

void configureLed(uint8_t led, uint8_t value)
{
  switch(led)
  {
    case 1:
      digitalWrite(PIN_LED1, value);
      break;
    case 2:
      digitalWrite(PIN_LED2, value);
      break;
    case 3:
      digitalWrite(PIN_LED3, value);
      break;
    case 4:
      digitalWrite(PIN_LED4, value);
      break;
    default: break;
  }
}


allLeds & configurePins

Com AllLeds setamos o valor passado para todos os Leds de uma só vez. Ainda, configuramos o modo dos pinos como saída.

void allLeds(uint8_t value)
{
  digitalWrite(PIN_LED1, value);
  digitalWrite(PIN_LED2, value);
  digitalWrite(PIN_LED3, value);
  digitalWrite(PIN_LED4, value);
}
void configurePins()
{
  pinMode(PIN_BUZZER, OUTPUT);
  pinMode(PIN_LED1,   OUTPUT);
  pinMode(PIN_LED2,   OUTPUT);
  pinMode(PIN_LED3,   OUTPUT);
  pinMode(PIN_LED4,   OUTPUT);
}



Faça o download dos arquivos:

PDF

INO


Nenhum comentário:

Tecnologia do Blogger.