In this instructable you will learn how to communicate between Arduinos over a long distance up to 1.8km in open air.

The HC-12 is a wireless serial port communication module that is very useful, extremely powerful and easy to use.

First you will learn how to make a wireless instant messenger with the least effort possible.

Then we will move on to light up an LED with a push button and then you will learn a few useful string functions and operations for serial communication.

The last part of the instructable is not necessary but you will learn how to use the HC-12 module like a pro.

In this part you will learn how to enter the modules setup mode to change the baud rate, transmission distance and so on.

And finally you will learn how to connect an external SMA antenna.

Follow the rest of this instructable to find out how easy it is to become a pro in wireless serial communication.

Step 1: Parts List

  • 2 x Arduino (got my Arduino clones for 3 dollar here)
  • 2 x HC-12 modules (got mine here )
  • Wires
  • Breadboard.
  • 10 k resistor
  • push button
  • Exercise files here

Step 2: Wiring and Setup

First we have to solder the spring antennas to both of the HC-12 chips.

I also soldered some pins on the HC-12 module to make it easy to use on a breadboard.

We will use 2 Arduinos with a HC-12 module connected to each of them as you can see in the image.

For both Arduinos we connect pin 2 to TX and pin 3 to RX. Ground to ground and VCC to 5v.

At one Arduino we will add a push button as you can see in the image.

To work with 2 Arduinos on 1 computer, we have to open 2 instances of the Arduino IDE. This means that we have to open the Arduino software 2 times. This is not the same as “file → New”

Save the one with the push button connected as “HC-12 sender” and the other as “HC-12 receiver”.

Make sure that the right ports are selected for each of the Arduinos.

Step 3: Instant Wireless Messenger, Toggle Button, Momentary Button and a Few Useful Functions

Wireless Messenger

We will start by making an instant wireless messenger.

Copy the content from the file “HC-12 messenger send/receive.txt” in the ZIP archive and paste it to each of the Arduino instances. The code is the same for both Arduinos.

After uploading the code, open the serial monitor for both instances.

Now start typing in both serial monitors to start a chat.

Even your Arduinos are connected to the same computer, the communication is wireless.

Toggle Button

A toggle button is used often in electronics. The principle is very simple. You press a button once to turn on the LED and press the same button again to turn of the LED.

Copy and paste the content of the “HC-12 Toggle Button Send.txt” to the “HC-12 sender” instance and the the “HC-12 Toggle Button Receive.txt” to the “HC-12 receiver” instance and upload.

When you push the button, you should see the LED light up. When you push the button again, the LED turns off.

A few validators like timing and button code are used in order to make sure this example works perfect.

Momentary Button

A momentary button is pretty straightforward. While pushing the button, the LED lights up. When releasing the button, the LED turns off.

Copy and paste the content of the “HC-12 Momentary Button Send.txt” to the “HC-12 sender” instance and the the “HC-12 Momentary Button Receive.txt” to the “HC-12 receiver” instance and upload.

Some useful functions and operators

There are a few useful functions and operators that come in handy when you want to convert or spit a string and convert it to a decimal and so on.

Look at the file “HC-12 Useful Functions and Operators Send.txt” and “ HC-12 Useful Functions and Operators Receive.txt”.

The send sketch sends the string “test123” on button press.

The receive sketch reads the string, split it and convert it to an integer.

Step 4: Advanced Setup. Changing the HC-12 Settings With AT Commands

You can easily skip this section as it will cover some advanced chip settings. However I will cover the basics so you will be able to change the module's baud rate, transmission power, channels and working modes.

A full manual can be found in the ZIP archive under the name HC-12 User Manual.pdf

Connect the HC-12 as shown in the image and connect the Arduino to your computer.

Copy and paste the contents of the file named “HC-12 AT Commander.txt” from the ZIP archive and upload to your Arduino.

Open the serial monitor and type “AT”. If the module returns “OK”, the command mode is working.

Changing the baud rate

Type “AT+Bxxxx”.

The baud rate can be set to 1200bps, 2400bps,

4800bps, 9600bps, 19,200bps, 38,400bps, 57,600bps, or 115,200bps. The default

value is 9600bps.

Example: type “AT+B4800”. The module returns “OK+B4800”.

Changing the communication channel

Type “AT+Cxxx”.

The value can be a number from 001 to 127.

Every number is a 400KHz step. The working frequency of channel 100 is 473.0MHz.

Example: type “AT+C021”. The module returns “OK+C021”.

The module is now set to a working frequency of 441.4MHx

Note that both sending and receiving modules need to have the same frequency to communicate.

Changing the working mode of the module.

This can be FU1, FU2, FU4 or FU4 (FU4 at a baud rate of 1200 sets the chip to transmit up to 1800 meter in open air). See documentation for a full explanation.

Example: Type “AT+FU4”. The module returns “OK+FU4”.

Obtain all parameters from the module.

Type “AT+RX”.

The module should return something like this:





More settings can be found in the “HC-12 User Manual.pdf” in the ZIP archive.

Step 5: Spring Antenna or SMA Antenna

The HC-12 modules come standard with a spring antenna. However you can connect an SMA antenna to the board.

There are whole books written about antennas and how they work. I don't want to go to deep into this subject.

The only thing to remember for now is that electronic circuitry can interfere with an antenna and therefore the HC-12 has a IPEX RF socket so you can separate the antenna from the board. This can help for better reception and transmission.

What you need is a IPEX to SMA extension cord and an SMA antenna.

I got my extension here and the antenna here.(check for male and female).

Make sure when you order that the male and female connections match.

You can push the cord on the IPEX connector and solder it on. On the other site of the cord you can screw on the SMA antenna.

Step 6: Final Note:

In this instructable you have learned how to use the HC-12 for long distance communications between Arduinos. You have learned how to make an instant messenger, a toggle button, a momentary button, how to use some string operators and functions, how to change the HC-12 settings and how to use a different antenna.

The making of this instructable took about 100 hours of research, editing, testing, writing and so on.

If this instructable was helpful for you, please click the favorite button and subscribe.

See you in the next instructable.

Other instructables you might like:

$2 Arduino. The ATMEGA328 as a stand-alone. Easy, cheap and very small. A complete guide.

How to fix bad Chinese Arduino clones

Facebook: https://www.facebook.com/OfficialTomHeylen

Donate to help me keep doing this work: https://www.paypal.me/TomHeylen/2usd

<p>Nice! I was looking to make a remote indicator light somehow in order to know if my chicken coop door was shut (from inside the house far away), before the nocturnal predators come out. Now I know how!</p>
<p>What is the range with the standard spring antenna with FU4 mode and a baud rate of 1200?</p>
<p>Hi, Thanks soo much for this tutorial, I ordered 4 HC 12's and thaught no-one would have done anything on them, This tutorial really helped, Thanks!!</p>
<p>Tom,<br>My friend and I set this up exactly as it was shown in your tutorial. Copy and pasted the code. Everything works, except there is about a 1.2 second delay from when we enter into the serial monitor, and when it displays on the other serial monitor. Also, if we type two entries too quickly, it combines them on the same line instead of separating them on different lines. I assume it is on some timer and recognizes that the incoming message has ended because a certain amount of time has transpired. Any suggestions on this? Thanks.</p><p>--Isaac</p>
<p>For anyone who needs to know:</p><p>Turns out that the default serial monitor has a 1000ms delay. To fix the problem I used:</p><p>Serial.setTimeout(5);</p><p>mySerial.setTimeout(5);</p><p>For both the sender and receiver. That way, there is only a very small delay when sending and receiving information, as well as displaying it on the serial monitor. It works now! </p><p>Best,</p><p>Isaac</p>
<p>Can I use one HC-14 transmiter and two HC-12 as receivers. Same frequency same baude rate?</p>
Hi sir . In toggle button case both the Arduino is connected to computer .<br>Will this work if I use battery instead of pc after uploading the sketch? For final project? Plz reply
<p>Yes, the arduino will save the sketch in its memory.</p><p>It will keep the sketch forever until you upload a new one.</p>
I am making quadcopter. So for the remote control which one should I use between 'nrf24l01 with SMA antena' or 'HC-12' Bluetooth module for better range and controls??
Thanks for your guide. Can I use HC-12 module on my quadcopter and control it via android phone?? How much the range will be??
Good work Mr. tomheylen <br>From your kind How can make robotic control through. Wifi.by using HC12. And arduino. <br>With my best regards
<p>Thank you very much for your guide. I have a problem with my hc-12 modules. I've tried to test a maximum transmission distance and i have only 60-70 meters. transmission mode is FU4, i used antennas that was in the hc-12 pack(metal spiral(welding). What is the problem? How can i increase distance? Sorry for my English.</p>
<p>just to note that the cheaper boards are not good at low temperature - typically fail at 5 or 6 deg C or lower. Use Arduino board if intending to use in low temp application.</p>
hello sir,,, how to use in drone. and how make a flight controller of arduino board . can i its, sir plz reply me <br>my email id- asifali2140@gmail.com
<p>hi sir, my hc-12 module not respond to AT cmd mode, i have 3 modules no one will work?</p>
<p>Can I use the toggle switch send module to trigger a LED on multiple receive modules?</p>
<p>hi - your 'Exercise files here' link not working anymore ?</p>
My domain has expired. Should be working again today. If you send me a message on facebook, i will send you the files.The link to facebook is at the end of the article. Cheers
<p>got them - many thanks. Great work by the way.</p>
<p>Hi, great tutorial! Thank you!</p><p>Is it possible to send from one to the other and so on?</p>
Hi, I want to use RF transceiver 1km module pair to drive a robotic car of 4 wheelers through Arduino Uno.But it doesn't work.I don't understand whether the fault is on the RF module or on the program or on the arduino pin.<br><br>Can anyone give me the program codes of RF transceiver sender and receiver for driving a 4 wheelers robotic car through Arduino Uno.<br><br>Please please.......
<p>Hi, </p><p>Is is possible to go further than 1.8Km?</p>
<p>You can if you use a modified 2' diameter satellite dish. Remove the LNB and replace it with a bowtie antenna. The gain of the dish + the bowtie is about 38bdm which give a substantial boost. If you are doing one way data transmission use the coiled antenna on the transmitter and the dish antenna on the receive location. Overall cost is under $50 in parts.</p>
<p>You are a legend. BTW i got some questions. This module does not have pipe, or authentication procedures like nrf, esp modules. This is great. SO what if i have one module act as transmitter and two or more as receivers. Will it work. Will they receive simultaneously. ReplyASAP. It will be very helpful. </p>
<p>Hi Tom, Thanks for your hard work and putting this out to dummies like me.</p><p>I tried it and it all worked perfectly first time. Very clear instructions and easy to follow. Thanks again, now I can get on with my Mailbox Notifier.</p>
<p>Very nice, thanks for the great instructable, worked like a champ!</p>
<p>Hi Tom, congratulations on a really useful tutorial that gives an extremely clear introduction to using the HC-12!! </p><p>Just two minor observations... </p><p>(i) I had trouble getting the toggle sketch to work properly (the led would either switch only occasionally or else get stuck on. After doing some debugging, I eventually found it was the fault of the Arduino clone I was using for the receiver. Adding a 330 Ohm resistor between the pin 13 led and ground fixed the problem. </p><p>(ii) during my debugging, I found that mySerial.flush does not actually clear out the serial buffer - the term 'flush' is misleading. Instead, substitute while(mySerial.read()&gt;-1); . This reads the buffer until it is empty.</p><p>Thanks again for all the effort you put into this tutorial. It is very much appreciated. </p>
<p>Where are the zip files to test arduino codes??</p>
<p>I can't find them too</p>
<p>In the exercise files here option you will find the files.First click on show all steps then in the list of components you will see the last option as exercise files <em><strong>here</strong></em></p>
<p>I found them OkiE1 :)</p>
<p>Where are the zip files for arduino code??</p>
<p>Very good, simple and stabillity remote control. No problems with work.<br>Much better than nRF24L01. </p>
<p>Great tutorial! I finally started working through the steps today and so far I've had great success. I managed to get the driver for the Chinese Arduino boards working on my Mac (OS X 10.11 El Capitan). I got the LED toggle button sketches for the two boards up and working and then I wondered what the maximum range of the HC-12 might be. My home happens to sit atop a hill which has a broad view over my town so I figured I would get good range of transmission. I modified the send sketch for the transmitter unit so that it would automatically send a signal to flash the LED on the receiver. I was able to travel around with the receiver unit and as long as the LED kept flashing I would know that I was still receiving a signal. I used external antennas for each module as you suggested. I set the transmitter unit running outside on my deck which overlooks town. I put the other unit in my car and started driving around. I found that I easily got a consistent signal around my entire neighborhood even in areas where trees and homes obstructed the line of sight. I then took to the highway. The farthest line of sight distance was FIVE MILES AWAY (8 KM) as the crow flies! I measured the direct line of sight distance on google from my home to where my car was parked. Amazing! It would probably go further but I decided to end the experiment at that point. The test was using my HC-12 with default settings unaltered. If I changed the HC-12 settings and connect the transmitter up to my rooftop scanner antenna I wouldn't be surprised to get even better range.</p>
Which type of antenna are use for line of sight?<br><br><br>
<p>I suspect I'm going to hear from <a href="/member/PhilKE3FL">PhilKE3FL</a> about this. I'm probably doing something that isn't Koser with the Amateur Radio community.</p>
<p>We hams are pretty tight. Why not look into getting your amateur radio license. It's easier than you think and costs less than $50. You can do some great communication stuff with a legal license.</p>
<p>I did once have my technician class license. It has long since expired. I never actually used it. I was curious and on a lark I decided to take the test and I passed. More and more I'm looking into the possibility of becoming a full fledged amateur radio operator. Eventually I'm sure I'll join the club.</p>
<p>I tried again on my way to work today. I got a distance of 8.7 miles (14 KM), direct line of sight from my car to my house!</p>
Hi, Thanks for your feedback. I'm building a drone with this modules. When it's working I'll share I'll share the details.
<p>These antennas work great! Magnetic mount too. <a href="http://www.banggood.com/SMA-Male-Crimp-GSM-GPRS-433MHz-Antenna-3dbi-Magnetic-Base-p-961494.html"> http://www.banggood.com/SMA-Male-Crimp-GSM-GPRS-4...</a></p>
<p>Hi,<br>I'm a newbie on HC-12 and i have a problem. I'm making a drone and i want to make controller by myself. I want to send string which includes three different int's. When i connect arduino, it sends it for about a second and then it just stops sending, but if i look at the serial, the loop is still working.<br><br>the code:<br>#include &lt;SoftwareSerial.h&gt;</p><p>SoftwareSerial mySerial(2, 3);</p><p>void setup() {</p><p> mySerial.begin(9600);</p><p> Serial.begin(9600);</p><p>}</p><p>void loop() {</p><p> int baze = analogRead(A0);</p><p> int antr = analogRead(A1);</p><p> int trec = analogRead(A2);</p><p> String kabl=&quot;;&quot;;</p><p> String siunciam = baze + kabl + antr + kabl + trec + kabl;</p><p> mySerial.println(siunciam);</p><p> Serial.println(siunciam);</p><p> delay(20);</p><p>}</p>
Hi,<br><br>Is it possible to use the HC 12 to communicate between an arduino and an android phone which uses an app created from android studio?
<p>hi</p><p><br>do you recommend using those to communicate with an RC plane?</p><p>we need to send the altitude frrom die pressure sensor to our ground station.</p>
Yes. I use them for my drone projects.
<p>Hi tomheylen,</p><p>I did this project; it can communicate but range is not as long as you mentioned. I could get a max range 100-150 meters that is just like wifi or bluetooth. </p><p>What do you say?</p>
<p>Hi Tom, Great Instructable. We are having trouble with incorporating the HC-12 with an Arduino Mega. We can communicate between two Unos, and we can send commands from a Mega to an Uno. However, we cannot receive commands with an Arduino Mega. Do you have any thoughts as to why?</p>
<p>I have no idea. Check out what pins can be used for software serial on your mega. I never used a mega since the uno so far does everything I need.</p>
<p>Hi what parameters are required to send HC12 receiver for receiving data</p>

About This Instructable




Bio: I like to make stuff in my free time. Especially programming, cooking, electronics etc. Lately I'm making tutorials about stuff I made the last ... More »
More by tomheylen:Long range, 1.8km,  Arduino to Arduino wireless communication with the HC-12. How to connect a FT232RL programmer to the Arduino ATMEGA328 for uploading sketches $2 Arduino. The ATMEGA328 as a stand-alone. Easy, cheap and very small. A complete guide. 
Add instructable to: