Teste de modems de rádio LoRa / LoRaWAN RN2483. Parte 1, LoRa

Uma das tecnologias interessantes da “Internet das Coisas” é a rede LoRa / LoRaWAN, mas no Runet elas praticamente não são descritas. É hora de preencher essa lacuna, e ainda mais interessante tentar "viver" como ela funciona.



O que é LoRa?


Esta é a tecnologia de comunicação de longo alcance proprietária da Semtech implementada em seus chips SX1272 e SX1276. LoRa é um protocolo de baixo nível sobre o qual protocolos de nível superior, como o LoRaWAN, podem ser implementados.

Uma característica do padrão LoRa é a transmissão de pequenos pacotes de dados com baixo consumo de energia. Segundo o fabricante, o alcance ao ar livre pode chegar a 10 km e a duração da bateria pode ser de vários anos. As frequências de operação variam de acordo com o país e são 433 ou 868 MHz (versão da UE) ou 915 MHz (versão dos EUA).

Como isso funciona? Detalhes sob o corte.

Para o teste, os módulos RN2483 foram selecionados. Eles são bons porque são fáceis de programar e suportam diferentes modos de operação. O RN2483 contém um chip SX1276 e um controlador em um compartimento, controlado pelos comandos UART, que permitem conectá-lo a qualquer dispositivo (PC, Arduino, microcontrolador, etc.). Você pode comprar um módulo sem amarrar, é mais barato, mas era muito preguiçoso para soldar, então um conjunto de duas placas prontas foi pedido no eBay.

Isso permite conectar os módulos a um PC via USB e a qualquer dispositivo.

Transferência de dados


Um simples programa Python foi escrito para a transferência:
Código fonte
import serial
from time import sleep

def deviceSend(device, cmd):
        try:
	  print cmd
          device.write(cmd + "\r\n")
          line = device.readline()
          if line is not None and len(line) > 0: 
            r = line.decode('utf-8').strip()
            print "> " +r        
            return
        except Exception as e:
	  pass

if __name__ == "__main__":
  port = serial.Serial(port="COM20", baudrate=57600, timeout=5)
  deviceSend(port, "sys reset")
  sleep(2)
  deviceSend(port, "mac pause")
  deviceSend(port, "radio set freq 868000000")
  # Output power, -3..15
  deviceSend(port, "radio set pwr -3")
  deviceSend(port, "radio set mod lora")
  # sf12, sf7  
  deviceSend(port, "radio set sf sf7")
  # Bandwidth: with 125KHz the sensitivity is better but time on air is longer. Chip is capable from 125KHz to 500KHz.
  deviceSend(port, "radio set bw 125")
  deviceSend(port, "radio tx 0123456789")
  sleep(0.5)                             
  line = port.readline()
  print line.strip()
  deviceSend(port, "mac resume")


Vamos analisar os principais parâmetros em mais detalhes.
pwr - power, pode variar no intervalo -3..15dB
frequência - frequência de transmissão
mac pause - desativa o modo lorawan, o modo de transferência entre dois dispositivos é ativado (p2p)
tx - pacote de dados
mod - tipo de modulação. 2 tipos estão disponíveis, lora ou fsk. largura de banda do espectro
bw , pode ser 125, 250, 500KHz. fator de propagação
sf , afeta a duração da transmissão.
É assim que o espectro se parece com sf7 e sf12 com a mesma quantidade de dados.


Como você pode ver, os dados são transmitidos em blocos curtos. O tamanho máximo do pacote não passa de 255 bytes. Após a conclusão da transmissão, o modem recebe a confirmação de que os dados foram enviados.

Recepção de dados


Para a recepção, é necessário definir os mesmos parâmetros da transmissão, caso contrário os modems não “ouvirão” um ao outro. O código é dado abaixo, o programa em um loop sem fim "escuta" os dados na porta serial.

Código fonte
import serial
from time import sleep

def deviceSend(device, cmd):
        try:
	  print cmd
          device.write(cmd + "\r\n")
          line = device.readline()
          if line is not None and len(line) > 0: 
            r = line.decode('utf-8').strip()
            print "> " +r        
            return r
        except Exception as e:
	  pass
        return ""

if __name__ == "__main__":
  port = serial.Serial(port="COM20", baudrate=57600, timeout=5)
  deviceSend(port, "sys reset")
  sleep(2)
  deviceSend(port, "mac pause")
  deviceSend(port, "radio set freq 868000000")
  # Output power, -3..15dB
  deviceSend(port, "radio set pwr -3")
  deviceSend(port, "radio set mod lora")
  # sf12, sf7  
  deviceSend(port, "radio set sf sf7")
  # Bandwidth: with 125KHz the sensitivity is better but time on air is longer. Chip is capable from 125KHz to 500KHz.
  deviceSend(port, "radio set bw 125")
  # WDT: 5s wait for each data
  deviceSend(port, "radio set wdt 5000")

  print "Start listening"
  try:
     while True:
       ans = deviceSend(port, "radio rx 0")
       if ans == "ok":
         r = port.readline().strip()
         if r != "err" and len(r) > 0:
           print "> " + r
	 # We need time to prepare RN2483 for the next receiving
         sleep(0.1)

  except KeyboardInterrupt:
     pass

  deviceSend(port, "mac resume")


Como você pode ver, tudo é simples, e o uso de um modem não é diferente de qualquer outra transmissão de porta serial. O código do programa (com pequenas melhorias) foi lançado no Raspberry Pi, a recepção de dados pode ser vista na tela.


Existem muitos comandos diferentes para configurar o RN2483; eles podem ser encontrados no PDF "Guia do usuário da referência de comando do módulo RN2903 LoRa Technology Module". Para uma avaliação aproximada do resultado, você também pode fazer o download do programa Semtech Lora Calculator , que permite inserir configurações diferentes (largura do espectro, frequência, etc.) e ver o resultado - taxa de bits, consumo atual, duração da bateria.

Por exemplo, o tempo de operação prometido do chip SX1276 a partir de uma bateria de 1000mAh será de cerca de 30 dias quando transmitido em blocos de 8 bytes com um intervalo de 100 segundos e uma potência de 10dBm.

Para uma verificação prática do alcance, um dos modems foi deixado no apartamento pela janela, o segundo foi conectado ao Raspberry Pi e levado para a rua. Algumas fontes prometem um alcance de cerca de 3 km nas áreas urbanas. O resultado, infelizmente, não é tão bom: na prática, na potência máxima e uma antena em 868 MHz, o sinal já está completamente abafado após cerca de três prédios de apartamentos. Obviamente, em locais abertos, o alcance é maior, mas vale a pena "virar uma esquina", pois o sinal desaparece muito rapidamente. Em geral, o resultado de 3 km na cidade provavelmente só pode ser obtido se você colocar a antena na torre da TV, você pode realmente contar com 300m na ​​melhor das hipóteses. Mas isso não é tão ruim, dada a baixa potência do sinal transmitido.

Preço de emissão


Informações para quem deseja repetir experimentos ou usar LoRa em seus projetos. O preço do seu conjunto de 2 modems rn2483 prontos para uso no eBay é de 80EUR. Separadamente, o módulo com o SX1276 soldado pode ser comprado de vendedores da China por US $ 12 com frete grátis. O chip SX1276 sem correias pode ser comprado por US $ 9 (o código descrito no artigo é adequado apenas para RN2483, ao usar o chip SX1276, ele deverá ser programado em um nível mais baixo).

Conclusões


Os dispositivos LoRa são uma solução conveniente e pronta para a transmissão em baixa velocidade de pequenas quantidades de dados em distâncias relativamente grandes (centenas de metros-quilômetros). Os dispositivos LoRa são otimizados para baixo consumo de energia, o que permite que sejam usados ​​com baterias ou acumuladores (no entanto, a taxa para isso é uma baixa taxa de transferência de dados). Por exemplo, se um agricultor deseja exibir a temperatura em estufas em um monitor doméstico, essa será uma aplicação quase ideal para LoRa - pequenas quantidades de dados, grandes distâncias e visibilidade direta dos objetos. Os modems também podem ser usados ​​em salas grandes - hangares, fábricas, onde é difícil ou caro puxar o fio para os sensores e os volumes de dados são pequenos. É possível usar em casa,a alta sensibilidade dos módulos permitirá o uso de antenas curtas, mesmo na forma de um "zigue-zague" na placa de circuito impresso. Na cidade, a qualidade da comunicação dependerá muito da presença de visibilidade de rádio entre as antenas, da altura das antenas, etc. Muitos agora estão muito inspirados pelas capacidades das redes LoraWAN "globais", mas a questão da colocação das antenas será muito crítica para o alcance de uma rede. No entanto, isso é verdade para qualquer sistema de transmissão de rádio, portanto o milagre não aconteceu aqui.isso é verdade para qualquer sistema de transmissão de rádio, então o milagre não aconteceu aqui.isso é verdade para qualquer sistema de transmissão de rádio, então o milagre não aconteceu aqui.

A próxima parte abordará a conexão do RN2483 à rede LoRaWAN.

Mais informações podem ser encontradas nos links:
- RN2483 datasheet
ww1.microchip.com/downloads/en/DeviceDoc/40001784B.pdf
- LoRa FAQ
www.link-labs.com/lora-faqs
- Semtech SX1272
www.semtech.com/wireless -rf / rf-transceivers / sx1272
- Calculadora Semtech LoRa
www.semtech.com/apps/filedown/down.php?file=SX1272LoRaCalculatorSetup1%271.zip

As bibliotecas para trabalhar com RN2483 no Raspberry Pi e no Arduino podem ser encontradas no github.

Source: https://habr.com/ru/post/pt398229/


All Articles