When you need to send data wirelessly, you have a lot of choices these days. Wi-Fi, Bluetooth, Zigbee, and cellular connections are some of the more common options, but a relatively new protocol is growing in popularity. LoRa provides low-power, low-bandwidth communications over medium ranges—between 2 and 15 kilometers, depending on how cluttered the environment is.
LoRa was created for the burgeoning Internet of Things, linking remote sensors and embedded devices back to centralized nodes using spread-spectrum transmissions. Data rates normally vary between 0.3 and 27 kilobits per second, with up to 50 kb/s possible: Slower data rates correspond to longer ranges. The original vision for LoRa was focused tightly on machine-to-machine communication, but its parsimonious power demands have made it attractive to tinkerers for other applications. As someone always interested in trying out new hardware technologies, I wondered if LoRa could be used for human-to-human communication. The data rate is too low to make voice calls practical, but what about a more venerable kind of device: Could I make a LoRa two-way pager? Although my work as a hardware engineer involves analyzing antennas, I was much less familiar with the design of radio-frequency circuits themselves. So my first step was to order two AI-Thinker Ra-02 LoRa modules and two ATmega328-based microcontrollers, dig out my breadboard, and build a proof-of-concept design. Before long I could send alphanumeric strings back and forth, displaying the results on an 84-by-48-pixel LCD display originally designed for Nokia phones.
Of course, you can’t take a breadboarded circuit out into the world for field testing, so I designed a prototype printed circuit board that duplicated my breadboard design along with a battery and some control buttons. The tests occurred in the teeth of a German winter, so an associate and I were disinclined to venture outside for long distances, but we verified that we could communicate while over a kilometer apart. The cold weather also revealed an unexpected problem: One pager was powered by nickel metal hydride batteries, the other by a lithium-ion cell. The NiMH battery coped with the low temperatures just fine, but the Li-ion cell would suffer voltage drops that caused the microcontroller to reset.
Human Readable: This two-way pager uses the LoRa low-power radio protocol, which can have a range of 10 to 15 kilometers. An off-the-shelf LoRa transceiver module is fitted to a custom PCB with a user-friendly display and navigation controls. A real-time clock module keeps track of local time. Illustration: James Provost
The next step was to create a more refined design. The most obvious improvement was the screen, which I upgraded to a 128-by-64-pixel LCD. I also upgraded the microcontroller: I needed more computing power but wanted to stay within the Arduino-compatible ecosystem, so I went with an Atmel SAMD21 Cortex M0[PDF], which is used by a number of “post-AVR” Arduino microcontrollers. I also swapped out the AI-Thinker modules for easier-to-obtain RFM95W transceivers. The final design also includes a pager motor for silent operation, a 3-way navigation switch for operation, and an SD card adapter. Thanks to my experience with antenna analysis, most of the fine-tuning of the second iteration of the PCB was dedicated to ensuring that the trace connecting the transceiver to the antenna had the optimal 50-ohm impedance. The transmission line uses a ground plane on the other side of my PCB, so a calculation using the thickness of the PCB showed I needed a 1-millimeter-wide trace. I also tweaked how the ground plane was connected to the antenna mount and transceiver module to get the best high-frequency behavior I could.
In addition, I opted to have the solder-stop mask of my PCB produced in stylish black, which turned out to have another unexpected result. The reflow oven I use for soldering surface-mount components uses an infrared heater, and in my first attempt to populate the board with components, the black mask heated up much more rapidly than the green PCBs I normally used. The result was the classic golden-brown tarnish of overheated solder joints—I had become a fashion victim!
Once I made adjustments and got everything assembled correctly, I began testing the board and realized I had a problem with my on/off button controller: When the power button is pressed, it enables a voltage regulator to begin supplying 3.3 volts to the SAMD21 microprocessor. As a safety feature, if the controller doesn’t receive an acknowledgment that the processor is chugging along within 2 seconds, it turns off the supply. But the SAMD21 was taking about 2.5 seconds to respond! I found the ultimate solution by perusing the controller’s datasheet, where I discovered a note that a variant of the controller was available with a 10-second waiting period. Once the new on/off controller arrived, a little work with a hot-air gun had the new component in place.
Pager Platform: The LoRa module is controlled using an Arduino-compatible microcontroller, and the user can extend the hardware using any off-the-shelf peripheral with an Arduino library that supports the I 2C protocol, via a dedicated socket on the PCB. Illustration: James Provost
Testing revealed another minor error: I had reversed the data lines to the onboard real-time clock, which I’d added to keep local time and which is connected to the SAMD21 via an I2C connection. Once I’d fixed that, I was done with my pager, which I’ve dubbed the LoRaNicator.
As I’m more interested in hardware design than coding, the system software is pretty basic and does little more than allow the exchange of text messages between users. It’s my hope that others might use the LoRaNicator as an open platform to create more complex applications that can take advantage of this low-power, low-infrastructure method of communication. I’ve also tried to make it easy to extend the LoRaNicator’s hardware by including a set of external pins to which I2C devices can be attached, such as a GPS unit or other sensors.