GPIOs do LoRaMesh da Radioenge: Portas digitais

As GPIOs do LoRaMesh da Radioenge possibilita que possamos fazer aplicações de automação com um uso reduzido de hardware, dedicando apenas ao circuito de chaveamento (se necessário) e de alimentação.

No total temos no LoRaMesh 8 GPIOs sendo todas configuráveis como entrada ou saída digital e duas como leitura analógica. Porém neste post vamos apenas abordar as portas digitais.

Por qual motivo usar as GPIOs do LoRaMesh da Radioenge?

Em alguns casos possa ser que seja necessário fazer algum tipo de automação a distância sem que seja necessário adicionar um microcontrolador em cada slave, fora todo o firmware para se comunicar com o módulo. Um exemplo disso é o acionamento de válvulas de água para controle hídrico dentro de uma fazenda onde um único master pode controlar várias válvulas, respeitando as limitações de hardware é claro.

Como usar as portas digitais do LoRaMesh

Para usar as portas digitais do LoRaMesh da Radioenge, será necessário seguir a mesma lógica de uso das GPIO’s no Arduino IDE a única diferença é que precisamos definir o ID do dispositivo que vai ser destinado tal comando, visto que podemos acionar localmente ou remotamente.

  • pinMode(<ID>, <GPIO 5:6>, <OUTPUT : INPUT : INPUT_PULLDOWN : INPUT_PULLUP >);
  • digitalWrite(<ID>, <GPIO 0:7>, <LOW : HIGH>);
  • digitalRead(<ID>, <GPIO 0:7>);

Como você pode ver, não é nada anormal do que já é usado no Arduino IDE a não ser o fato de ter que por um ID na frente. No caso de leitura digital da GPIO5:6 teremos uma leitura analógica que será convertida em um sinal digital, ou seja, se definir esses pinos como leitura automaticamente estará definindo como entrada AD.

Uso das GPIO’s do LoRaMesh da Radioenge

Para esclarecer melhor o uso dessas GPIOs em especial as entradas e saídas digitais em uma aplicação real, vamos fazer dois acionamentos e uma leitura digital de forma remota para comprovar o funcionamento. No acionamento remoto o slave só precisa estar configurado com as mesmas configurações do master e estar alimentado e nada mais.

Porém no master precisamos de um microcontrolador para controlar o master e consequentemente gerenciar o mesh LoRa, nesse caso vamos usar um ESP32.

Circuito do master

No circuito do master é necessário que tenha um microcontrolador para fazer todo o gerenciamento da rede e consequentemente fazer as consultas e acionamentos.

ESP32 e LoRaMesh da Radioenge

Circuito do slave

O principal ponto do slave é a alimentação. Nesse circuito abaixo vamos acionar um relé, ter feedback do sinal que vai para o relé e também acionar um LED. No caso do feedback do relé não é necessário em aplicações práticas, pois o próprio módulo após acionar faz uma leitura do próprio estado e retorna isso para o master, na biblioteca há uma redundância de confirmação de acionamento da porta digital e caso o valor retornado não esteja condizente com o comando dado, será feito até mais duas tentativas.

Para acionar um relé com o módulo LoRaMesh o mais adequado é usar um relé 3V que é chaveado por um transistor, dessa forma fica mais fácil colocar tudo no mesmo VCC e deixar sendo alimentado por um mini sistema off grid com bateria 18650 por exemplo.

GPIOs do LoRaMEsh da Radioenge sendo controlado remotamente

Adquira os itens do slave

Código do master

Para que todo o processo funcione adequadamente é necessário baixar a biblioteca que está disponível através deste link do github. É importante entendermos que no LoRaMesh não podemos ter um delay baixo, pois o pacote na rede vai, passa pelos “repetidores” e volta ao master, então se colocarmos um delay baixo a rede vai saturar.

#include "LoRaMESH.h"

LoRaMESH LoRa(&Serial2);

uint8_t ID = 0;

void setup() {
  Serial.begin(115200);
  delay(2000);
  Serial2.begin(9600);
  LoRa.begin(true);

  if(LoRa.localId != ID)
  {
    if(!LoRa.setNetworkID(ID)){
      Serial.println("Erro ao definir o novo ID");
      while(1);
    }

    Serial.println("ID configurado com sucesso!");

    if(!LoRa.setBPS(BW500, SF7, CR4_5)){
      Serial.println("Erro ao configurar bps");
      while(1);
    }

    Serial.println("Parametros LoRa configurados com sucesso!");
    
    if(!LoRa.setClass(CLASS_C, WINDOW_15s)){
      Serial.println("Erro ao configurar a classe");
      while(1);
    }

    Serial.println("Modo de operacao configurado com sucesso!");

    if(!LoRa.setPassword(123)){
      Serial.println("Erro ao gravar a senha ou a senha gravada não condiz com a senha definida");
      while(1);
    }

    Serial.println("Senha configurada com sucesso!");
  }

  //if(ID == 0)
  LoRa.pinMode(1, 4, OUTPUT);
  LoRa.pinMode(1, 3, INPUT);


  Serial.println("LocalID: " + String(LoRa.localId));
  Serial.println("UniqueID: " + String(LoRa.localUniqueId));
  Serial.println("Pass <= 65535: " + String(LoRa.registered_password));
}

void loop() {
    
    static bool button_status = false;
    Serial.println("GPIO 3: " + String(LoRa.digitalRead(1, 3)));
    delay(1000);

    if(button_status)
      LoRa.digitalWrite(1, 4, 0);
    else
      LoRa.digitalWrite(1, 4, 1);

    delay(1000);
    
    button_status = !button_status;
}

Funcionamento das GPIOS do LoRaMesh da Radioenge

Como estava sem um relé 3V tive que por um circuito step up e um step down para alimentar o relé 5V, poderia só usar um step up mas recomendo o uso dessa topologia para prototipagem para evitar acidentes com elevação da tensão acima do desejado que pode ser ocasionado por N fatores.

De qualquer forma mesmo com essa topologia e alimentado com uma bateria de valor não especificado, o circuito se manteve operante por mais de 5 dias sem carregamento, o que é surpreendente para um protocolo como esse.

Deixe uma resposta

Descubra mais sobre elcereza

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continue reading