Arduino Remote At 433 MHz with HC-12 Module – Beta

Arduino Remote – Beta Testings

Arduino remote is an attempt to use relatively cheap HC-12 module, which has plenty of options, ranging from 100 channels, power setting from 0.8 mW up to 100 mW at 433.4 to 437.4 MHz.


Out there exist up to 1 W transceivers, but this will come later as long range will be needed, just for sake of simplicity, I will say that 100 mW is more than sufficient for decent range. Datasheet.


Download (PDF, Unknown)


Why 433 MHz instead 2.4 GHz?!

The reason is simple: 2.4 GHz is too much “crowded” with all that WiFi signals and it has more dependence of humidity, obstacles, and other factors. All what is currently present on this band is wireless car keys, humidity and temperature sensors, and maybe other unknown low power transmitters.

Is this legal?

Note that this frequency as well as 2.4 GHz and 5.8 GHz are under ISM bands. So, no any licence needed, just pay attention of your local regulations. For example, while most of the world accept 100 mW power, in UK is allowed only 1/4 of that: 25 mW maximum. Keep in mind that HC-12 has 100 channels, with 400 kHz spacing, which means that channel 100 will be at 437.400 MHz, well above legal limit of 434.790 MHz (from 433.050 MHz to 433.790 MHz, so only first four channels are “legal” by any means. This “huge” spacings are made because this module can work on really wide modulation on high speeds. But, since we need mostly decent speed, say 15 kbps in air, less than 400 kHz will be more appropriate, but this module just has not this option.


Yes, it has few bad things. First at all, this module has no RSSI, so telemetry and feedback about how good signal is at other end is not possible. Only telemetry is possible for battery status, GPS coordinates and various other things, since it is actually transceiver, not simple transmitter or receiver – both modules on remote and your vehicle or any other apparatus (for example, you want to trigger camera by this remote) are capable to send some data back.

Another limitation is speed of changing parameters, lack of hopping ability and few others. When sending AT commands for changing parameters, 80 milliseconds needed to module back information whether your command is okay or received in error. The same is for changing channel, at least 80 mS needed for module to change channel. This is because this module has MCU for dealing with all needed parameters, while main RF chip inside is Si4463, beautiful chip, yet pretty difficult to make it to work due to lack of documentation. So, someone made HC-12 module, which has “as-is” functions. (I started to work on Si4432 and Si4463 alone, but it is not so easy to understand how it really works, an modules has pin raster of just 1.27 mm, so not easy to manipulate…)

Some codes?

Yes, here are my first working codes for Arduino nano and Arduino pro mini (Although it may work with other versions too). Note that this is just beta version, which means that it has just essential functions, not fully developed and just for sake of testing, and showing how it works. Currently I am using it as a remote for my car and my “weirdo-boat”, which didn’t touch water (yet), except some bath water. 😀

Arduino nano/pro mini sketch for remote:

Arduino nano/pro mini for receiver end:

Is that all?!

No! All of that require more work. Especially for remote purposes. Also, my old projects on Arduino altimeter and other suffer from some intrinsic bugs related to “SoftwareSerial” and “VirtualWire” libraries. Now, I am using this library just to set HC-12, but soon it will be changed so that no any library will be needed. So far, it looks like it has double system, which is true: “mySerial” sending data to module, receiving message, and then in second part with manual codes dealing with “time critical” pulses. This part is not used in my altimeter project, and there are many bugs for this reason. Now, ISR part of the receiver take care of proper synchronization of incoming data and fill array exactly as it should be, instead random “mess”, and other weirdness with classical SoftwareSerial protocol(s). Soon (not sure how soon exactly), all my old project will be re-viewed and repaired, but I need lot of work on it. HC-12 module uses GFSK modulation, which is excellent – it is just enough wide as it should be, while for example ASK (A.K.A. OOK) modulation can spread on whole 433 MHz band. For this reason you may find that almost all ASK modules has the same frequency of 433.920 MHz, which is center of allowed frequency range from 433.050 MHz up to 434.790 MHz (simple math: (433.050+434.790)/2=433.920 MHz). So, all that wide mess is within legal limits.

%d bloggers like this: