Sunday, December 7, 2025

Experimenting with LoRa using the REYAX RYLR998 (Part 2)

This is how the transceiver nodes on the breadboard look like after adding a 7333 voltage regulator. A portable version with a touchscreen and fed from a 9V battery has been created.

You can read Part 1 here: https://arduinoenigma.blogspot.com/2025/12/experimenting-with-lora-using-reyax.html


In the previous post, it was determined that without a voltage regulator, the RYL998 would brown out the Arduino Nano. After a lot of research, we settled on a LDO (Low Dropout Regulator). The 7333 is an inexpensive part that can be fed 5V and it will produce 3.3V on its output.

The 7333 has two different pinouts. The following diagram shows the 7333A 3.3V voltage regulator:

And here is the circuit using the 7333B, the difference in the pinout is the location of the VIN and GND pins are swapped. 

This circuit was prototyped on the breadboards, the modules reset to factory defaults using the AT+FACTORY command, reprogrammed with AT+ADDRESS=1 to have addresses of 1 and 2. One node was program to send data and the other one receives it. The nodes are stable at full transmit power even though one Arduino uses its 5V output to power the other node, so it it powering another Arduino and two voltage regulators. This proves the voltage regulators have enough built in margin.

The picture below shows the 7333 in the breadboard.


Once the circuit was proven on the breadboards, it was moved to a GIKFUN Prototype Shield ($15 for 3). It has the voltage regulator and the voltage divider to convert Arduino Software Serial TX from 5V to the 3.3V the 998 expects. The ICSP header with the long legs is needed for the SEEED Touchscreen and must be ordered separately, try searching for "6 PIN Double Row Straight Female PIN Header 2.54MM Pitch pin Long"


Here is the assembled node using an Arduino Uno, a custom shield and a touchscreen.


This shows the location of the antenna. The goal was to protect it against damage, but it may have been placed in a sub optimal location. The antenna is located between a metal part and the Arduino, a better location might be on the other side, using connectors, it can be extended out so it is exposed. 


A sketch running on the handheld device was written to display a received message on the screen. A node in the breadboard sends AT+SEND=0,5,DATA! to the 998. The 998 on the shield receives the data and puts out on the serial port +RCV=1,5,DATA!,-17,11. The sketch on the handheld uses the first three characters to identify the receive command. Once the +RC command is received, the rest is displayed. The last two parameters, -17 and 11 show the Received Signal Strength Indicator (RSSI) and Signal-to-Noise ratio (S/N). The RSSI starts at 0 when the nodes are very close to each other and goes down. The S/N starts at 11 and goes down to -15. After a new message is received, the rectangle below the message toggles between red and green.  


The breadboard was left inside a building and the handheld was taken out for a walk. The rectangle kept toggling between red and green while the RSSI and the S/N decreased. At 684 ft and with a signal strength of -111 and a signal to noise ratio of -15, it stopped toggling. The 684 foot range was through multiple buildings and trees. 

How to convert the RSSI and the S/N to a cell phone style signal strenght indicator with 5 or 6 antenna bars? One idea is to disregard the S/N and convert the RSSI range of 0 to -111 to a range or 0 to 6 antenna bars. The other idea is to add the RSSI and the S/N together, it ranges from (0,11) to (-111,-15) and then convert to antenna bars. 

Another experiment can be run by moving the module out so the antenna is exposed. 

Next is to design a PCB and send it to Oshpark for manufacturing. 


(To be continued...)

Tuesday, December 2, 2025

Experimenting with LoRa using the REYAX RYLR998

LoRa® is a radio technology that allows two nodes to send small volumes of data over long distances. An often quoted typical distance between two nodes with clear line of sight is 3-5km. This post started with some intellectual curiosity, what is the actual distance at which two LoRa nodes can communicate in an urban setting.

The ultimate goal is to have two battery powered handheld devices that use an Arduino Uno, a SEEED Touchscreen LCD and a LoRa module.

The initial goal is to have a base station node that receives LoRa messages and echoes them back, then a handheld node is configured to send a message every few seconds and if a matching response is received from the base station, an LED is lit. The handheld can be programmed to cycle through a few different messages.

To get there, the first step is to get two minimal LoRa nodes to communicate to each other.

Researching what LoRa modules were available on Amazon, the REYAX RYLR998 appeared as a viable candidate as it has 0.1 spacing pin headers, all it needs is power, ground, a serial port for communication and is very affordable at around $12.


Going out to the Internet for examples of how to use this device, variations on the following circuit started to appear. The diagrams used one Arduino Nano and one Reyax RYLR998 to send a signal when a button was pushed and another Arduino connected to another 998 to receive the signal and illuminate an external LED. Since we are trying to establish basic communication between two nodes and the Arduino has a built-in LED connected to pin 13, the transmit and receive node circuits were merged and simplified into the circuit below. 

This circuit powers the Reyax 998 from the 3.3V pin on the Arduino Nano. Since the 998 is a 3.3V part, the circuit uses a 4.7K / 10K voltage divider to bring the 5V output of the Arduino TX pin down to a 3.3V signal that can be connected to the RX pin on the 998. The TX output of the 998 is 3.3V and can be connected and read correctly by the Arduino Nano. At the moment, the Nano is powered by the USB connector. 


When the circuit above is wired and we try to program the Nano, the Arduino IDE cannot communicate with the Nano, the TX and RX pins of the Nano are connected to its own USB driver and to the 998 and they are clashing, resulting on the Arduino IDE being unable to communicate with the Arduino UNO,

A attempt was made to only move the 998 TX signal from the Arduino RX pin to Arduino pin 8, the logic here was the Arduino TX pin is an output and it can communicate with the RX pin on the USB driver chip as well as the RX pin on the 998, but the Arduino RX pin has two TX devices talking to it, the USB driver chip and the 998. This ended up allowing the Arduino to be programmed, the 998 received commands from the Arduino, but using the SoftwareSerial library to read pin 8 resulted in endless streams of +ERR=4 coming from the 998, indicating an Unknown Command error. It seems the 998 was not happy sharing the TX pin with the USB driver. Circuits that are shown sharing the TX and RX pins on the Nano are probably programmed with the 998 disconnected and then the computer is disconnected and the 998 connected. 

Since the goal of this project is to make an Arduino Uno Shield, in the end, both the TX and RX pins of the 998 had to be moved to dedicated pins on the Arduino Nano and either the SoftwareSerial or AltSoftSerial libraries used to create a serial port in software. Both libraries work best when the Arduino pin 8 is RX and the Arduino pin 9 is TX. Pin 8 was directly connected to the TX pin on the 998. Pin 9 was connected to the 4.7k/10k voltage divider and its output connected to the RX pin on the 998. This circuit can be programmed reliably and communication between the Nano and the 998 is reliable.

The 998 factory defaults to 115200 baud and this is around the maximum the software serial port libraries can handle. The Arduino sketch in its initialization routine first opens the software serial port at 115200 baud, sends the AT+IPR=9600 to the Reyax998 then immediately closes the software serial port and reopens it at 9600. When this routine is executed on a factory default 998, it changes it default speed to 9600, if the speed is already 9600 baud, the AT+IPR=9600 command is disregarded as it is being sent at 115200 and the 998 is receiving at 9600. In practice, this mechanism works very reliably to change the default speed on a new device and is disregarded by an already configured module.

The reason the circuit below is labeled "DO NOT USE" is that when powered from the Arduino Nano 3.3V and the 998 is transmitting at factory default power levels, it can cause the Nano to brown out. The factory datasheet says the 998 may consume 140mA when transmitting. Sources say the Nano 3.3 pin can only provide 50mA and some of that is needed for the USB driver chip. A separate 3.3V power regulator is needed and has been ordered. While this arrives, the AT+CRFOP=4 is used to bring the transmission power down. With the transmit power dialed down, the circuit below sends and receives data reliably to another node that is in close proximity. 

All of the 998 configuration parameters are saved on an internal EEPROM. It seems one use case the manufacturer envisions is to connect the Reyax 998 to a computer using a USB dongle and send all the configuration commands using a terminal program, then move it to a host circuit that uses just to send and receive data. We are using the Arduino Nano to issue the configuration commands, getting input from the user for parameters such as Node ID, Network ID and Encryption Password.

The breadboard below shows two independent LoRa nodes using the circuit above. The jumpers are ELEGOO 20cm Multicolored Dupont Wire, at $7.00 for 120 (40 F-F 40 M-F 40 M-M), a bit long, but fit snuggly on the breadboard. 

The resistors used for the voltage divider are 1/8W and the legs are quite thin, a trick to make them fit more snuggly into the breadboard is to bend the tips back, flatten that with pliers and insert the doubled up pin into the breadboard. 


The two nodes above are only connected to each other thru power and ground so when one Arduino is connected to the USB, the other one is powered up. Next, we will try separating them by removing the jumpers on the middle of the picture that bridge the two power and ground rails together but the brown out issues we were experiencing are not going to go away until a separate 3.3V regulator is provided. Now that things are working, maybe moving one node to its own breadboard so they can be separated further apart. 

Next is to publish the source code at https://github.com/arduinoenigma/REYAX-RYLR998-Tests



(To be continued...)

Read Part 2 to see the working circuit with separate 3.3V regulator here: https://arduinoenigma.blogspot.com/2025/12/experimenting-with-lora-using-reyax_7.html

Saturday, February 22, 2025

Daniel Palloks Universal Enigma Simulator has moved

Daniel Palloks Universal Enigma Simulator has moved to 


Universal Enigma is a proven accurate simulator that implements lots of machines, including the lever stepping Enigma I, M3, M4, Norenigma, S, D, K, Swiss K, Rocket, Tirpitz and the geared A28/G31, G-111, G-260, G-312, G-401

The homepage has links for Swedish Enigma-B, which had special 28 contact wheels in order to support the additional letters in the Swedish alphabet.

There is also a link to the numbers only Enigma Z.

The simulators are very lightweight HTML wise and can be saved locally to the users computer.

This is an invaluable resource if you are developing any kind of Enigma program.


The new homepage is available at:



The German homepage is at:




Universal Enigma Simulator


This is the list of machines the Universal Enigma implements: