Summary: LoRa has always been a technology that facilitates communication between IoT devices over long distances. This time, I'm testing the power consumption of the RYLR998 LoRa module.
About three weeks ago, someone from **Reyax** contacted me and asked if I wanted to test their LoRa modules. Honestly, I wasn’t very motivated at first — I had never worked with this technology before. But then I thought, *well, at least I can test them, and they’re free.*
After doing some research, I noticed that many small Latin American YouTubers had already reviewed this same module, and most of the reviews were very similar — what LoRa is, range tests, AT command configuration, and sending a message. Basically, the same as always. So making yet another video about that didn’t sound very interesting.
The main reason for using LoRa is to send small amounts of data over long distances. If you think about sending data from a single sensor or an event in a remote location, you must consider that there is usually **no power source** available. That’s when my idea came up — to test how efficient these modules really are for deploying a low-power device that periodically sends sensor data from a remote site.
This module is quite small, although I found the “pigeon-shaped” PCB design a bit odd — minus one point for that.

Regarding documentation, it’s actually excellent. Even with little experience in this technology, I got it running in just a few minutes. On the RYLR998 product page, you can find the datasheet, user manual, and even a 3D model — very useful for PCB design.
The RYLR998 operates via AT commands, so all you need is a serial connection to send the commands. The datasheet provides a basic example where 200 bytes are transmitted.
AT+BAND=915000000 AT+PARAMETER=5,9,1,4 AT+SEND=6,200,01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
AT+BAND=915000000 AT+PARAMETER=5,9,1,4 AT+ADDRESS=6
The key point here is to configure the receiver address, which in this case is 6. When sending a message, you must include that same address as a parameter.
The operating modes are critical if you want to improve your device’s autonomy.
Mode 0
By default, the module starts in Mode 0, which consumes a constant current of about 17 mA — basically consuming power just for existing.
Mode 1
This mode puts the module to sleep, making power consumption almost negligible.
Mode 2
An interesting configuration — it allows the module to sleep and wake up at specific intervals. I believe it’s used for synchronizing packet reception, but it seemed too complex to implement, so I didn’t use it.

I wrote a small script to send messages through the serial port using ESP32-prog-lite, while a portable receiver displayed the signal strength versus distance.
For power monitoring, I used the Power Profiler Kit II, which measures current consumption over time.
Python Script
# Install pyserial if not already installed:
# pip install pyserial
import serial
import time
import random
def enviar_comando_y_leer_respuesta(puerto, baudrate, comando):
ser = serial.Serial(puerto, baudrate, timeout=2)
ser.write(comando.encode())
respuesta = ser.readline().decode(errors='ignore').strip()
ser.close()
return respuesta
def generar_bytes_aleatorios(n):
return ''.join([str(random.randint(0, 9)) for _ in range(n)])
if __name__ == "__main__":
puerto = '/dev/ttyUSB1'
baudrate = 115200
# Check band
comando = 'AT+BAND?\r\n'
print(enviar_comando_y_leer_respuesta(puerto, baudrate, comando))
parameter = 'AT+PARAMETER=5,9,1,4\r\n'
print(enviar_comando_y_leer_respuesta(puerto, baudrate, parameter))
while True:
time.1)
print(enviar_comando_y_leer_respuesta(puerto, baudrate, 'AT+MODE=0\r\n'))
mensaje = f'AT+SEND=6,13,{generar_bytes_aleatorios(13)}\r\n'
print(enviar_comando_y_leer_respuesta(puerto, baudrate, mensaje))
print(enviar_comando_y_leer_respuesta(puerto, baudrate, 'AT+MODE=1\r\n'))
time.30)
Sending Data Every 10 Seconds (Mode 0)
In this mode, the average current consumption is 17.09 mA. Each transmission causes a brief spike to about 100 mA.
With a 2600 mAh battery, that translates to roughly 6 days of autonomy, which is unacceptable for a field sensor like a soil moisture monitor.

Sending Data Every 10 Seconds (Mode 1)
By putting the module to sleep when not transmitting, performance improves dramatically. In this setup, one packet is sent, the module sleeps (Mode 1) for 10 seconds, then wakes to send another packet before returning to sleep.
The average current drops to 134.40 µA, giving an autonomy of almost 2 years — or about 1.5 years in a real-world scenario, which is excellent.

Sending Data Every 30 Seconds (Mode 1)
Under the same conditions but sending data every 30 seconds, results are even better.
The average current is around 50 µA over a 2-minute window, theoretically giving about 6 years of autonomy — probably exaggerated, but it demonstrates the module’s efficiency.

The Reyax RYLR998 modules manage power consumption extremely well. I would definitely consider them for future low-power projects — although for a final product, I’d likely prefer the SMD version over the through-hole one.