Prueba de módems de radio LoRa / LoRaWAN RN2483. Parte 1, LoRa

Una de las tecnologías interesantes del "Internet de las cosas" es la red LoRa / LoRaWAN, pero en Runet prácticamente no se describen. Es hora de llenar este vacío, y lo más interesante es intentar "vivir" cómo funciona.



¿Qué es lora?


Esta es la tecnología de comunicaciones de largo alcance patentada de Semtech implementada en sus chips SX1272 y SX1276. LoRa es un protocolo de bajo nivel sobre el cual se pueden implementar protocolos de alto nivel como LoRaWAN.

Una característica del estándar LoRa es la transmisión de pequeños paquetes de datos con bajo consumo de energía. Según el fabricante, el alcance al aire libre puede alcanzar los 10 km y la duración de la batería puede ser de varios años. Las frecuencias de funcionamiento varían según el país y son 433 u 868 MHz (versión de la UE) o 915 MHz (versión de EE. UU.).

Como funciona Detalles debajo del corte.

Para las pruebas, se seleccionaron los módulos RN2483. Son buenos porque son fáciles de programar y admiten diferentes modos de funcionamiento. El RN2483 contiene el chip SX1276 y el controlador en una carcasa, está controlado por comandos UART, lo que le permite conectarlo a cualquier dispositivo (PC, Arduino, microcontrolador, etc.). Puede comprar un módulo sin flejes, es más barato, pero era demasiado flojo para soldar, por lo que se ordenó un par de tableros prefabricados en eBay.

Esto le permite conectar los módulos a una PC a través de USB y a cualquier dispositivo.

Transferencia de datos


Se escribió un programa simple de Python para la transferencia:
Código fuente
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")


Analizaremos los parámetros principales con más detalle.
pwr - potencia, puede variar en el rango -3..15dB
frecuencia - frecuencia de transmisión
mac pausa - deshabilitar el modo lorawan, se activa el modo de transferencia entre dos dispositivos (p2p)
tx -
mod de paquete de datos - tipo de modulación. Hay 2 tipos disponibles, lora o fsk.
bw - ancho de banda del espectro, puede ser 125, 250, 500KHz.
sf - factor de propagación, afecta la duración de la transmisión.
Así es como se ve el espectro con sf7 y sf12 con la misma cantidad de datos.


Como puede ver, los datos se transmiten en bloques cortos. El tamaño máximo del paquete no es más de 255 bytes, después de que se completa la transmisión, el módem recibe la confirmación de que los datos han sido enviados.

Recepción de datos


Para la recepción, es necesario establecer los mismos parámetros que para la transmisión, de lo contrario los módems no se "escucharán" entre sí. El código se proporciona a continuación, el programa en un bucle sin fin "escucha" los datos en el puerto serie.

Código fuente
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 puede ver, todo es simple, y el uso de un módem no es diferente de cualquier otra transmisión de puerto serie. El código del programa (con ligeras mejoras) se lanzó en la Raspberry Pi, la recepción de datos se puede ver en la pantalla.


Hay muchos comandos diferentes para configurar el RN2483; se pueden encontrar en el PDF “Guía del usuario de referencia de comandos del módulo de tecnología LoRa RN2903”. Para una evaluación aproximada del resultado, también puede descargar el programa Semtech Lora Calculator , que le permite ingresar diferentes configuraciones (ancho del espectro, frecuencia, etc.) y ver el resultado: tasa de bits, consumo de corriente, duración de la batería.

Por ejemplo, el tiempo de funcionamiento prometido del chip SX1276 de una batería de 1000 mAh será de aproximadamente 30 días cuando se transmite en bloques de 8 bytes con un intervalo de 100 segundos y una potencia de 10 dBm.

Para una comprobación práctica del alcance, uno de los módems se dejó en el apartamento junto a la ventana, el segundo se conectó al Raspberry Pi y se sacó a la calle. Algunas fuentes prometen un alcance de unos 3 km en las zonas urbanas. El resultado, por desgracia, no es tan bueno: en la práctica, a una potencia máxima y una antena a 868 MHz, la señal ya está completamente suprimida después de unos 3 edificios de apartamentos. Por supuesto, en lugares abiertos, el rango es más alto, pero vale la pena "doblar una esquina", ya que la señal desaparece muy rápidamente. En general, el resultado de 3 km en la ciudad probablemente se pueda obtener solo si coloca la antena en la torre de TV, realmente puede contar con 300 m en el mejor de los casos. Pero esto no es tan malo, dada la baja potencia de la señal transmitida.

Precio de emisión


Información para aquellos que desean repetir experimentos o usar LoRa en sus diseños. El precio de su conjunto de 2 módems rn2483 listos para usar en eBay es 80EUR. Por separado, el módulo con el SX1276 soldado se puede comprar a vendedores de China por $ 12 con envío gratis. El chip SX1276 sin flejes se puede comprar allí por $ 9 (el código descrito en el artículo es adecuado solo para RN2483, cuando se usa el chip SX1276, deberá programarse en un nivel inferior).

Conclusiones


Los dispositivos LoRa son una solución conveniente y llave en mano para la transmisión a baja velocidad de pequeñas cantidades de datos en distancias relativamente grandes (cientos de metros-kilómetros). Los dispositivos LoRa están optimizados para un bajo consumo de energía, lo que les permite ser alimentados por baterías o acumuladores (sin embargo, la tarifa por esto es una baja tasa de transferencia de datos). Por ejemplo, si un agricultor quiere mostrar la temperatura en invernaderos en una pantalla de inicio, esta será una aplicación casi ideal para LoRa: pequeñas cantidades de datos, grandes distancias y visibilidad directa de los objetos. Los módems también se pueden usar en salas grandes: hangares, fábricas, donde es difícil o costoso tirar del cable a los sensores, y los volúmenes de datos son pequeños. Es posible usar en casa,La alta sensibilidad de los módulos permitirá el uso de antenas incluso cortas en forma de "zigzag" en la placa de circuito impreso. En la ciudad, la calidad de la comunicación dependerá en gran medida de la presencia de visibilidad de radio entre las antenas, la altura de las antenas, etc. Muchos ahora están muy inspirados por las capacidades de las redes LoraWAN "globales", sin embargo, el problema de colocar las antenas será muy crítico para el alcance en dicha red. Sin embargo, esto es cierto para cualquier sistema de transmisión de radio, por lo que el milagro no sucedió aquí.Esto es cierto para cualquier sistema de transmisión de radio, por lo que el milagro no sucedió aquí.Esto es cierto para cualquier sistema de transmisión de radio, por lo que el milagro no sucedió aquí.

La siguiente parte hablará sobre la conexión del RN2483 a la red LoRaWAN.

Puede encontrar más información en los enlaces:
- Hoja de datos
RN2483 ww1.microchip.com/downloads/en/DeviceDoc/40001784B.pdf
- Preguntas frecuentes de LoRa
www.link-labs.com/lora-faqs
- Semtech SX1272
www.semtech.com/wireless -rf / rf-transceivers / sx1272
- Semtech LoRa Calculator
www.semtech.com/apps/filedown/down.php?file=SX1272LoRaCalculatorSetup1%271.zip Las

bibliotecas para trabajar con RN2483 en Raspberry Pi y Arduino se pueden encontrar en github.

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


All Articles