Gateway LoRaWAN da Radioenge Tutorial Completo

O Gateway LoRaWAN da Radioenge é o único gateway fabricado no Brasil que possui homologação da Anatel e é facilmente integrado com Raspberry pi e Banana Pi.

1 Gateway LoRaWAN para que serve?

O gateway LoRaWAN nada mais é do que um dispositivo que faz a ponte entre os “end devices” e o servidor, de modo que consiga chegar até a aplicação, resumidamente ele tem a mesma função que o modem da sua casa, se ele for interrompido todos os dispositivos ficarão sem acesso a internet, a imagem abaixo ilustra exatamente a comparação feita.

Estrutura LoRaWAN

2 Estrutura do gateway LoRaWAN

Nessa própria imagem é possível perceber que há dois dispositivos que estão dentro da unidade Gateway LoRaWAN e isso se da pelo simples motivo que o gateway é dividido em duas partes, a de processamento e a de comunicação LoRa.

2.1 Unidade de processamento

Na unidade de processamento é utilizado geralmente um Raspberry pi 3, porém o grande problema dessa infraestrutura é o alto custo do Raspberry e isso pode te gerar certos questionamentos se realmente precisar usar um mini computador ao invés de um microcontrolador como por exemplo um Arduino?

Vamos usar como exemplo a estrutura do LoRaMesh da Radioenge que é completamente gerenciada por um microcontrolador, em tese funciona muito bem, porém há situações que não é possível receber de múltiplos dispositivos e enviar ao mesmo tempo, pois a rede chega em um ponto que satura.

LoRaMESH da Radioenge

Embora seja relativamente possível contornar uma coisa ou outra através de código, há muita limitações de hardware que seria o mesmo de pegar um jogo atual e tentar rodar em um computador defasado, pode até conseguir rodar mas com muita dificuldade. É exatamente a mesma coisa para redes, é necessário que os pacotes sejam transacionados com facilidade e agilidade.



Um exemplo bem claro disso é os novos roteadores WiFi que basicamente utilizam um processador da mesma fabricante dos processadores utilizados nos Raspberry’s, pois para que seu roteador consiga entregar para vários dispositivos e ao mesmo tempo entregar agilidade dos pacotes, é necessário um processamento maior.

Placa de interface de rede que usa a mesma marca de processadores do Raspberry pi

Após entender a real necessidade do uso de um processador você pode se perguntar se de fato é necessário o uso de um Raspberry Pi 3 para montar um gateway LoRaWAN, afinal o custo além de ser elevado é muito acima da categoria de preço da Raspberry pi. Existem diversas placas alternativas, porém a que já testamos foi o Banana pi.

Há versões que podem seguir um conceito diferente do Raspberry pi e ter o mesmo propósito de aplicação, porém essas outras placas podem te dar maiores dores de cabeça para montar seu gateway LoRaWAN, pois toda estrutura usada aqui foi destinada ao Raspbian.

O Banana pi se encaixa muito bem em aplicações que são feitas para Raspberry, pois ele imita com muita qualidade toda a estrutura do Raspberry pi 3 só que em um hardware muito mais barato e com preço justo.

Demonstração de semelhança do Raspberry pi pzero w com o Banana pi m2 zero

2.1.1 Unidade comunicação LoRA

A segunda parte do gateway é composto por um hardware de RF que utiliza alguns chips que são dedicados para a aplicação do LoRaWAN, alguns desses chips são obrigatórios estar presente na placa e ouros não, como é o caso do GPS.

Identificação dos chips presentes na placa do gateway LoRaWAN da Radioenge
2.1.1.1 Concentrador SX1301

O SX1301 é um chip que contém um enorme mecanismo de processamento de sinal digital para bandas ISM. Um concentrador multicanal capaz de receber simultaneamente vários pacotes LoRa usando fatores de espalhamento aleatórios em aleatórios canais.

Este chip é chamado de concentrador justamente por reunir todos os chips de front-end em um só chip fazendo assim uma única comunicação com o MCU, então todo trabalho pesado quem faz é ele, os demais chips apenas são periféricos gerenciado por ele.

Diagrama de blocos do concentrador LoRaWAN

2.1.1.2 SX1257 ou SX1255


Como no diagrama esquemático acima, o concentrador usa dois blocos Tx/Rx sendo um deles obrigatório, porém não encontrei nenhuma gateway que use apenas um único bloco Tx/Rx.

Esses chips apenas são dedicados ao front-end da comunicação LoRa e são eles os responsáveis por amplificar o sinal recebido pelas antenas do gateway antes de ser processado pelo chip concentrador.

Comparativo entre os chips SX1255 e SX1257 responsáveis pelo front-end do LoRaWAN

Ambos os chips SX1257 e o SX1255 realizam as mesmas funções, existem algumas diferenças técnicas entre eles mas a principal é a faixa de frequência que no SX1257 é de 862 a 960MHz enquanto o SX1255 é de 400 a 510MHz.

2.1.1.2.1 Qual diferença do SX1257/SX1255 e o SX1276?

Em algum momento você pode ter se perguntado sobre a diferença entre esses dois chips, pois ambos são usados dentro da estrutura LoRaWAN.

Como já foi visto acima nos tópicos anteriores o gateway LoRaWAN tem o front-end e a unidade de processamento do sinal separado em chips dedicados além de ser multi-PHY.

No caso do SX1276 ele é como se fosse um front-end, porém com unidade de processamento interno, se você observar ao diagrama de blocos abaixo é possível enxergar o front-end muito parecido com o SX1257 e também alguns blocos do concentrador, claro que bem mais simples.

Diagrama de blocos do LoRa SX1276

2.1.1.3 GPS

O GPS é um componente fundamental em qualquer estrutura de comunicação de rede ampla, pois permite que os dispositivos conectados realizem processos de localização geográfica com base na trilateração dos gateway’s.

No gateway LoRAWAN, o GPS também fornece um sinal para o SX1301, esse sinal é responsável por sincronizar com precisão as mensagens recebidas. Sem uma sincronização precisa, é possível que pacotes sejam perdidos ou corrompidos, o que pode afetar negativamente a qualidade da rede.



Porém nem todo gateway LoRaWAN vai ter o hardware GPS integrado, então qual seria a melhor solução neste caso? Fazer com que o próprio MCU gere esse sinal, olha só o Banana pi gerando o timestamp:

Análise do sinal que sai do MCU e vai para o SX1301 emulando um timestamp do GPS

2.1.1.4 Função dos LEDs do Gateway

O gateway LoRaWAN da Radioenge tem no total de seis LED’s presentes na placa, cada um com uma função especifica, porém cinco desses LED’s são conectados as GPIO’s do SX1301 e durante o uso alguns deles poucos se manifestam.

Descrição dos LED's presentes no gateway  Radioenge

A imagem acima ajuda na identificação de cada um e da um norte sobre a funcionalidade deles, porém eu preciso esclarecer o funcionamento de cada um com base nos testes.

  • Status: Pisca apenas na inicialização do serviço (elcereza.service) e depois fica apagado o tempo todo;
  • Pwr: É um sinal dedicado para falar que a alimentação está presente, porém o único pwr que funciona é o que está no lado direito da placa;
  • GPS: Não vi em momento algum esse LED se manifestar, não sei se a ausência do chip GPS influenciaria ou o SX1301 pegaria o sinal do timestamp e ativaria ou não esse LED;
  • Tx: Liga toda vez que o gateway transmite algum sinal, ou seja, toda vez que tem um uplink;
  • Rx: Pisca toda vez que o gateway recebe algum downlink dos diapositivos.

O comportamento desses LED’s não estão associados ao hardware em si e sim na configuração do concentrador, porém mesmo após diversas tentativas de configura-los através do Json, nenhum resultado foi obtido e a provável causa disso está associado a alguma estrutura de nível mais baixo do Packet forwarder.

3 Especificações técnicas do Gateway LoRaWAN da Radioenge

Antes de continuarmos com a instalação dos recursos necessários para fazer todo o conjunto gateway se comunicar, é necessário primariamente entender algumas especificações técnicas para entender as limitações do hardware.

3.1 Consumo e alimentação

Uma extremamente importante que é necessário se atentar é em relação a alimentação do conjunto gateway, a tabela abaixo mostra as especificações apenas do gateway, porém você deve levar em consideração que também há o MCU que vai consumir bastante também.

Tabela de tensão e alimentação do gateway LoRAWAN da Radioenge

Os MCU tem um sistema de proteção que reduz o funcionamento para baixa fonte de energia, porém a baixa fonte de energia pode ser causada pelo um cabo de má qualidade.



No caso do Banana pi durante uma inicialização normal o LED vermelho fica piscando, indicando que há processamento, mas quando a fonte de energia é baixa ele pode piscar algumas vezes e depois ficar acesso de forma continua indicando um má funcionamento.

3.2 Pinout do gateway LoRaWAN e dos MCU

O gateway LoRaWAN da Radioenge vem em duas placas, uma é de fato o gateway e a outra é apenas uma placa de adaptação para ficar compatível com o Raspberry pi 3, então teremos dois pinout.

Pinout do gateway LoRaWAN da Radioenge e do MCU

É extremamente importante entender que toda estrutura do gateway foi pensado para o Raspberry pi 3 e no Raspberry pi 4 há uma pequena diferença que impede o funcionamento do gateway.

Gateway LoRaWAN no Raspberry pi 3

No Raspberry pi 4 a GPIO 7 (pino 26) aparentemente tem algum conflito com algum outro recurso, tudo indica que é relacionado ao bluetooth, porém o processo de solução disso pode ser muito trabalhoso e causar outros problemas, então é aconselhável que você use outra GPIO para realizar essa função.

4 Quem faz a mediação entre o gateway LoRaWAN e o MCU?

Todo computador ou celular além de ter o próprio sistema operacional, há também drivers que são uma série de códigos feitos para realizar uma comunicação entre dois hardwares diferentes, sem os drivers o software não funciona.



No caso do gateway o mesmo ocorre, o sistema operacional é o Linux Raspbian que roda o driver e software conhecido como Packet forwarder, é ele que realiza a comunicação SPI com o concentrador e ao mesmo tempo se comunica com o servidor LoRaWAN.

Porém para instalar o Packet forwarder existe todo um processo a ser feito, pois ele precisa de dependências e ser configurado corretamente para funcionar como esperado.

4.1 Instalação do Packet Forwarder

Como a instalação do Packet forwarder é um pouco chata de ser feita um erro pode simplesmente derrubar todo o funcionamento do gateway, por isso fizemos um código de instalação junto com alguns arquivos pré configurados e está disponível em nosso repositório no Github.

Porém antes de começar a instalar é recomendado que você use um sistema operacional recém instalado para evitar conflitos com outros programas. A instalação vai funcionar para qualquer MCU que rode o Raspbian e espelhe as GPIO’s do Raspberry pi, um exemplo de placa dentro desses requisitos é o Banana Pi M2 Zero.

Todo o processo de instalação vai ser feito via SSH e caso você saiba ativar e nem muito menos como usar isso, recomendo ler este post de como instalar o Raspbian no Banana Pi M2 Zero.

Após atender todos os requisitos acima, basta abrir o Putty ou qualquer aplicativo SSH de sua preferência e executar apenas esses quatro comandos à seguir para iniciar a instalação automática do packet forwarder.

git clone https://github.com/elcereza/pkt_fwd_raspbian
sudo mv pkt_fwd_raspbian/install.sh ./
sudo chmod +x install.sh
sudo ./install.sh
Iniciando instalação do packet forwarder no Raspbian

4.2 Configuração do gateway

Para finalizar a instalação é necessário configurar dois itens, porém um deles você só irá configurar caso realmente seja necessário, no caso do banana pi não será necessário, mas a outra configuração é indispensável para que de fato o gateway se comunique com um servidor corretamente, neste caso será a The Things Network (TTN). Caso você não saiba usar a TTN, recomendo ler este post antes de continuar com o tutorial, será necessário inclusive para cadastrar o gateway na plataforma.



4.2.1 Configuração do arquivo global_conf.json

Existem dois arquivos responsáveis pela configuração do gateway que no caso é o global_conf.json e o local_conf.json, ambos tem a função são usados para configurar o gateway LoRaWAN, porém o local_conf.json é destinado a uma configuração mais personalizada, enquanto o o global_conf.json é destinado para uma configuração mais generalista.

O arquivo de configuração local tem uma prioridade mais alta que o global, então quando ambos estão presentes o que vai valer de fato é o que está dentro de local.conf.json, porém neste caso só iremos usar o arquivo de configuração global.

Como existem inúmeros parâmetros evidentes e ocultos que são usados para configurar o gateway, não iremos abordar todos eels aqui, apenas o necessário para fazer o gateway LoRaWAW da Radioenge funcionar de forma adequada.

4.2.1.1 Configurando GPS

O GPS é um recurso extremamente imortante para qualquer grande rede, pois com ele é possível fazer um sistema de trialateração e estimar a posição de cada end device, além de indicar a rede aonde tem um gateway disponível. Porém nem todo gateway tem o hardware de GPS presente na placa, como é o meu caso.

O hardware não é tão importante assim, pois muita das vezes o gateway vai ficar parado em um local fixo, então é possível definir uma localização de forma manual e isso não afetará absolutamente nada.

Para configurar o GPS de forma automática (necessita o hardware GPS) basta apenas mudar o parâmetro “gps” para true e o “fake_gps” para false, desta forma:

"gps": false,
"fake_gps": true,     
"ref_latitude": -12.8994684640335,        
"ref_longitude": -38.3522173762322,
"ref_altitude": 30,
"gps_tty_path": "/dev/ttyS0",

No caso da ausência do hardware GPS basta usar o parâmetro “fake_gps” e para usa-lo basta definir como verdadeiro e colocar o “ref_latitude“, “ref_longitude” e “ref_altitude“. Ao habilitar o “fake_gps” o parâmetro “gps” é automaticamente subscrito, porém é bom definir como false.

"gateway_conf": {
        "gps": false,
        "fake_gps": true,     
        "ref_latitude": -12.8994684640335,        
        "ref_longitude": -38.3522173762322,
        "ref_altitude": 30,
        "gps_tty_path": "/dev/ttyS0",
        ...
}

4.2.1.2 Definindo manualmente a localização do gateway na TTN


Possa ser que a TTN não consiga identificar a localização mesmo após definir no arquivo global_conf.json, neste caso você poderá fazer essa modificação através do dashboard do gateway, clicando no texto que está destacado em verd na imagem abaixo.

Indicação de lugar aonde deve ser clicado para entrar no dasboard de localização do gateway

Após clicar no texto acima, vai aparecer esse mini mapa e ao clicar em uma posição desejada ele vai automaticamente atribuir o lat e long, porém você pode definir manualmente. No caso da altitude é interessante colocar com maior precisão possível, claro que se não tiver como medir estime um valor.

Editando localização do gateway LoRAWAN através da TTN

4.2.1.3 Identificador do gateway ‘Gateway_ID’

Existem algumas formas de definir um endereço para o gateway, porém uma das melhores formas é pegar o endereço MAC da placa de rede, neste caso foi pego do WiFi através do comando ifconfig.

Gerando um endereço único para o gateway LoRaWAN

Porém para o gateway_ID é necessário o uso de 8 bytes e o MAC address tem apenas 6, então adicionamos “FFFE” bem no meio do MAC address ficando “AC64FFFE0F1609“.

Lembrando que o gateway_ID precisa ser único, pois é através dele que a rede vai conseguir dizer qual gateway o end device se conectou.

"gateway_conf": {
       "gateway_ID": "XXXXXXFFFEXXXXXX",
        ...
}

4.2.1.4 Link do servidor da TTN

Para que o gateway consiga se comunicar de fato com o servidor, é necessário de um link e esse link vai variar de acordo com sua região, como no Brasil usamos o padrão Australiano o link a acaba sendo o que está marcado em verde.

Obtendo o link de direcionamento do servidor da The Things Network

4.2.2 Pino reset



Se você estiver usando o Raspberry pi 4 ou qualquer outra placa similar, possa ser que o gateway não funcione e a principal causa disso é o pino destinado ao reset do concentrador.

O reset embora pareça algo simples que é apenas uma mudança de estado lógico, é através dele que o MCU consegue iniciar as configurações através de um inicio, sem ele algumas configurações do concentrador se manterão e que poderão causar alguma anomalia no funcionamento.

Corrigir esse problema é extremamente simples, porém será necessário usar alguns jumpers para evitar gerar mais problemas ou se você tiver uma infraestrutura boa poderá montar uma placa para fazer essa conexão.

Para modificar o pino destinado ao reset do concentrador basta ir no diretório através do comando ‘cd /opt/elcereza‘ e editar o arquivo start.sh, para isso basta digitar ‘sudo nano /opt/elcereza/start.sh‘ e alterar o valor IOT_SK_SX1301_RESET_PIN para o pino desejado.

#!/usr/bin/env bash

IOT_SK_SX1301_RESET_PIN=7

echo "Accessing concentrator reset pin through GPIO$IOT_SK_SX1301_RESET_PIN..."

WAIT_GPIO() {
    sleep 0.1
}

iot_sk_init() {
    # setup GPIO 7
    echo "$IOT_SK_SX1301_RESET_PIN" > /sys/class/gpio/export; WAIT_GPIO

    # set GPIO 7 as output
    echo "out" > /sys/class/gpio/gpio$IOT_SK_SX1301_RESET_PIN/direction; WAIT_GPIO

    # write output for SX1301 reset
    echo "1" > /sys/class/gpio/gpio$IOT_SK_SX1301_RESET_PIN/value; WAIT_GPIO
    echo "0" > /sys/class/gpio/gpio$IOT_SK_SX1301_RESET_PIN/value; WAIT_GPIO

    # set GPIO 7 as input
    echo "in" > /sys/class/gpio/gpio$IOT_SK_SX1301_RESET_PIN/direction; WAIT_GPIO
}

iot_sk_term() {
    # cleanup GPIO 7
    if [ -d /sys/class/gpio/gpio$IOT_SK_SX1301_RESET_PIN ]
    then
        echo "$IOT_SK_SX1301_RESET_PIN" > /sys/class/gpio/unexport; WAIT_GPIO
    fi
}

iot_sk_term
iot_sk_init
sleep 3
#rm -f /var/run/packet_forwarder/packet_forwarder.pid
#touch /var/run/packet_forwarder/packet_forwarder.pid
#echo $! > /var/run/packet_forwarder/packet_forwarder.pid
#PIDFILE=/var/run/packet_forwarder/packet_forwarder.pid
#PATHEXEC=/opt/LoRa/packet_forwarder/lora_pkt_fwd
#NAMEEXEC=lora_pkt_fwd
#start-stop-daemon --start -m --pidfile $PIDFILE  --chdir $PATHEXEC --exec $PATHEXEC/lora_pkt_fwd
cd /opt/elcereza
./mp_pkt_fwd

5 Validando instalação e funcionamento do gateway

Mesmo embora tenha seguido o passo a passo acima possa ser que por algum motivo o gateway não entre em operação e para isso será necessário verificar alguns sinais.

5.1 Status da The Things Network

O sinal mais fácil que tem é através da plataforma LoRaWAN que o gateway está conectado, ela vai te dar um status de conexão, porém essa resposta pode ser atrasada ou até mesmo confusa.

verificação de status de funcionamento do gateway LoRaWAN através do dashboard da The Things Network

5.2 Medição de temperatura

Outro método que também pode funcionar até melhor que o anterior é através da analise de temperatura do conjunto MCU e gateway, pois ambos esquentam bastante quando estão em operação.

comparativo entre as temperaturas do gateway LoRaWAN ligado e desligado


5.3 Status do serviço ‘elcereza.service’

Uma outra forma bastante eficaz e rápido é através da análise do funcionamento do elcereza.service que é o serviço responsável por executar o arquivo start.sh assim que a inicialização do linux chega ao ponto de permitir login de usuários.

Para fazer essa verificação basta acessar o MCU através do protocolo SSH e digitar o comando systemctl status elcereza.service e ele retornará o status em uma bolinha, essa bolinha pode ter três cores, sendo elas:

  • Cinza: Não inicializou;
  • Vermelha: Tentou inicializar, mas deu algum erro;
  • Verde: Em operação.

Além dessa indicação, é possível inclusive acompanhar o processo de execução do serviço através do uso das setas do teclado, mas isso só é realmente interessante para caso da bolinha vermelha.

Verificando execução e funcionamento do serviço que iniciar o packet forwarder

6 Cuidados com o Gateway

Como sempre, todo hardware de radio frequência JAMAIS deve ser ligado sem a antena, pois as chances de queimar toda estrutura de comunicação é muito grande e no caso do gateway LoRaWAN todo o front-end poderá ser queimado.

Por mais que o front-end venha a queimar, provavelmente toda comunicação com o MCU e vai ocorrer perfeitamente, apenas deixando de funcionar a comunicação com os end devices.

7 Teste prático do Gateway LoRaWAN da Radioenge

O teste do gateway pode ser feito sem o uso de um end device, mas isso não seria um teste 100%, apenas um teste parcial do funcionamento. Então nesse caso vamos usar um módulo LoRaWAN da própria Radioenge para fazer uma comunicação inicial de teste.

Caso também esteja usando um módulo da Radioenge, recomendo ler o tutorial completo do módulo LoRaWAN da Radioenge, dessa forma você vai conseguir dominar 100% essa infraestrutura.



7.1 Diagrama exemplo

Como o módulo LoRaWAN da Radioenge tem diferença de tensão nos métodos de comunicação LoRaWAN, a tensão de operação do ESP32 que é de 3V3 acaba se encaixando com segurança nos dois métodos.

Diagrama esquemático do ESP32 com módulo LoRaWAN da Radioenge

7.2 Código Exemplo

O código a seguir utiliza a biblioteca LoRaWAN_Radioenge.h que está disponível para download via GitHub. Este exemplo já faz toda configuração automática do módulo, mas ele só vai se conectar a TTN caso esteja cadastrado.

#include "LoRaWAN_Radioenge.h"
 
LoRaWAN_Radioenge LoRa(&Serial2);
 
void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
   
  LoRa.begin(true);
  LoRa.printParameters();
 
  if(LoRa.JoinNetwork(OTAA, TTN, true, !true)) 
    LoRa.SendString("elcereza.com", 1);
   
   LoRa.pinMode(2, OUTPUT);
}
 
void loop() {
  LoRa.digitalWrite(2, 1);
  delay(5000);
  LoRa.digitalWrite(2, 0);
  delay(5000);
}

7.3 Teste prático

No lado esquerdo do vídeo é possível ver o funcionamento da biblioteca realizando todas as consultas para ver se está dentro dos parâmetros para o network server definido e logo após o módulo envia o texto “elcereza.com”.

Logo após ser enviado, o pacote é recebido e fica dentro de um parâmetro “frm_payload” do json, porém esse pacote recebido está em base64 e ficar legível é necessário fazer a conversão de base64 para string.

8 Agradecimento

Primeiramente gostaria de agradecer a Radioenge por ter reconhecido meu trabalho com o LoRaMESH e entrou em contato comigo para eu fazer conteúdo sobre LoRaWAN e me enviou dois módulos LoRaWAN, um gateway e uma antena.

Também não poderia deixar de mencionar o Adail Silva que foi meu mentor que me ajudou a instalar todas as dependências para o gateway se comunicar com o Banana Pi M2 Zero, sem isso não seria possível fazer nada disso, pois na região metropolitana da Bahia – Brasil não há cobertura da TTN e a ISO disponibilizado pela Radioenge não é compatível para Banana Pi.

Deixe uma resposta

Descubra mais sobre elcereza

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

Continue reading