Inspiration

Our team is fond of low level programming and networks. We wanted to build a system that could provide us with communication between our homes back in high school using simple components with driver software we wrote ourselves. Naturally, we found ourselves working with open hardware and free software.

What it does

Many locations lack robust communications infrastructure. Even in areas with widespread communications infrastructure blackouts can still occur. Services like the American Radio Relay League (ARRL) prepare for exactly these kinds of scenarios. Members of the ARRL receive emergency communications training to relay messages using analog voice modulation. However, the necessary hardware and training are not accessible to the average person. Loragram aims to resolve this by leveraging cheap off-the-shelf open source hardware. Loragram paired with a suite of open source software can provide a simple way to communicate with others at a distance when other infrastructure is not available.

How I built it

We worked in a bottom-up fashion. First we built the low level GPIO and SPI drivers. After we had those working, we began work on an API to encapsulate the functions of the LoRa module. After those functions were tested, we made the main event loop that provides the user with a way to transmit and receive messages.

Challenges I ran into

Firmware development tends to present uniquely confounding problems. We avoided some issues by reading documentation thoroughly. We overcame others with diagnostic equipment like digital logic analyzers. Some of these issues can be found in the notes section of our readme. In all cases, careful review of documentation and rigorous testing allowed us to root out the bugs in our code to make Loragram possible.

Accomplishments that I'm proud of

It works!!

What I learned

Effective strategies for debugging embedded systems and time management.

What's next for Loragram

We have achieved, fundamentally, what we set out to do. We would like to improve Loragram's robustness against corrupted messages and dropped packets. In addition, it would be good to improve bandwidth.

Built With

Share this project:

Updates