You are hereHome / Arduino Projects / Project Page: Off Grid Communications

Project Page: Off Grid Communications

Radio Links

For wireless communication with Arduino I have used XBee, Bluetooth and NRF24L01 radios.  This project was created to try out another option – the HC-12 transceiver.

Like the popular Bluetooth modules that are easy to find on eBay, the HC-12 modules provide a serial interface so they are simple to use with Arduino.  The advantage they have over Bluetooth is the ability to communicate over greater distances.

My goal was to allow two people to communicate totally off-grid.  An HC-12 is hooked up to digital pins on an Arduino 101.  Using the


built-in BLE, the 101 communicates with an Android phone acting as the user interface.  Messages received from Android are sent out on the HC-12.  Messages received from the other HC-12 are sent to the phone for display.

I had hoped to create the Android app in HTML using the Intel XDK IDE.  I enjoyed working with the XDK software.  It included an editor and the ability to debug code, like any IDE, but also included on-line building of  your project, all for free.  It was a bit buggy but

Uno and keyboard

still maturing.  Then Intel pulled the plug on the app creating portion of the XDK, deciding to focus on their IoT devices exclusively.  I have never purchased any of their boards.  Just when they were starting to win me over they really turned me off by killing features of the IDE, making me wonder if they would pull support for one of their products in the same way.

Although I had created a working app in XDK, it didn’t make sense to have an app that could not be changed so I decided to make a new one in Androd Studio.  I’ve used a modified version of a Google sample chat app on a couple other projects and only needed to make minor changes for this one.

Completed circuit

No Grid Needed

The tricky thing about using BLE is that only 20 bytes can be sent at a time over the radio.  I wanted to be able to send longer messages than that so the app sends each message in 20 byte chunks.  The Arduino needs to know when the entire message has been received so the app tacks on an end-of-transmission character to the end.  Once the complete message has been read it gets sent through the ether via the HC-12.

Browser interface

I only own one Android device so I could not set up Android to Andoird communication.  Instead I built a browser interface.  Messages are sent and received on a HC-12 connected to an Arduino Uno.  The Uno communicates with the browser using Node.js with the node-serialport module.

Completed circuit

The HC-12 relies on line-of-sight and, lacking a serial protocol, this system is not very robust.  Still, it’s a good feeling sending and receiving messages knowing that you are not dependant on a network or any complicated infrastructure.




Parts Bin

Parts Bin


from eBay