Configuração do Gateway RAK 831 na The Things Network (TTN)

Adail Silva

TTN_Teresina TTN_Tianguá

Posted on 15-09-2020

Configuração do Gateway RAK 831 na The Things Network (TTN).
Por: Adail Silva.

Este pequeno tutorial mostrará aos interessados como configurar seu próprio gateway LoRaWAN para trabalhar em conjunto com a TTN, é desejável que o maker já tenha conhecimento prévio sobre comandos no Linux e as GPIOs do Raspberry Pi.

Mas afinal, o que é LoRa e LoRaWAN?
As Tecnologias LoRa™ e LoRaWAN™ são especificações de rede de área ampla de baixa potência as chamadas LPWAN, destinada a coisas operadas por baterias, sem fio em uma rede regional, nacional ou global. O protocolo LoRaWAN visa os principais requisitos da Internet das Coisas, como serviços de comunicação bidirecional segura, mobilidade e localização. Em resumo LoRa é a tecnologia de Rádio por sua vez LoRaWAN o protocolo empregado, não sendo este último de uso obrigatório, ou seja, podemos fazer uso de rádios LoRa sem o protocolo LoRaWAN, porém assim trabalharão sem os benefícios da pilha deste protocolo, passando a ser de total responsabilidade do desenvolvedor todas os comportamentos referentes a transmissão. Como exemplo a segurança dos dados trafegados, que já é intríseca quando em um mesmo cenário faz-se uso do protocolo LoRaWAN que traz duas camadas de criptografia AES-128 no transportes dos dados nos payloads dos pacotes, chaves estas que são colocadas no momento da transmissão ainda na parte do nó e retiradas uma a uma em estágios diferentes da recepção, no caso de um uplink a primeira no NetworkServer e a última no Application Server, tornando muito pouco provável um ataque com sucesso por hackers ao conteúdo da transmissão. Apenas os metadados da transmissão trafegam em texto plano sem nenhum tipo de criptografia.

O tráfego nessa rede sempre poderá ser bidirecional:

UPLINK é o termo do tráfego do Nó até o Network Server;
Porém aqui vou descrever até onde vai segundo a visão do usuário,
que será do Sensor até a aplicação final:
Dado > Sensor> MCU > Rádio LoRa > (Transmissão LoRa/AR aqui)
> Gateway > Bridge > NetworkServer > ApplicationServer > Integração
> Back e Front-End da Aplicação do usuário final (Desktop, Web ou Mobile).

DOWNLINK é o termo do tráfego do Network Server até o Nó;
Porém aqui vou descrever até onde vai segundo a visão do usuário,
que será da aplicação final até o atuador:
Front e Back-End da Aplicação do usuário final (Desktop, Web ou Mobile)
> Integração > ApplicationServer > NetworkServer > Bridge
> Gateway > (Transmissão LoRa/AR aqui) > Rádio LoRa > MCU > Atuador > Ação.

Nota:
A uma solução física de Hardware e Software damos o nome de Mote, ou seja uma MCU (microprocessador) com a Pilha LoRaWAN embutida (firmware seguindo o protoloco) e um Rádio LoRa devidamente acoplado. Há vários Motes à venda no mercado, comumente encontramos alguns com interfaceamento via Comandos AT mas também há desses hardwares que possuem comandos mais peculiares ao fabricante, como é o caso do RN2903 da Microchip (manual).

Principais recursos da tecnologia LoRa e do protocolo LoRaWAN

GEOLOCALIZAÇÃO: Permite aplicações de rastreamento de baixa consumo e sem necessidade de um GPS;

BAIXO CUSTO: Reduz os custos de três maneiras: investimento em infraestrutura,
despesas operacionais e sensores de nó final;

PADRONIZADO: A interoperabilidade global aprimorada acelera a adoção e a implantação
de redes baseadas em LoRaWAN e aplicativos de IoT;

BAIXA POTÊNCIA: Protocolo projetado especificamente para baixo consumo de energia,
prolongando a vida útil da bateria em até 20 anos;

LONGA DISTÂNCIA: A estação rádio-base única fornece uma penetração profunda em
regiões urbanas/internas e densas, além de conectar áreas rurais a até 30 quilômetros de distância em média;

SEGURO: Criptografia AES128 de ponta a ponta incorporada;

ALTA CAPACIDADE: Suporta milhões de mensagens por estação rádio-base, ideal para
operadores de redes públicas que atendem a muitos clientes.

O RAK 831 é um front-end de LoRa Radio, ou seja, ele atua como um receptor de pacotes de dados LoRa recebidos e os encaminha para um host de software/hardware de gerenciamento agregado. Ele também pode transmitir pacotes de dados LoRa com base na solicitação de placas host. No nosso caso, um Raspberry Pi 3 é a placa host que controla o front-end RAK 831.
Iremos utilizar o Raspbian versão Lite como Sistema Operacional, Download do Raspbian versão LITE aqui.

Escolhendo o retorno da rede (backhaul):

Refere-se a como o Raspberry Pi será conectado à Internet. Este guia se concentra no uso de Wifi como backhaul, mas você também pode usar Ethernet ou 3G/4G. Se você possui Ethernet disponível perto do gateway, prefira-a através de WiFi ou 3G/4G. Isso ocorre porque ter um sinal de rádio adicional dentro do gabinete causará ruído. O software pode lidar com o ambiente barulhento, por isso não é um grande problema, mas quanto menos barulhento, melhor. Você pode combinar essa opção com o Power-over-Ethernet para minimizar o cabeamento até o gateway.

Por outro lado, se você escolher WiFi em vez de Ethernet, tente usar um dongle com antena externa e mova a antena para fora do gabinete para ter menos ruído dentro da caixa.

Configure o hardware:
Antes de conectar qualquer coisa e ligar, vamos fazer as seguintes configurações no raspberry pi e no módulo RAK 831:

RASPBERRY Pi
1) Obtenha a placa Raspberry Pi 3 e prepare um cartão micro SD de 8GB (no mínimo) com o software raspbian lite instalado.
Sobre como gravar o sistema operacional no cartão SD, siga as instruções: aqui

2) Conecte o raspberry pi à fonte de alimentação 5v 2amps. ISTO É MUITO IMPORTANTE. O módulo LoRa pode obter um pico de 700 mA durante transações sem fio ativas e, portanto, possui um bom poder de potência para alimentar o Raspberry Pi.

RAK 831
1) Antes de ligar a placa, pegue as antenas que acompanham o kit e conecte-as ao terminal de parafuso das antenas.
NÃO SE PODE LIGAR O GATEWAY SEM ANTENA!

É essencial ter certeza de conectar os pinos da fonte de alimentação corretamente para evitar danos à placa RAK 831.

Ative o SPI:
O periférico SPI não está ativado por padrão. Para habilitá-lo, faça o seguinte:

a) Execute sudo "raspi-config" no terminal do raspbian no raspberry pi;        
b) Use a seta para baixo para selecionar 9 Opções avançadas;
c) Seta para baixo para A6 SPI;
d) Selecione sim quando solicitar que você ative o SPI;
e) Selecione sim quando perguntar sobre o carregamento automático do módulo do kernel;
f) Use a seta para a direita para selecionar o botão "Finalizar";
g) Selecione sim quando solicitar a reinicialização.

O sistema irá reiniciar. Quando voltar, faça login e digite o seguinte comando:

$ ls /dev/*spi*

O Pi deve responder com:

$ /dev/spidev0.0 /dev/spidev0.1

Eles representam dispositivos SPI no chip habilitam os pinos 0 e 1, respectivamente. Esses pinos são conectados dentro do Pi. Normalmente, isso significa que a interface suporta no máximo dois periféricos, mas há casos em que vários dispositivos podem ser conectados em série, compartilhando um único sinal de habilitação de chip.

Forneça energia à placa:
Como em qualquer projeto sem fio, eles tendem a exigir mais energia do que a placa host pode fornecer através dos pinos de suprimento. Os dois esquemas abaixo enumeram como você pode alimentar o RAK 831 e o raspberry pi 3.

1) Ligue o trilho de 5v a partir do Raspberry Pi;
2) Ligue o trilho de 5v ao Raspberry Pi e RAK831 separadamente.

INSTALAÇÃO DO SOFTWARE (Packet Forwarder da Semtech):
No Raspberry Pi, execute as seguintes etapas para instalar o software essencial:

Ative o SPI:
Use o utilitário "raspi-config" para ativar o SPI (Quinta [5] Opções de interface -> P4 SPI) e também expandir o sistema de arquivos (Sétima [7] Opções avançadas -> A1 Expandir sistema de arquivos):

$ sudo raspi-config

Agora verifique se o git está instalado e se já está atualizado com os seguintes comandos:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install git

Gerencie sua conexão wifi no Raspberry PI:
Configure as credenciais do WiFi

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

E adicione o seguinte bloco no final do arquivo, substituindo SSID e senha para corresponder à sua rede:

network={
ssid="Seu_SSID_da_sua_rede_WiFi"
psk="Senha_do_seu_WiFi"
}

Agora sim podemos de fato começar a instalação e configuração do encaminhador de pacotes da Semtech (empresa que tem a patente da tecnologia LoRa)

Clone o instalador e inicie a instalação:

$ git clone https://github.com/AdailSilva/RAK831-LoRaWANGateway-RPi ~/rak831-lorawangateway
$ cd ~/rak831-lorawangateway
$ sudo ./install.sh

Em seguida, veremos algumas mensagens. Basta pressionar a tecla Enter para manter o padrão ou digite suas informações, se desejar.

  Hostname [rak831-gateway]:
  Region AS1, AS2, AU, [BR], CN, EU, IN, KR, RU, US, EU: *Brasil já é o padrão.
  Latitude in degrees [0.0]:
  Longitude in degrees [0.0]:
  Altitude in meters [0]:

Esta etapa é opcional. Por padrão, o GPS está desativado. Se você deseja usar o GPS:

1) Conecte a antena do GPS.
     Para melhores resultados de GPS, a antena deve ser colocada do lado de fora com uma visão clara do céu.
     A antena precisa ter uma linha de visão aberta para os satélites GPS no céu.

   2) Em seguida, modifique /opt/rak831-gateway/packet_forwarder/lora_pkt_fwd/local_conf.json e remova o comentário do seguinte conteúdo:

      . 
      "gateway_conf": {
        :
        "gps_tty_path": "/dev/ttyS0",
        "fake_gps": false
        :
        }
        *Cuidado com as vírgulas. O arquivo JSON deve ser válido!

3) Reinicialize o gateway depois que o arquivo local_conf.json for modificado.

Agora você tem um gateway em execução após a reinicialização! :-)

Agora você poderá editar os arquivos principais de configurações do encaminhador de pacotes da Semtech (local_conf.json e global_conf.json)

Algumas entidades configuráveis no global_conf.json:
O arquivo global_conf.json pode ser encontrado em /opt/rak831-gateway/bin/global_conf.json na base do diretório do seu projeto após a execução do script de instalação. Aqui está uma lista de algumas entidades que você pode querer editar no arquivo global_conf.json para sua configuração de gateway específica:

1) configuração "radio_0" ou "radio_1", especialmente o parâmetro Frequency e os parâmetros de varredura de frequência mínima e máxima.

2) "gateway_conf", Especialmente o ID do gateway ou o EUI do seu gateway.

3) porta para cima e para baixo do servidor no mesmo objeto gateway_conf, juntamente com o endereço do servidor TTN do endereço do seu próprio servidor de aplicativos, se disponível.

Setando o pino Correto de Reset para o RAK 831:
Sempre que iniciarmos o Raspberry Pi, é uma boa prática redefinir o módulo LoRa RAK 831 anexado. Existem duas maneiras de fazer isso:

Via script Shell:
Um pequeno script de shell pode ser gravado para redefinir o RAK 831 antes que o driver LoRa possa acessar o hardware. O conteúdo do script de shell pode se parecer com o exemplo a seguir (que pressupõe que o GPIO 17 (pino 11) do Raspberry Pi está conectado ao pino de redefinição do RAK831):

#!/bin/bash 
echo "17" > /sys/class/gpio/export 
echo "out" > /sys/class/gpio/gpio17/direction 
echo "1" > /sys/class/gpio/gpio17/value 
sleep 5 
echo "0" > /sys/class/gpio/gpio17/value 
sleep 1 
echo "0" > /sys/class/gpio/gpio17/value

Essas linhas podem ser armazenadas em um arquivo chamado "rak831_reset.sh". O usuário deve chamar esse script uma vez após cada inicialização para obter o IC do concentrador em um estado limpo.

Via fiação Pi:
Se o sistema host for um Raspberry Pi, o usuário poderá escrever um pequeno C-Tool para redefinir o RAK831. Para acessar os pinos GPIO do Raspberry Pi, existe uma biblioteca chamada "wiringPi "que cuida dos detalhes de baixo nível. A biblioteca pode ser baixada em http://wiringpi.com. Consulte este site para obter instruções de instalação e uso. O conteúdo do arquivo RAK831_reset.c pode ter a seguinte aparência:

#include < wiringPi.h > 
#include < unistd.h > 
#define GPIO_RESET_PIN 0 // Veja o mapeamento de pinos para a wiringPi!
int main() { 
wiringPiSetup(); 
pinMode(GPIO_RESET_PIN, OUTPUT); 
digitalWrite(GPIO_RESET_PIN, HIGH); 
sleep(5);

O usuário deve chamar essa ferramenta uma vez após cada inicialização para obter o IC do concentrador em um estado limpo.

$ gcc -Wall -o blink blink.c -lwiringPi 
$ sudo ./blink

No meu github já deixei exemplo de configurações válidas para os arquivos local_conf.json e global_conf.json de acordo com o plano de frequências aqui no Brasil adotado:
AU915-928 (australiano)

LOCAL

GLOBAL

Registre o gateway na rede TTN:
Para que seus nós enviem dados para a nuvem, o TheThingsNetwork fornece um serviço de nuvem para analisar e armazenar os dados enviados pelos nós lora por meio de um gateway lora. Você precisa se registrar no thethingsnetwork.org e seguir as instruções para registrar seu gateway:

https://www.thethingsnetwork.org/docs/gateways/registration.html

Aqui está um resumo visual sobre a arquitetura de uma Rede LoRa com LoRaWAN completa, parte dela foi acima configurada: