Un programa de Python para mensajes de texto de 2 vías con el módulo Lora® de la banda RYAX Rylr998 de 33 cm, ya sea con:
Aquí no hay hilos, solo llamadas de E/S sin bloqueo asíncrono.
Nota: Recomiendo conectar el RylR998 al Puente Reyax Ryls135 USB a 1.8V/3.3V/5V TTL UART UART, disponible en Amazon. Con este hardware y un Raspberry Pi 4 (o 5, aún aún probado), el software es compatible con el software DigIpi Appliance sin modificación de /boot/config.txt .
ADVERTENCIA: Windows requiere windows-curses , que no implementa curses.set_escdelay() a partir de Python 3.11. Comente cur.set_escdelay(1) en display.py y ejecute su propio riesgo. El manejo del texto es errático en Windows, con la función set_escdelay() falta. Si se ejecuta en Ubuntu o Debian bajo WSL2 en Windows, no tendrá este problema.
usage: rylr998.py [-h] [--debug] [--factory] [--noGPIO] [--addr [0..65535]] [--band [902250000..927750000]] [--pwr [0..22]]
[--mode [0 | 1 | 2,30..60000,30..60000]] [--netid [3..15 | 18]] [--parameter [7..11,7..9,1..4,4..24]] [--echo]
[--port [/dev/ttyS0../dev/ttyS999 | /dev/ttyUSB0../dev/ttyUSB999 | COM0..COM999]]
[--baud (300 | 1200 | 4800 | 9600 | 19200 | 28800 | 38400 | 57600 | 115200)]
options:
-h , --help show this help message and exit
--debug log DEBUG information
--factory Factory reset to manufacturer defaults. BAND: 915MHz, UART: 115200, Spreading Factor: 9, Bandwidth: 125kHz (7), Coding Rate:
1, Preamble Length: 12, Address: 0, Network ID: 18, CRFOP: 22
--noGPIO Do not use rPI.GPIO module even if available. Useful if using a USB to TTL converter with the RYLR998.
rylr998 config:
--addr [0..65535] Module address (0..65535). Default is 0
--band [902250000..927750000]
Module frequency (902250000..927750000) in Hz. NOTE: the full 33cm ISM band limits 902 MHz and 928 MHz are guarded by the
maximum configurable bandwidth of 500 KHz (250 KHz on either side of the configured frequency). See PARAMETER for bandwidth
configuration. Default: 915000000
--pwr [0..22] RF pwr out (0..22) in dBm. Default: FACTORY setting of 22 or the last configured value.
--mode [0 | 1 | 2,30..60000,30..60000]
Mode 0: transceiver mode. Mode 1: sleep mode. Mode 2,x,y: receive for x msec sleep for y msec and so on, indefinitely.
Default: 0
--netid [3..15 | 18] NETWORK ID. Note: PARAMETER values depend on NETWORK ID. Default: 18
--parameter [7..11,7..9,1..4,4..24]
PARAMETER. Set the RF parameters Spreading Factor, Bandwidth, Coding Rate, Preamble. Spreading factor 7..11, default 9.
Bandwidth 7..9, where 7 is 125 KHz (only if spreading factor is in 7..9) ; 8 is 250 KHz (only if spreading factor is in
7..10) ; 9 is 500 KHz (only if spreading factor is in 7..11). Default bandwidth is 7. Coding rate is 1..4, default 4.
Preamble is 4..25 if the NETWORK ID is 18 ; otherwise the preamble must be 12. Default: 9,7,1,12
--echo Retransmit received message
serial port config:
--port [/dev/ttyS0../dev/ttyS999 | /dev/ttyUSB0../dev/ttyUSB999 | COM0..COM999]
Serial port device name. Default: /dev/ttyS0
--baud (300 | 1200 | 4800 | 9600 | 19200 | 28800 | 38400 | 57600 | 115200)
Serial port baudrate. Default: 115200pi@raspberrypi: ~ /RYLR998-LoRa$ python3 rylr998.py --pwr 22 --port /dev/ttyS0 --band 902687500 --netid 6 pip install asyncio , etc., debería funcionar.
Las conexiones GPIO son las siguientes:
ADVERTENCIA: Haz esto mal y podrás freír tu Raspberry Pi 4 y tu módulo Reyax Rylr998 Lora®. No he tenido problemas, Knock Wood, pero la licencia del MIT no tiene garantía. ¡Revise sus conexiones! Bajo ninguna circunstancia, aplique 5V al módulo Rylr998 Lora®. Solo 3.3V.
Asegúrese de que el shell de inicio de sesión sobre el puerto serie esté deshabilitado, pero el puerto serie está habilitado. En sudo raspi-config , seleccione opciones de interfaz, luego seleccione Serial. Responda "No" a "¿Le gustaría que un shell de inicio de sesión sea accesible en serie?" Y responda "sí" a "¿Te gusta que el hardware del puerto serie sea habilitado?".
Desactivar Bluetooth en /boot/config.txt agregando
disable-bt=1
enable-uart=1 Deshabilite el servicio Bluetooth con
sudo systemctl disable hciuart.serviceuart1 con la instalación de superposición del árbol de dispositivos antes de ejecutar el código. Hago esto en /etc/rc.local con sudo dtoverlay uart1Recomiendo el puente Reyax Ryls135 USB a 1.8V/3.3V/5V TTL UART UART, disponible en Amazon y otros proveedores.
Similar al GPIO, solo VDD va a la salida de 3.3V del convertidor; RX y TX se intercambian, como de costumbre; Y GND va a GND. Vea las imágenes a continuación.


asyncio.BoundedSemaphore() con una bandera booleana.waitForReply booleana es suficiente.xcvr(...) : eloop = urwid . AsyncioEventLoop ( loop = asyncio . get_event_loop ())
uloop = urwid . MainLoop ( widget , event_loop = eloop )
uloop . start () # main_loop.py suggests using this instead of run(). e inmediatamente antes de raise KeyboardInterrupt dentro de la llamada xcvr(...)
uloop . stop ()xcvr(stdscr) , un carácter de entrada a la vez, en función del estado y el carácter de entrada actual.refresh() cuando cambia una ventana, llamamos win.noutrefresh() y establecemos un poco sucio.curses.doupdate() y el bit sucio se restablece. Esta es una optimización.Brownlee, J., Ph.D. (2022). Python Asyncio Jump-start: programación asíncrona y E/S sin bloqueo con coroutinas (vol. 7, 7 vols., Serie de salto de acurrencia de Python). Consultado el 22 de enero de 2023 de https://superfastpython.com/python-asyncio-jump-start/ ISBN-13 979-8361197620
Maldiciones: manejo terminal para pantallas de células de caracteres
"Reyax Rylr998 Rylr498 Lora® AT Guía de comando" (C) 2021 Reyax Technology Co., Ltd. Recuperado el 22 de enero de 2023, de https://reyax.com//upload/products_download/download_file/lora_at_command_rylr998_rylr498_en.pdf
La marca y el logotipo de Lora® son marcas comerciales de Semtech Corporation o sus afiliados.

Esta captura de pantalla muestra una sesión de Mobaxter que ejecuta el programa rlyr998.py . El texto amarillo es el del remitente. El texto recibido es magenta. Cuando Rylr998.py detecta el texto recibido, el indicador "Lora" parpadea verde si el mensaje es lo suficientemente largo; La transmisión de texto parpadea el indicador "lora" rojo. Se muestran los valores ADDR (Dirección), RSSI y SNR del último mensaje recibido. Los mensajes de texto se limitan a 40 caracteres (en esta versión).
Este es un trabajo en progreso. Me tomo mi tiempo agregando funciones de visualización similar a IRC con la biblioteca de las maldiciones de Python lenta y deliberadamente con todo el perezoso, tan lentamente que sería despedido y en la lista negra si estuviera haciendo esto profesionalmente; Flugado y expulsado sin un título y una gran cantidad de préstamos de estudiantes privados depredadores a tasas de interés usuriosas si estaba en la universidad; y defundido y desfigurado si yo fuera académico. No estoy afiliado a Semtech Corporation.