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
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:
“OK+FU3
OK+B9600
OK+C001
OK+RP:+20dBm”.
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
195 Discussions
5 days ago
Hi !
Can I connect a two channel relay to this circuit and modify the code.
7 days ago
Hi !
I've been trying make this led glow when I press the momentary button.
I've checked the connections.
I've used the same code that you've used.
But still I can't get the result.
The messenger code works fine.
But I'm getting problems when I upload this led code.
I'm very stressed.
I've just got 3 days to complete this.
What should be the problem?
Pls help if you can
Reply 6 days ago
Did you upload to the two arduino's? The code should work fine.
Reply 6 days ago
S I did
Still it didn't work
There is no problem with the Arduino or the hc12.
The example programs run fine
Suggest me something I can do or change
11 days ago
Hi can someone send me the code of the button with two hc 12
Question 2 months ago
Salut! je n'arrive pas à envoyer un message avec la messagerie instantanée mais des commandes AT + ... fonctionne
Peux être que cela soit ce que je l'utilise vraiment un clone de l'arduino NANO? Merci!
Hi! I can't send a message with instant messaging but with AT + commands... works
Maybe that's what I'm really using a clone of the arduino NANO? Thank you!
Answer 4 weeks ago
Vérifiez que le pin "set" du module HC-12 n'est pas au niveau bas ou "ground". Lorsque le pin "set" est à "ground", il est possible de configurer le module avec les commandes AT. Mais la transmission de message donne un "ERROR". Il faut retirer le "ground" du pin "set". Pour la transmission de message.
Reply 4 weeks ago
J'ai bien debranche le ground mais cela ne fonctionne toujours pas
3 months ago
Very good tuto.
A question: is it possible with 2 HC12 (one with usb connexion) to upload codes to arduino.
It's to upload to arduino located in my attic.
Thanks
Reply 3 months ago
Not sure. I haven't tested this. Let me know if you find out. Have a good day!
Reply 3 months ago
I have answered this morning but i don't see where are my replies.
I see your response but not mine.
Probably an error from me.
Pierre
Reply 3 months ago
Ok thank you. Maybe with an apc220 but i have not seen about the uploading.
However it will be very interesting, to be able to touch arduino directhy from anywhere in a house.
Have a good day
Question 4 months ago on Step 6
Once I set the HC-12 baud rate to 1200 on myserial, for example, do I need to change the myserial port rate to 1200 (myserial.begin(1200)) to continue to send serial data to the HC-12 for transmission over the air?
Question 5 months ago on Introduction
I want to transmit data of outdoor weather station to indoor receiver with LCD screen with distance of about 100m and some concrete walls in between. Can you write me down which settings(baud rate, frequency, transmission mode) would be the best for that kind of transmission, please? Here is my email address: klemenp78@gmail.com. Thank you in advance.
Reply 5 months ago
Start with the standard baut rate. If it doesn't work, lower it. It all depends on how many walls are in between.
Reply 5 months ago
There are three walls in between. What about transmission mode and frequency?
Reply 5 months ago
The lower the baut rate, the further the signal carries. Look in the tutorial and files to see how to accomplish this. You have a good day!
Question 9 months ago
I want to transmit a temperature across and got a temperature sensor. How can I transmit it, would it be possible?
Answer 6 months ago
Here's one way. There's lots more tutorials out there on what you want to do if you search for them. https://www.allaboutcircuits.com/projects/how-to-make-a-wireless-thermometer-with-arduino/
Question 8 months ago
Do HC-12 can communicate between more then two arduino's ?