Published by Vivian van Zyl in ESP32 Microcontrollers the 03/28/2026 at 06:08 pm
Ever wished you could move a small amount of data over miles without relying on Wi-Fi, cellular service, or a full mesh network? That was exactly the point of this build: use LoRa as the long-range link, then use Bluetooth as the “local display” so you can read messages directly on your phone.
This setup uses REYAX RYLR999 chips, which combine LoRa 915MHz and Bluetooth in one module. The cool part is the bridging approach: send over LoRa from one node, and on the receiving side bridge the data back out to Bluetooth so your mobile app can subscribe to what arrives.
Inside each node is the latest REYAX silicon (the RYLR999). What makes these chips especially compelling for DIY is that they bring both radios to the table:
There are also some practical details that make builds easier. The nodes can provide a strong transmit capability (described as 30 dBm LoRa output) and they support proper external antennas. Earlier versions often relied on smaller built-in antenna setups. Here, you get IPX connectors, so you can mount real antennas tuned for:
Finally, there are separate UART interfaces for the LoRa side and the Bluetooth side. The bridge is conceptually simple: feed data into the module over one interface, transmit across LoRa, and then output it over the other side so a phone can see it.
The project’s architecture is two nodes:
On the phone side, the user workflow is straightforward. A mobile app connects via Bluetooth LE, subscribes to the incoming characteristic, and prints the received messages as they arrive.
This isn’t about building a full LoRa network or replacing every connectivity option. It’s a lower-level approach: if you only need to move small packets of data from point A to point B, LoRa does the long-distance part, and Bluetooth does the human-friendly part.
That’s why the idea fits real-world sensor use cases like:
Having chips sitting on a bench is annoying long-term, so the build started with 3D-printed enclosures. Each enclosure includes:
After the mechanical build, the first steps were functional testing:
Then the Bluetooth bridging behavior was added via the Bluetooth side jumpers/wiring so that messages appear on the phone app.
To prove the concept reliably, an ESP32-C3 was used as a message generator on the sending node side. The reason is simple: it’s easy to send a periodic payload without needing external sensors while you validate the radio link.
The sending logic was “send every 10 seconds.” Each packet contained a small string like:
Those messages travel:
For the phone UI, the app used was LightBlue. The workflow was:
The demo used power banks for convenience, but the important lesson is voltage compatibility:
So even if your ESP32-C3 runs happily at 3.3V, the LoRa/Bluetooth nodes still need the proper 5V supply. In this build, the ESP32-C3 primarily served as a logic sender, while the Bluetooth-focused side used wiring to ensure it still received 5V.
The most convincing part was taking the system outside and seeing what it could do with actual obstructions, distance, and real antenna placement.
On the pier, the receiver kept getting packets as the sending node transmitted every 10 seconds. The narrator notes packet numbers climbing steadily, and then continued movement toward longer distances.
As the receiver moved farther, the link still produced usable traffic, even showing error packets along the way. Importantly, the test clarified that the result was achieved with a standard antenna, not an exotic custom antenna setup.
The system was carried toward the far side and into locations where signal might be partially blocked. The receiver showed reliable packet reception during movement and reported values that included:
Even when RSSI dropped significantly, the receiver still managed at least some successful decodes. That’s exactly what you want to know for sensor deployments: you need to know where “maybe it will work” turns into “it’s consistently readable.”
One of the more brutal tests was inside bunkers. The receiver recorded activity (it could “receive something”), but decoding failed with an error reported (an “Error 12”), which is a realistic reminder:
The receiver eventually got much stronger RSSI again closer to the sending node, and packet numbers increased reliably. As the nodes approached alignment and separation decreased, the link became clearly stable.
That last part is practically useful. In the field, knowing whether you can “hunt down” a transmitting sensor by walking toward increasing signal helps with commissioning and troubleshooting.
This bridging approach is a great fit when you want:
Examples that map well to the demo:
No. This is a simpler “link” approach. It doesn’t rely on a mesh system or LoRaWAN infrastructure. The goal is point-to-point long-range transmission with a Bluetooth bridge for the user interface.
Bluetooth makes the received data easy to view on a phone without extra gateways. Your mobile app can connect via Bluetooth LE and subscribe to the incoming messages directly.
The build uses external antennas mounted through IPX connectors. A 915MHz LoRa antenna handles the long-range link, and a 2.4GHz Bluetooth antenna improves the local reception. The range test specifically mentions using a standard antenna, which still performed well outdoors.
No. The chips require 5V operation. Even if your microcontroller runs at 3.3V, provide 5V to the RYLR999 nodes.
For a test, the demo used a message every 10 seconds. In real deployments, you can tune update rate based on battery life and how quickly you need the data.
Project files are available at the project link listed below, and the “Bluetooth to LoRa Bridge” project includes the hardware and software components used in this approach.
Project files: Bluetooth to LoRa Bridge
Links: (Note: As an affiliate, I earn from qualifying purchases)