{"id":21298,"date":"2024-05-26T19:31:13","date_gmt":"2024-05-26T19:31:13","guid":{"rendered":"https:\/\/wolles-elektronikkiste.de\/?p=21298"},"modified":"2026-02-02T17:49:38","modified_gmt":"2026-02-02T17:49:38","slug":"hc-14-the-simple-lora-module","status":"publish","type":"post","link":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module","title":{"rendered":"HC-14 &#8211; the simple LoRa module"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">About this Post<\/h2>\n\n<p>In this article, I will discuss the 433 MHz LoRa module HC-14, which could be seen as a successor or alternative to the HC-12 radio module that I have reported on <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/hc-12-radio-module\" target=\"_blank\" rel=\"noopener\">here<\/a>. At first glance, the HC-14 and HC-12 modules have certain similarities, but the underlying technology is very different.<\/p>\n<p>I have already reported on LoRa radio technology in my article on the <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series\" target=\"_blank\" rel=\"noopener\">E22, E32 and E220 modules<\/a>. These modules are far superior to the HC-14 in terms of functionality. On the other hand, the HC-14 module impresses with its extremely simple handling. It is also quite a bit smaller.<\/p>\n<p>Enough reasons to dedicate a separate article to the HC-14 module. A certain challenge was that the HC-14 module is still relatively new, comes from China, and therefore little information is available in English. I translated the Chinese manual as best I could with the help of <a href=\"https:\/\/www.deepl.com\/translator\" target=\"_blank\" rel=\"noopener\">DeepL<\/a>. You can find the result <a href=\"https:\/\/github.com\/wollewald\/BlogStuff\/tree\/main\/HC-14\" target=\"_blank\" rel=\"noopener\">here<\/a>.&nbsp;<\/p>\n\n<p><strong>Update 04.10.25<\/strong>: There is now an <strong>HC-15 module<\/strong> with firmware 1.0 and 1.1. I have translated the data sheets into German and English using AI.  You can find it <a href=\"https:\/\/github.com\/wollewald\/BlogStuff\/tree\/main\/HC-15\" target=\"_blank\" rel=\"noopener\">here<\/a>. Version 1.0 is only slightly different. Their AT commands are &gt; 90% identical. It should be noted that VCC is limited to 3.0 &#8211; 3.6 V. A new article on this is not worthwhile. Version 1.1, on the other hand, looks very interesting as it implements a number of LORA functions, such as sending to specific modules or encryption. I have bought several HC-15 modules from different stores, but have not received one with the 1.1 firmware. If you get one, please share the source.<br>      <\/p>\n\n<p>What topics I will cover:<\/p>\n<ul>\n<li><a href=\"#legal\">Legal matters<\/a><\/li>\n<li><a href=\"#supplier\">Sources of supply<\/a><\/li>\n<li><a href=\"#technical_data\">Technical characteristics<\/a>\n<ul>\n<li><a href=\"#pinout\">Pinout<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#connection\">Connection to the microcontroller board<\/a><\/li>\n<li><a href=\"#configuration\">Configuring the HC-14 module<\/a>\n<ul>\n<li><a href=\"#setting_mode\">Switching the HC-14 module to setting mode<\/a><\/li>\n<li><a href=\"#setting_sketch\">The setting sketch<\/a><\/li>\n<li><a href=\"#at_commands\">AT commands<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#send_receive\">Sending and receiving<\/a>\n<ul>\n<li><a href=\"#two_hc14\">Connecting two HC-14 modules<\/a><\/li>\n<li><a href=\"#more_hc14_modules\">Connect more than two HC-14 modules<\/a><\/li>\n<li><a href=\"#sending_structs\">Sending and receiving structures<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#saving_power\">Saving power<\/a>\n<ul>\n<li><a href=\"#wake_up_receiver\">Waking up the receiving microcontroller<\/a><\/li>\n<li><a href=\"#more_power_saving\">Saving more power &#8211; waking up the transmitting microcontroller<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#range_test\">Range Test<\/a><\/li>\n<li><a href=\"#firmware_versions\">Firmware 1.0 vs. Firmware 1.1<\/a><\/li>\n<li><a href=\"#appendix\">Appendix &#8211; Saving power with the ESP32<\/a><\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\" id=\"legal\">Legal matters<\/h2>\n\n<p>Important to know:<\/p>\n<ul>\n<li>Radio is legally regulated in almost every country in the world, for example regarding permitted frequencies, transmission power or the duty cycle (percentage of actual transmission time).<\/li>\n<li>Not everything you can buy can be used without restrictions &#8211; and some things can&#8217;t be used at all!<\/li>\n<\/ul>\n<p>In Germany, the rules for radio are set by the Federal Network Agency. You can find the relevant details <a href=\"https:\/\/www.bundesnetzagentur.de\/DE\/Fachthemen\/Telekommunikation\/Frequenzen\/Allgemeinzuteilungen\/start.html\" target=\"_blank\" rel=\"noopener\">here<\/a> in the section &#8220;Funkanlagen mit geringer Reichweite&#8221;. Hobbyists mainly use the frequencies around 433 MHz, 868 MHz and 2.4 GHz &#8211; but also these are not without restrictions. <strong>You are responsible for complying with the applicable regulations in your country.<\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"supplier\">Sources of supply<\/h2>\n\n<p>The HC-14 module is available from several shops on AliExpress for around 5 to 6 dollars each. If you order from Europe, you will normally receive your goods within three weeks. I have not yet seen the HC-14 module on Amazon, eBay or the usual electronics stores.<\/p>\n\n<p>If you order modules, you should make sure that they have firmware &gt;= V1.1. You can find out how to tell them apart <a href=\"#firmware_versions\">below<\/a>. I hope that version 1.0 will die out in the long term. Not everything in this article works with the V1.0 modules!   <\/p>\n<p>I have received version 1.1 modules on AliExpress from the following stores:<\/p>\n<ul>\n<li>ShenZhen CHDWTECH Flagship Store<\/li>\n<li>Hong Kong feng tai co., LTD<\/li>\n<\/ul>\n<p>Of course, I cannot guarantee that this will remain the case. If in doubt, you must contact the store before ordering and ask. <\/p>\n\n<h2 class=\"wp-block-heading\" id=\"technical_data\">Technical characteristics<\/h2>\n\n<p>The HC-14 module is manufactured by <a href=\"http:\/\/www.hc01.com\" target=\"_blank\" rel=\"noopener\">Guangzhou Huicheng Information Technology Co, Ltd<\/a> and &#8211; according to the data sheet history &#8211; appears to have been on the market since September 2022. The module is based on the LoRa chip SX1278, which is also used in the modules of the Ebyte E32 series. In addition, the module is equipped with the powerful N32S032 processor from Nation Technology (see <a href=\"https:\/\/www.nationstech.com\/en\/N32Sen\/\" target=\"_blank\" rel=\"noopener\">here<\/a>), which enables simple control via Serial.<\/p>\n<p>Some data at a glance:<\/p>\n<ul>\n<li><strong>Supply voltage<\/strong>: 3.0 &#8211; 5.5 volts<\/li>\n<li><strong>Power consumption<\/strong>:\n<ul>\n<li>Non-transmitting: 18 mA (mode S1) &#8211; 23 mA (mode S8)<\/li>\n<li>Transmitting: maximum approx. 130 mA (own measurement)<\/li>\n<li>Setting mode: approx. 11 mA<\/li>\n<\/ul>\n<\/li>\n<li><strong>Control<\/strong>: Serial, 1200 &#8211; 115200 baud<\/li>\n<li><strong>Range<\/strong>: up to 3 km (manufacturer&#8217;s specification)<\/li>\n<li><strong>Radio technology<\/strong>: LoRa \/ Transparent mode<\/li>\n<li><strong>Radio frequency<\/strong>: 415 &#8211; 450 MHz (50 channels)<\/li>\n<li><strong>Transmitter power<\/strong>: 4 to 100 mW (6 &#8211; 20 dBm)\n<ul>\n<li>Adjustable only from firmware V1.1<\/li>\n<\/ul>\n<\/li>\n<li><strong>Setting<\/strong>: via AT commands<\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\" id=\"pinout\">Pinout<\/h3>\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/433_MHz_antenna_options.png\"><img loading=\"lazy\" decoding=\"async\" width=\"216\" height=\"779\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/433_MHz_antenna_options.png\" alt=\"\" class=\"wp-image-21173\" style=\"width:147px;height:auto\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/433_MHz_antenna_options.png 216w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/433_MHz_antenna_options-83x300.png 83w\" sizes=\"auto, (max-width: 216px) 100vw, 216px\" \/><\/a><figcaption class=\"wp-element-caption\">Antennas for the HC-14 module<\/figcaption><\/figure>\n<\/div>\n<p>The HC-14 module has the following inputs and outputs:<\/p>\n<ul>\n<li><strong>VCC \/ GND<\/strong>: Power supply, 3.0 &#8211; 5.5 V DC. According to the data sheet, the power supply should be able to deliver at least 250 mA.<\/li>\n<li><strong>RX<\/strong>: Serial input, has its own pull-up. The voltage level is equal to VCC.<\/li>\n<li><strong>TX<\/strong>: Serial output. Voltage level equals VCC.<\/li>\n<li><strong>KEY<\/strong>: sets the operating mode. The pin is pulled to HIGH with an internal resistor.\n<ul>\n<li>Connected to GND: Setting mode (via AT commands).<\/li>\n<li>Connected with HIGH or unconnected: radio mode.<\/li>\n<\/ul>\n<\/li>\n<li><strong>STA<\/strong>: indicates the status of the module.\n<ul>\n<li>HIGH (max. 3.3 volts): Module is ready to send or receive data.<\/li>\n<li>LOW: The module is busy.<\/li>\n<li>STA has an internal 1 k\u03a9 resistor.<\/li>\n<\/ul>\n<\/li>\n<li><strong>WKUP<\/strong>: What looks so promising as a wake-up pin unfortunately has no function (yet?).<\/li>\n<li><strong>ANT<\/strong>: You can solder the small spiral antenna supplied here. If achieving a long range is important to you, then I recommend a 433 MHz antenna. As these normally have an SMA connection, you will also need an SMA to U.FL IPEX adapter.<\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\" id=\"connection\">Connection to the microcontroller board<\/h2>\n\n<p>The following circuit was used for most of my example sketches:<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_nano_wiring-1024x389.webp\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"389\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_nano_wiring-1024x389.webp\" alt=\"Connecting the HC-14 module to an Arduino Nano\" class=\"wp-image-21121\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_nano_wiring-1024x389.webp 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_nano_wiring-300x114.webp 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_nano_wiring-768x292.webp 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_nano_wiring.webp 1275w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Connecting the HC-14 module to an Arduino Nano<\/figcaption><\/figure>\n\n<p>As the Nano only has one hardware serial port, I decided to use SoftwareSerial and selected pins 10 and 11 for this.<\/p>\n<p>In this configuration, we control the KEY pin via software by setting PIN 5 to INPUT\/LOW (KEY is HIGH due to its internal pull-up) or OUTPUT\/LOW (KEY is LOW). Alternatively, you could connect KEY to GND via a switch. If you do not want to change the settings, you can also leave the pin unconnected.<\/p>\n<p>We will use the STA pin later to wake up the microcontroller or to query the status of the HC-14 module. You can also leave it unconnected until then. Or you can attach an LED to it to visually monitor the status. A series resistor is already present internally.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"configuration\">Configuring the HC-14 module<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"setting_mode\">Switching the HC-14 module to setting mode<\/h3>\n\n<p>To put the HC-14 module into setting mode, the KEY pin must be pulled LOW. There are 2 possibilities for this:<\/p>\n<ol>\n<li>KEY to LOW <strong>after <\/strong>the HC-14 module has been connected to the power supply.\n<ul>\n<li>In this case, the set baud rate is used.<\/li>\n<\/ul>\n<\/li>\n<li>KEY to LOW <strong>while or before<\/strong> the HC-14 module is connected to the power supply.\n<ul>\n<li>In this case, the baud rate 9600 is used temporarily.<\/li>\n<li>Firmware V1.0: Changed settings are permanently retained.<\/li>\n<li>From firmware V1.1: Changed settings are lost after disconnection from the power supply.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Method 2 is helpful if you have forgotten which baud rate you have set in the HC-14 module. <\/p>\n\n<h3 class=\"wp-block-heading\" id=\"setting_sketch\">The setting sketch<\/h3>\n\n<p>To set up the HC-14 module, upload the following sketch:<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_settings.ino\" data-enlighter-title=\"hc14_settings.ino\">#include &lt;SoftwareSerial.h&gt;\nconst int keyPin = 5;\n\nSoftwareSerial hc14(10,11); \/\/ RX, TX\n\nvoid setup() {\n  Serial.begin(9600);\n  hc14.begin(9600);\n  pinMode(keyPin, OUTPUT); \/\/ Setting Mode, change to INPUT for normal mode\n  hc14.print(\"AT+RX\");\n  Serial.println(\"Current Settings of the HC-14 module: \");\n  while(!hc14.available()){} \/\/ wait for HC-14 to answer\n  Serial.println(hc14.readString());\n  Serial.println(\"Now, enter your settings. Choose \\\"No Line Ending\\\" in the IDE!\");\n}\n\nvoid loop() {\n  if (hc14.available()) {\n    Serial.write(hc14.read());\n  }\n  if (Serial.available()) {\n    hc14.write(Serial.read());\n  }\n}<\/pre>\n<p>\n\n<p>Here is the output:<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/output_hc14_settings.ino_.png\"><img loading=\"lazy\" decoding=\"async\" width=\"692\" height=\"130\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/output_hc14_settings.ino_.png\" alt=\"Output hc14_settings.ino\" class=\"wp-image-21133\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/output_hc14_settings.ino_.png 692w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/output_hc14_settings.ino_-300x56.png 300w\" sizes=\"auto, (max-width: 692px) 100vw, 692px\" \/><\/a><figcaption class=\"wp-element-caption\">Output hc14_settings.ino<\/figcaption><\/figure>\n\n<p>We will discuss what this means in detail soon.<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"at_commands\">AT commands<\/h3>\n\n<p>The HC-14 module is set using AT commands. You can enter the commands via the serial monitor or as part of your code. Incidentally, AT commands were developed by the modem manufacturer Hayes in the early 1980s. &#8220;AT&#8221; stands for &#8220;come to <strong>AT<\/strong>tention&#8221;. <strong>When sending the AT commands, it is important that you have set &#8220;No line ending&#8221; in the Arduino IDE.&nbsp;<\/strong> <\/p>\n\n<h4 class=\"wp-block-heading\">1. Connection test<\/h4>\n\n<p>Type &#8220;AT&#8221; (without the quotation marks) as a message into the serial monitor and press Enter. You should receive an &#8220;OK&#8221; in response.<\/p>\n\n<h4 class=\"wp-block-heading\">2. Setting the default parameters<\/h4>\n\n<p>To reset the module to the default settings, use the following AT command:<\/p>\n<p>Input: <code>AT+DEFAULT<\/code><\/p>\n<p>Response: <code>OK+DEFAULT<\/code><\/p>\n\n<h4 class=\"wp-block-heading\">3. Setting or querying the baud rate<\/h4>\n\n<p>You set the baud rate with :<\/p>\n<p><code>AT+Bxxxx<\/code> with xxxx = 1200, 2400, 4800, 9600, 19200, 38400, 57600 or 115200. The default setting is 9600.<\/p>\n<p><strong>Example<\/strong>:<\/p>\n<p>Input: <code>AT+B19200<\/code><\/p>\n<p>Output: <code>OK+B:19200<\/code><\/p>\n<p>You query the baud rate with <code>AT+B?<\/code>.<\/p>\n\n<h4 class=\"wp-block-heading\">4. Setting or querying the channel<\/h4>\n\n<p>You have a choice of 50 different frequencies (channels):<\/p>\n<p><code>AT+Cxxx<\/code> &#8211; where xxx is the channel according to the table below.<\/p>\n<p><strong>Example<\/strong>:<\/p>\n<p>Input to set channel 28: <code>AT+C028 <\/code><\/p>\n<p>Output: <code>OK+C:28<\/code><\/p>\n\n<p>You must always enter three characters for the channel by preceding one or two zeros.<\/p>\n<p>Query: <code>AT+C?<\/code><\/p>\n<p>Here is the table with the different channels:<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_channel_vs_wavelength.png\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"365\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_channel_vs_wavelength.png\" alt=\"The channels of the HC-14 module\" class=\"wp-image-21136\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_channel_vs_wavelength.png 945w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_channel_vs_wavelength-300x116.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_channel_vs_wavelength-768x297.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/a><figcaption class=\"wp-element-caption\">The channels of the HC-14 module<\/figcaption><\/figure>\n\n<h4 class=\"wp-block-heading\">5. Setting the receiver sensitivity<\/h4>\n\n<p>The higher the receiver sensitivity, the greater the range, but the lower the transmission rate over the air.<\/p>\n<p>The following table shows how long it takes to transmit a certain number of bytes. If the packet size specific to the receiver sensitivity is exceeded, the additional bytes are divided into packets accordingly.<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_receiving_sensitivity_vs_data_rate-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1082\" height=\"420\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_receiving_sensitivity_vs_data_rate-2.png\" alt=\"Receiver sensitivity of the HC-14 module vs. transmission time\" class=\"wp-image-21142\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_receiving_sensitivity_vs_data_rate-2.png 1082w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_receiving_sensitivity_vs_data_rate-2-300x116.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_receiving_sensitivity_vs_data_rate-2-1024x397.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_receiving_sensitivity_vs_data_rate-2-768x298.png 768w\" sizes=\"auto, (max-width: 1082px) 100vw, 1082px\" \/><\/a><figcaption class=\"wp-element-caption\">Receiver sensitivity of the HC-14 module vs. transmission time<\/figcaption><\/figure>\n\n<p>You set the receiver sensitivity as follows:<\/p>\n<p><code>AT+Sx<\/code> with x = rate<\/p>\n<p><strong>Example<\/strong>:<\/p>\n<p>Input: <code>AT+S3<\/code><\/p>\n<p>Output: <code>OK+S:3<\/code><\/p>\n<p>Query: <code>AT+S?<\/code><\/p>\n\n<h4 class=\"wp-block-heading\">6. Querying the firmware version<\/h4>\n\n<p>You can query the firmware version as follows:<\/p>\n<p>Input: <code>AT+V?<\/code><\/p>\n<p>Output: <code>www.hc01.com HC-14V1.1 2022.12.12<\/code>&nbsp;\u2192 Version 1.1 from 12th Dec., 2022<\/p>\n\n<h4 class=\"wp-block-heading\">7. Setting or querying the transmitter power<\/h4>\n\n<p>This is how you set the transmitter power:<\/p>\n<p><code>AT+Pxx<\/code> where x = power in dBm, integer values between 6 and 20 are allowed.<\/p>\n<p><strong>Example<\/strong>:<\/p>\n<p>Input: <code>AT+P20<\/code><\/p>\n<p>Output: <code>OK+P:+20dBm<\/code><\/p>\n<p>Query: <code>AT+P?<\/code><\/p>\n\n<p><strong>The transmission power can only be set from firmware V1.1!<\/strong><\/p>\n\n<h4 class=\"wp-block-heading\">8. Querying the most important settings<\/h4>\n\n<p>I have already explained how to query the baud rate, the channel, the receiver sensitivity and the transmitter power in one go (including the output) in the settings sketch above.<\/p>\n<p>Query: <code>AT+RX<\/code><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"send_receive\">Sending and receiving<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"two_hc14\">Connecting two HC-14 modules<\/h3>\n\n<p>Now we come to the actual core of the article, namely sending and receiving data by radio. This is surprisingly simple. Duplicate the circuit from above and upload the following sketch to both microcontrollers. If you are using the Arduino IDE 2.x, it is best to rename the sketch for one of the microcontrollers so that you have two serial monitors available.&nbsp;&nbsp;<\/p>\n<p>To be able to read the messages better, you should select the option &#8220;New Line&#8221; or &#8220;Both NL &amp; CR&#8221;.<\/p>\n<p>It is important that you have set the same receiver sensitivity and the same channel for both HC-14 modules.<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">#include &lt;SoftwareSerial.h&gt;\nint keyPin = 5;\n\nSoftwareSerial hc14(10,11); \/\/ RX, TX\n\nvoid setup() {\n  Serial.begin(9600);\n  hc14.begin(9600);\n  \/* Uncomment the following lines if you want to check the settings\n  pinMode(keyPin, OUTPUT); \/\/ Setting Mode, change to INPUT for normal mode\n  hc14.print(\"AT+RX\");\n  Serial.println(\"Current Settings of the HC-14 module: \");\n  while(!hc14.available()){} \/\/ wait for HC-14 to answer\n  Serial.println(hc14.readString());\n  Serial.println(\"Changing to normal mode - Enter your messages\"); *\/\n  pinMode(keyPin, INPUT);  \n}\n\nvoid loop() {\n  if (hc14.available()) {\n    Serial.write(hc14.read());\n  }\n  if (Serial.available()) {\n    hc14.write(Serial.read());\n  }\n}<\/pre>\n<p>\n\n<p>If you now enter a message on one serial monitor, it will be output on the other and vice versa. It appears as if the two microcontrollers are connected directly via SoftwareSerial. This also offers you access to the numerous convenient serial functions described in <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/serial-and-softwareserial#serial_functions\" target=\"_blank\" rel=\"noopener\">my last article<\/a>.<\/p>\n<p>If you send a message that is larger than the packet size, you will see that the packets arrive with a time delay.<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"more_hc14_modules\">Connect more than two HC-14 modules<\/h3>\n\n<p>If you have more than two microcontrollers communicating with each other via HC-14 modules, a transmitted message will be received by all HC-14 modules that are set to the same channel and receiver sensitivity. You could use these settings to address modules individually. Unfortunately, the HC-14 modules do not offer individual addressing, as is the case with the fixed transmission mode of the Ebyte LoRa modules (see <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#fixed_transmission\" target=\"_blank\" rel=\"noopener\">here<\/a>). That is the price of simplicity.<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"sending_structs\">Sending and receiving structures<\/h3>\n\n<p>In practical use, you may have to send data records that consist of different data types. Once again, I am using the example of a weather station to which the humidity (an integer), the temperature (a float) and the rain status (a bool) are to be transmitted. A structure as a data container is ideal for this.<\/p>\n\n<p>Here is the transmitter sketch:<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_struct_transmitter.ino\" data-enlighter-title=\"hc14_struct_transmitter.ino\">#include &lt;SoftwareSerial.h&gt;\n#define INTERVAL 5000\nunsigned long lastMillis = 0;\n\nconst int keyPin = 5;\n\nstruct weatherData {\n  int humidity;\n  float temperature;\n  bool rain;\n};\n\nweatherData currentWeather = { 32, 25.0, false };\nSoftwareSerial hc14(10,11);\n\nvoid setup() {\n  pinMode(keyPin, INPUT);\n  Serial.begin(9600);\n  hc14.begin(9600);\n}\n\nvoid loop() { \n  if( millis()-lastMillis &gt;= INTERVAL ){ \n    lastMillis = millis(); \n    hc14.write((byte*)&amp;currentWeather, sizeof(currentWeather));\n    Serial.println(\"Data sent\");\n  } \n}<\/pre>\n<p>\n\n<p>And here is the receiver sketch:<\/p>\n<\/p>\n<div class=\"scroll-paragraph\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_struct_receiver.ino\" data-enlighter-title=\"hc14_struct_receiver.ino\">#include &lt;SoftwareSerial.h&gt;\n#define INTERVAL 5000\nunsigned long lastMillis = 0;\n\nint keyPin = 5;\n\nstruct weatherData {\n  int humidity;\n  float temperature;\n  bool rain;\n};\n\nweatherData currentWeather = { 0, 0.0, false };\nSoftwareSerial hc14(10,11);\n\nvoid setup() {\n  pinMode(keyPin, INPUT);\n  Serial.begin(9600);\n  hc14.begin(9600);\n}\n\nvoid loop() { \/\/ run over and over\n  if(hc14.available()){ \n    hc14.readBytes((byte*)&amp;currentWeather, sizeof(currentWeather));\n    Serial.print(\"Humidity [%]: \");\n    Serial.println(currentWeather.humidity);\n    Serial.print(\"Temperature [\u00b0C]: \");\n    Serial.println(currentWeather.temperature, 1);\n    if(currentWeather.rain){\n      Serial.println(\"It's raining.\");\n    }\n    else{\n      Serial.println(\"It doesn't rain.\");\n    }\n    Serial.println();\n  } \n}<\/pre>\n<p>\u00a0<\/p>\n<\/div>\n<p>\n\n<p>Since we are leaving the actual topic a bit here, I would just like to point out one aspect, namely that the structure is sent like this<\/p>\n<p><code>hc14.write((byte*)&amp;currentWeather, sizeof(currentWeather));<\/code><\/p>\n<p>and with:<\/p>\n<p><code>hc14.readBytes((byte*)&amp;currentWeather, sizeof(currentWeather));<\/code><\/p>\n<p>which is maybe not obvious, at least for beginners.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"saving_power\">Saving power<\/h2>\n\n<p>Current is a precious resource for battery-powered projects. At least if you only communicate in one direction, as with the weather station, there are options for reducing power consumption.<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"wake_up_receiver\">Waking up the receiving microcontroller<\/h3>\n\n<p>The power-saving options on the receiver side are limited in that the HC-14 module must remain ready to receive and consumes around 20 mA of current. Unfortunately, it does not have a sleep mode from which it can be woken up by an incoming message. The Ebyte LoRa modules (and others) definitely do this better.<\/p>\n<p>But at least you can send the microcontroller to sleep and use the STA signal from the HC-14 to wake it up again. When the HC-14 module receives data, STA goes LOW. This happens some time before the data is transmitted to the microcontroller via the TX pin of the HC-14 module. The delay depends on the transmission rate, which you set indirectly via the receiver sensitivity:<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S3-1024x208.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"208\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S3-1024x208.png\" alt=\"STA vs. TX (HC-14) at receiver sensitivity setting S3\" class=\"wp-image-21164\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S3-1024x208.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S3-300x61.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S3-768x156.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S3.png 1148w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">STA vs. TX (HC-14) at receiver sensitivity setting S3<\/figcaption><\/figure>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S1_mode-1024x181.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"181\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S1_mode-1024x181.png\" alt=\"STA vs. TX (HC-14) at receiver sensitivity setting S3\" class=\"wp-image-21168\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S1_mode-1024x181.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S1_mode-300x53.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S1_mode-768x136.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S1_mode-1320x233.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_TX_S1_mode.png 1324w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">STA vs. TX (HC-14) at receiver sensitivity setting S1<\/figcaption><\/figure>\n\n<p>Whether this time is sufficient for the microcontroller to be ready to receive messages depends on the microcontroller and the sleep mode. I have successfully tested the following examples in S3 mode.<\/p>\n\n<h4 class=\"wp-block-heading\">Example 1: AVR based Arduino board<\/h4>\n\n<p>I tried out the first example on an Arduino Nano. The Nano is put into power-down mode, from which it is woken up by an external interrupt (details on the sleep modes can be found <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/sleep-modes-and-power-management\" target=\"_blank\" rel=\"noopener\">here<\/a>). The STA signal serves as the interrupt trigger. The incoming message is read with <code>Serial.readStringUntil('\\n');<\/code> to avoid a timeout. To do this, it is necessary to send the message on the sender side with <code>Serial.println()<\/code>, i.e. with a line feed. Or, you can select the setting &#8220;New Line&#8221; or &#8220;Both NL &amp; CR&#8221; when sending via serial monitor. You can find out more about Serial <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/serial-and-softwareserial\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>The receiver sketch:<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_wake_up_avr_board.ino\" data-enlighter-title=\"hc14_wake_up_avr_board.ino\">#include &lt;avr\/sleep.h&gt;\n#include &lt;SoftwareSerial.h&gt;\nconst int keyPin = 5;\nconst int intPin = 2;\n\nSoftwareSerial hc14(10,11);\n\nvoid wakeUpISR() {\n  delay(0); \/\/ add code if you want\n}\n\nvoid setup() {\n  pinMode(keyPin, INPUT);\n  pinMode(intPin, INPUT);\n  attachInterrupt(digitalPinToInterrupt(intPin), wakeUpISR, FALLING);\n  Serial.begin(9600);\n  hc14.begin(9600);\n  Serial.println(\"I am going to sleep now...\");\n  Serial.flush(); \/\/ without flush() the output might not be fully displayed\n  set_sleep_mode(SLEEP_MODE_PWR_DOWN); \/\/ define sleep mode\n  sleep_mode();  \/\/ now sleep\n}\n\nvoid loop() { \n  if(hc14.available()){\n    String messageIn = hc14.readStringUntil('\\n');\n    Serial.println(messageIn);\n    Serial.println(\"I am going to sleep again...\");\n    Serial.flush();\n    sleep_mode();\n  }\n}<\/pre>\n<p>\n\n<p>An Arduino Nano consumes quite a lot of power even in power-down mode. The board LED, the USB-to-TTL chip and the voltage regulator are to blame. A better choice would be the Arduino Pro Mini or a &#8220;naked&#8221; AVR chip.<\/p>\n\n<h4 class=\"wp-block-heading\">Example 2: ESP32 Development Board<\/h4>\n\n<p>We put the ESP32 into deep sleep mode. In contrast to the last example, the wake-up triggers a reset.<\/p>\n<p>As no SoftwareSerial is implemented for the ESP32, we use Serial1 for communication with the HC-14.<\/p>\n<p>This circuit was used: <\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_wake_up-1024x439.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"439\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_wake_up-1024x439.png\" alt=\"HC-14 module connected to the ESP32\" class=\"wp-image-21160\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_wake_up-1024x439.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_wake_up-300x129.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_wake_up-768x329.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_wake_up.png 1201w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">HC-14 module connected to the ESP32<\/figcaption><\/figure>\n\n<p>And here is the corresponding sketch:<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_wake_up_esp32.ino\" data-enlighter-title=\"hc14_wake_up_esp32.ino\">const int rx1Pin = 18;\nconst int tx1Pin = 19;\nconst int keyPin = 22;\n\nvoid setup() {\n  pinMode(keyPin, INPUT);\n  Serial.begin(9600);\n  delay(500);\n  Serial1.begin(9600, SERIAL_8N1, rx1Pin, tx1Pin); \/\/ using Serial1 since the ESP32 has no SoftwareSerial\n  esp_sleep_enable_ext0_wakeup(GPIO_NUM_33, LOW); \/\/ wake up by low Signal at GPIO 33\n}\n\nvoid loop() { \n  if(Serial1.available()){\n    String messageIn = Serial1.readStringUntil('\\n');\n    Serial.println(messageIn);\n    Serial.println(\"I am going to sleep again...\");\n    Serial.flush();\n    esp_deep_sleep_start();\n  }\n}<\/pre>\n<p>\n\n<p>For this sketch, the outgoing message should also be terminated with a new line character on the sender side.<\/p>\n\n<h3 class=\"wp-block-heading\" id=\"more_power_saving\">Saving more power &#8211; waking up the transmitting microcontroller<\/h3>\n\n<p>We can save power more effectively on the transmitting side by sending the microcontroller to sleep and waking it up regularly. We connect the power supply of the HC-14 module via a <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/the-mosfet-as-switch\" target=\"_blank\" rel=\"noopener\">MOSFET<\/a>. I show this here using the example of an <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/programming-attiny-with-arduino-code\" target=\"_blank\" rel=\"noopener\">ATtiny85<\/a>. I have moved how you proceed with the ESP32 to the appendix, as the explanations have become relatively lengthy.<\/p>\n<p>We use the <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/watchdog-timer\" target=\"_blank\" rel=\"noopener\">watchdog timer<\/a> for waking up, as this is the only time-controlled wake-up method for power-down mode.&nbsp;<\/p>\n<p>The following circuit was used:<\/p>\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/attiny85_hc14_transm_periodic_wakeup.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1001\" height=\"622\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/attiny85_hc14_transm_periodic_wakeup.png\" alt=\"Energy-saving circuit for the HC-14 as a transmitter connected to the ATtiny85\" class=\"wp-image-21191\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/attiny85_hc14_transm_periodic_wakeup.png 1001w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/attiny85_hc14_transm_periodic_wakeup-300x186.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/attiny85_hc14_transm_periodic_wakeup-768x477.png 768w\" sizes=\"auto, (max-width: 1001px) 100vw, 1001px\" \/><\/a><figcaption class=\"wp-element-caption\">Energy-saving circuit for the HC-14 as a transmitter connected to the ATtiny85<\/figcaption><\/figure>\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"569\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/SOT23_breadboard_adapter.jpg\" alt=\"\" class=\"wp-image-21246\" style=\"width:111px;height:auto\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/SOT23_breadboard_adapter.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/SOT23_breadboard_adapter-158x300.jpg 158w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n<\/div>\n<p>It is important that the gate-source threshold voltage V<sub>GS(th)<\/sub> of the MOSFET (i.e. the gate voltage at which it starts to conduct) is not too high. Search for &#8220;logic level MOSFETs&#8221;. The MOSFET must also be able to withstand the maximum expected current (I<sub>D<\/sub> = Continuous Drain Current). This worked for me using a BS170. Its maximum V<sub>GS(th)<\/sub> is 3 volts.<\/p>\n<p>It is better to use a MOSFET with an even smaller V<sub>GS(th)<\/sub>, such as the IRLML6244 (max. V<sub>GS(th)<\/sub> = 1.1 volts) or the IRLML2502 (max. V<sub>GS(th)<\/sub> = 1.2 volts). I have successfully tested both. However, they are only available in the SOT-23 design, which is why you have to solder them to an adapter board for breadboard experiments (see example on the right).<\/p>\n\n<h4 class=\"wp-block-heading\">Program sequence<\/h4>\n\n<p>Here is the sketch:<\/p>\n<\/p>\n<div class=\"scroll-paragraph\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_attiny85_periodic_wakeup.ino\" data-enlighter-title=\"hc14_attiny85_periodic_wakeup.ino\">#include&lt;SoftwareSerial.h&gt;\n#include &lt;avr\/wdt.h&gt;\n#include &lt;avr\/sleep.h&gt;\nvolatile int wdCounts = 0;\nconst int rxPin = 3;\nconst int txPin = 4;\nconst int staPin = 1;\nconst int hc14EnablePin = 2;\n\nSoftwareSerial hc14(3,4);\n\nvoid setup() {\n  pinMode(hc14EnablePin, OUTPUT);\n  digitalWrite(hc14EnablePin, HIGH);\n  hc14.begin(9600);\n  delay(500);\n  watchdogSetup();\n  set_sleep_mode(SLEEP_MODE_PWR_DOWN);\n  hc14.println(\"ATtiny85 has started\");\n}\n\nvoid loop() { \n  if(wdCounts &gt;= 2){ \/\/ send only every second wake up\n    digitalWrite(hc14EnablePin, HIGH);\n    delay(1000); \/\/ give HC14 time to get ready   \n    while(!digitalRead(staPin)){} \/\/ ensure HC14 is ready to receive commands\n    hc14.println(\"Greetings from ATtiny85!\");\n    while(digitalRead(staPin)){} \/\/ wait for sending procedure\n    while(!digitalRead(staPin)){} \/\/ wait until message is sent\n    digitalWrite(hc14EnablePin, LOW);\n    wdCounts = 0;\n  }\n  sleep_mode();\n}\n\nvoid watchdogSetup(void){\n  cli();\n  wdt_reset();\n  WDTCR |= (1&lt;&lt;WDCE) | (1&lt;&lt;WDE);\n  WDTCR |= (1&lt;&lt;WDIE) | (1&lt;&lt;WDE) | (1&lt;&lt;WDP3) | (1&lt;&lt;WDP0);  \/\/ Watchdog every 8s \n  sei();\n}\n\nISR(WDT_vect){\n  wdCounts++;\n  WDTCR |= (1&lt;&lt;WDIE); \/\/ avoid system reset\n}<\/pre>\n<p>\u00a0<\/p>\n<\/div>\n<p>\n\n<p>First, we include the required libraries, define the relevant pins and set a watchdog timer to the maximum of eight seconds. Since eight seconds is not a particularly long time, we introduce the counter <code>wdCounts<\/code>, with which we can control after how many times a message is sent (here: 2). The short wake times without sending a message are hardly significant in terms of energy consumption.<\/p>\n<p>When it is time to send a message, the ATtiny85 &#8220;switches&#8221; the MOSFET so that the HC-14 is supplied with power. We give it one second to start up (this can be optimized if necessary). The further time sequence is controlled via STA. This is how the STA signal relates to the RX pin of the HC-14:<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_RX_S3-1-1024x144.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"144\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_RX_S3-1-1024x144.png\" alt=\"STA signal vs. RX (HC-14) during transmission\" class=\"wp-image-21252\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_RX_S3-1-1024x144.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_RX_S3-1-300x42.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_RX_S3-1-768x108.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_RX_S3-1-1536x216.png 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_RX_S3-1-1320x186.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/STA_vs_RX_S3-1.png 1795w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">STA signal vs. RX (HC-14) during transmission<\/figcaption><\/figure>\n\n<p>You can see how the message is received via the RX pin of the HC-14 module. The transmission process then begins, while STA goes LOW. When STA is HIGH again, we switch off the power to the HC-14 module and send the ATtiny85 to sleep.<\/p>\n\n<p>With this setup, the power consumption during sleep time was 0.31 milliamps. This brings us into areas that allow continuous battery operation. <\/p>\n\n<h2 class=\"wp-block-heading\" id=\"range_test\">Range test for the HC-14 module<\/h2>\n\n<p>The range test was extremely pleasing. I carried it out with the highest receiver sensitivity (S1), the highest transmitter power (P20) and using 433 MHz stand antennas. The transmitter and receiver were controlled via an Arduino Nano. The transmitter was supplied with power from the PC via USB and was located in my study. The power supply for the receiver was a 9 volt lithium battery connected to VIN of the Arduino Nano.<\/p>\n<p>The transmitter sent the message &#8220;Hello Receiver&#8221; every ten seconds. The following sketch was used on the receiver side:<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"range_test_receiver.ino\" data-enlighter-title=\"range_test_receiver.ino\">#include &lt;SoftwareSerial.h&gt;\nconst int ledPin = 13;\n\nSoftwareSerial hc14(10,11);\n\nvoid setup() {\n  pinMode(ledPin, OUTPUT);\n  hc14.begin(9600);\n}\n\nvoid loop() {\n  if(hc14.available()) {\n    String messageIn = hc14.readString();\n    if(messageIn == \"Hello Receiver!\"){\n      for(int i=0; i&lt;10; i++){\n        digitalWrite(ledPin,!digitalRead(ledPin));\n        delay(50);\n      }\n    }\n  }\n}<\/pre>\n<p>\n\n<p>If the message is received correctly, the board LED flashes five times. I then walked across the fields with the receiver and determined the range. Apart from a temporary dead spot in the form of a dip, I still had reception for almost 3 kilometers, even though the transmitter was positioned inside my house and a few houses were in the way for the first meters:&nbsp;<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/distance-1024x174.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"174\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/distance-1024x174.png\" alt=\"\" class=\"wp-image-21185\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/distance-1024x174.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/distance-300x51.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/distance-768x131.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/distance-1320x224.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/distance.png 1435w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Range Test<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\" id=\"firmware_versions\">Firmware V1.0 vs. Firmware V1.1<\/h2>\n\n<p>Firmware V1.0 dates from September 22, firmware 1.1 from December 22. I cannot say with certainty whether the external features guarantee identification of the firmware in every case, but my experience and that of several readers speaks in favor of this.<\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/Unterschiede-Hardware-1024x709.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"709\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/Unterschiede-Hardware-1024x709.jpg\" alt=\"\" class=\"wp-image-21798\" style=\"width:840px;height:auto\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/Unterschiede-Hardware-1024x709.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/Unterschiede-Hardware-300x208.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/Unterschiede-Hardware-768x532.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/Unterschiede-Hardware.jpg 1040w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Boards with Firmware V1.0 vs. 1.1 (Contributed by Ulrich &#8211; many thanks!)<\/figcaption><\/figure>\n\n<p>From my point of view, the most important differences are:<\/p>\n<ul>\n<li>V1.0 modules transmit at -20 dBm and cannot be down-regulated.<\/li>\n<li>The STA pin seems to have no function with the V1.0 modules. In my case, the STA pin was consistently LOW. <\/li>\n<li>Some AT commands are slightly different. If something does not work, try with and without the question mark. <\/li>\n<li>At least one reader of this article had transmission problems with the V1.0 version.<\/li>\n<\/ul>\n<p>And, very important: In my experience, mixing module versions does not work.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"appendix\">Appendix &#8211; Saving power with the ESP32<\/h2>\n\n<h3 class=\"wp-block-heading\">Using a MOSFET<\/h3>\n\n<p>In principle, we can save power with the ESP32 using a MOSFET in the same way as before with the ATtiny85. However, due to the lower voltage of the ESP32, the circuit did not work with the BS170. Its maximum V<sub>GS(th)<\/sub> is too close to the 3.3 volts of the ESP32. However, the circuit worked with the IRLML6244 and the IRLML2502. <\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_o_driver-1024x567.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"567\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_o_driver-1024x567.png\" alt=\"Energy-saving circuit for the HC-14 as a transmitter connected to the ESP32\" class=\"wp-image-21235\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_o_driver-1024x567.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_o_driver-300x166.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_o_driver-768x425.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_o_driver.png 1156w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Energy-saving circuit for the HC-14 as a transmitter connected to the ESP32<\/figcaption><\/figure>\n\n<p>And here is the sketch:<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_esp32_transmitter_deep_sleep_n_mosfet.ino\" data-enlighter-title=\"hc14_esp32_transmitter_deep_sleep_n_mosfet.ino\">const int unsigned long microSecToSec = 1000000;\nconst int sleepTime = 10; \/\/ in seconds \nconst int rx1Pin = 18; \/\/ dummy\nconst int tx1Pin = 33;\nconst int hc14EnablePin = 22;\nconst int staPin = 23;\n\nvoid setup() {\n  pinMode(hc14EnablePin, OUTPUT);\n  digitalWrite(hc14EnablePin, HIGH);\n  delay(1000); \/\/ give HC14 time to get ready\u00a0\n  Serial1.begin(9600, SERIAL_8N1, rx1Pin, tx1Pin);\n  while(!digitalRead(staPin)){} \/\/ ensure HC14 is ready to receive commands\n  Serial1.println(\"Hi, I just woke up! But I am tired again and will sleep for 10 seconds...\");\n  while(digitalRead(staPin)){} \/\/ wait for sending procedure\n  while(!digitalRead(staPin)){} \/\/ wait until message is sent\n  digitalWrite(hc14EnablePin, LOW);\n  esp_sleep_enable_timer_wakeup(sleepTime * microSecToSec);\n  esp_deep_sleep_start();\n}\n\nvoid loop() { }<\/pre>\n<p>\n\n<p>The power supply was 5 volts at the 5 volt pin (usually referred to as VCC, VIN or V5). Disillusioned, I still noticed a power consumption of 10.9 mA in deep sleep mode. The problem is that many ESP32 boards are not optimized for power saving in deep sleep mode. Too many components on the board draw power. Removing the board LED only saved 1.5 mA. The solution is: get an optimized ESP32 board, such as the Adafruit ESP32 Feather V2 or the FireBeetle.<\/p>\n\n<h3 class=\"wp-block-heading\">Using a MOSFET and a transistor<\/h3>\n\n<h4 class=\"wp-block-heading\">Variant 1: N-channel MOSFET<\/h4>\n\n<p>I am not sure whether the HC-14 module achieves the same range using the 3.3 volt power supply of the ESP32 as when connected to 5 volts. The voltage dipped below 3 volts when transmitting.  I therefore tried another circuit based on 5 volts, which also worked with a BS170 or a 2N7000 MOSFET due to the higher voltage:<\/p>\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_driver-2-1024x434.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"434\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_driver-2-1024x434.png\" alt=\"\" class=\"wp-image-21256\" style=\"width:842px;height:auto\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_driver-2-1024x434.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_driver-2-300x127.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_driver-2-768x326.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_driver-2-1320x560.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_n_mosfet_w_driver-2.png 1469w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Energy-saving circuit for the HC-14 as a transmitter connected to the ESP32 (5 volt version)<\/figcaption><\/figure>\n\n<p>However, there are a few things to bear in mind here:<\/p>\n<ul>\n<li>As the RX pin of the HC-14 module is at 5 volts, we need a voltage divider or level shifter.<\/li>\n<li>The internal pull-up resistor of the RX pin of the HC-14 module is permanently supplied with voltage. As a result, a permanent current flows through the voltage divider. That&#8217;s why I chose relatively high resistance values.<\/li>\n<li>The transistor reverses the logic. If pin 22 (<code>hcEnablePin<\/code>) is LOW, the transistor is closed and the voltage level at the gate of the MOSFET is HIGH. Accordingly, PIN 22 must be set to HIGH level during the sleep phase.<\/li>\n<\/ul>\n<p>Here&#8217;s the sketch:<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_esp32_transmitter_deep_sleep_n_mosfet_w_driver.ino\" data-enlighter-title=\"hc14_esp32_transmitter_deep_sleep_n_mosfet_w_driver.ino\">const int unsigned long microSecToSec = 1000000;\nconst int sleepTime = 10; \nconst int rx1Pin = 18; \/\/ dummy\nconst int tx1Pin = 33;\nconst int hc14EnablePin = 22;\nconst int staPin = 23;\n\nvoid setup() {\n  gpio_hold_dis(GPIO_NUM_22);\n  pinMode(hc14EnablePin, OUTPUT);\n  digitalWrite(hc14EnablePin, LOW);\n  delay(1000);\n  Serial1.begin(9600, SERIAL_8N1, rx1Pin, tx1Pin);\n  while(!digitalRead(staPin)){} \/\/ ensure HC14 is ready to receive commands\n  Serial1.println(\"Hi, I just woke up! But I am tired again and will sleep for 10 seconds...\");\n  while(digitalRead(staPin)){} \/\/ wait for sending procedure\n  while(!digitalRead(staPin)){} \/\/ wait until message is sent\n  digitalWrite(hc14EnablePin, HIGH);\n  gpio_hold_en(GPIO_NUM_22); \/\/ hold GPIO 22 HIGH during deep sleep\n  esp_sleep_enable_timer_wakeup(sleepTime * microSecToSec);\n  gpio_deep_sleep_hold_en();\n  esp_deep_sleep_start();\n}\n\nvoid loop() { }<\/pre>\n<p>\n\n<h4 class=\"wp-block-heading\">Variant 2: P-channel MOSFET<\/h4>\n\n<p>The variant with P-channel MOSFET is somewhat more advantageous because the pull-up resistor of the RX pin of the HC-14 module is not supplied with power during the sleep phase. In addition, you do not need to keep pin 22 at HIGH level during the sleep phase.<\/p>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_p_mosfet_w_driver-1-1024x440.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"440\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_p_mosfet_w_driver-1-1024x440.png\" alt=\"\" class=\"wp-image-21258\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_p_mosfet_w_driver-1-1024x440.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_p_mosfet_w_driver-1-300x129.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_p_mosfet_w_driver-1-768x330.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_p_mosfet_w_driver-1-1536x660.png 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_p_mosfet_w_driver-1-1320x567.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_esp32_deep_sleep_p_mosfet_w_driver-1.png 1594w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Energy-saving circuit for the HC-14 as a transmitter, connected to the ESP32 (5 volt version \/ P-channel MOSFET)<\/figcaption><\/figure>\n\n<p>The sketch is:<\/p>\n<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"hc14_esp32_transmitter_deep_sleep_p_mosfet_with_driver.ino\" data-enlighter-title=\"hc14_esp32_transmitter_deep_sleep_p_mosfet_with_driver.ino\">const int unsigned long microSecToSec = 1000000;\nconst int sleepTime = 10; \nconst int rx1Pin = 18; \/\/ dummy\nconst int tx1Pin = 33;\nconst int hc14EnablePin = 22;\nconst int staPin = 23;\n\nvoid setup() {\n  pinMode(hc14EnablePin, OUTPUT);\n  digitalWrite(hc14EnablePin, HIGH);\n  delay(1000);\n  Serial1.begin(9600, SERIAL_8N1, rx1Pin, tx1Pin);\n  while(!digitalRead(staPin)){} \/\/ ensure HC14 is ready to receive commands\n  Serial1.println(\"Hi, I just woke up! But I am tired again and will sleep for 10 seconds...\");\n  while(digitalRead(staPin)){} \/\/ wait for sending procedure\n  while(!digitalRead(staPin)){} \/\/ wait until message is sent\n  digitalWrite(hc14EnablePin, LOW);\n  esp_sleep_enable_timer_wakeup(sleepTime * microSecToSec);\n  esp_deep_sleep_start();\n}\n\nvoid loop() { }<\/pre>\n<p>\u00a0<\/p>\n<p>\n","protected":false},"excerpt":{"rendered":"<p>With the HC-14 module, you can use LoRa wireless technology very conveniently via simple serial functions such as println(). I&#8217;ll show you how it works. <\/p>\n","protected":false},"author":1,"featured_media":21209,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[545,548,1320],"tags":[556,2499,2500,2495,1044,1405,2493,2794,2497,2424,564,2501,2494,2496,2433,2498],"class_list":["post-21298","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-433-mhz-en","category-wireless","category-wireless-en-2","tag-arduino-en-2","tag-at-en","tag-channel-en-2","tag-data-sheet","tag-esp32-en","tag-hc-12-en","tag-hc-14-en","tag-hc-15","tag-key-en","tag-lora-en","tag-range-en","tag-receiver-sensitivity","tag-saving-power","tag-sta-en","tag-structures","tag-wkup-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>HC-14 - the simple LoRa module &#8226; Wolles Elektronikkiste<\/title>\n<meta name=\"description\" content=\"With the HC-14 module, you can use LoRa very conveniently via simple serial functions such as println(). I&#039;ll show you how it works.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HC-14 - the simple LoRa module &#8226; Wolles Elektronikkiste\" \/>\n<meta property=\"og:description\" content=\"With the HC-14 module, you can use LoRa very conveniently via simple serial functions such as println(). I&#039;ll show you how it works.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module\" \/>\n<meta property=\"og:site_name\" content=\"Wolles Elektronikkiste\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-26T19:31:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-02T17:49:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_post_image.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"1000\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Wolfgang Ewald\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wolfgang Ewald\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module\"},\"author\":{\"name\":\"Wolfgang Ewald\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"headline\":\"HC-14 &#8211; the simple LoRa module\",\"datePublished\":\"2024-05-26T19:31:13+00:00\",\"dateModified\":\"2026-02-02T17:49:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module\"},\"wordCount\":3572,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"image\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/hc14_post_image.jpg\",\"keywords\":[\"Arduino\",\"AT\",\"channel\",\"data sheet\",\"ESP32\",\"HC-12\",\"HC-14\",\"HC-15\",\"KEY\",\"LoRa\",\"Range\",\"receiver sensitivity\",\"saving power\",\"STA\",\"Structures\",\"WKUP\"],\"articleSection\":[\"433 MHz\",\"Wireless\",\"wireless\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module\",\"name\":\"HC-14 - the simple LoRa module &#8226; Wolles Elektronikkiste\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/hc14_post_image.jpg\",\"datePublished\":\"2024-05-26T19:31:13+00:00\",\"dateModified\":\"2026-02-02T17:49:38+00:00\",\"description\":\"With the HC-14 module, you can use LoRa very conveniently via simple serial functions such as println(). I'll show you how it works.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module#primaryimage\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/hc14_post_image.jpg\",\"contentUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/hc14_post_image.jpg\",\"width\":1000,\"height\":1000},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/hc-14-the-simple-lora-module#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"HC-14 &#8211; the simple LoRa module\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#website\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\",\"name\":\"Wolles Elektronikkiste\",\"description\":\"Die wunderbare Welt der Elektronik\",\"publisher\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\",\"name\":\"Wolfgang Ewald\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"contentUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\",\"width\":512,\"height\":512,\"caption\":\"Wolfgang Ewald\"},\"logo\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/cropped-Logo-1.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"HC-14 - the simple LoRa module &#8226; Wolles Elektronikkiste","description":"With the HC-14 module, you can use LoRa very conveniently via simple serial functions such as println(). I'll show you how it works.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module","og_locale":"en_US","og_type":"article","og_title":"HC-14 - the simple LoRa module &#8226; Wolles Elektronikkiste","og_description":"With the HC-14 module, you can use LoRa very conveniently via simple serial functions such as println(). I'll show you how it works.","og_url":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module","og_site_name":"Wolles Elektronikkiste","article_published_time":"2024-05-26T19:31:13+00:00","article_modified_time":"2026-02-02T17:49:38+00:00","og_image":[{"width":1000,"height":1000,"url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_post_image.jpg","type":"image\/jpeg"}],"author":"Wolfgang Ewald","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Wolfgang Ewald","Est. reading time":"23 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module#article","isPartOf":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module"},"author":{"name":"Wolfgang Ewald","@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"headline":"HC-14 &#8211; the simple LoRa module","datePublished":"2024-05-26T19:31:13+00:00","dateModified":"2026-02-02T17:49:38+00:00","mainEntityOfPage":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module"},"wordCount":3572,"commentCount":4,"publisher":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"image":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module#primaryimage"},"thumbnailUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_post_image.jpg","keywords":["Arduino","AT","channel","data sheet","ESP32","HC-12","HC-14","HC-15","KEY","LoRa","Range","receiver sensitivity","saving power","STA","Structures","WKUP"],"articleSection":["433 MHz","Wireless","wireless"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module","url":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module","name":"HC-14 - the simple LoRa module &#8226; Wolles Elektronikkiste","isPartOf":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#website"},"primaryImageOfPage":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module#primaryimage"},"image":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module#primaryimage"},"thumbnailUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_post_image.jpg","datePublished":"2024-05-26T19:31:13+00:00","dateModified":"2026-02-02T17:49:38+00:00","description":"With the HC-14 module, you can use LoRa very conveniently via simple serial functions such as println(). I'll show you how it works.","breadcrumb":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module#primaryimage","url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_post_image.jpg","contentUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/05\/hc14_post_image.jpg","width":1000,"height":1000},{"@type":"BreadcrumbList","@id":"https:\/\/wolles-elektronikkiste.de\/en\/hc-14-the-simple-lora-module#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/wolles-elektronikkiste.de\/en"},{"@type":"ListItem","position":2,"name":"HC-14 &#8211; the simple LoRa module"}]},{"@type":"WebSite","@id":"https:\/\/wolles-elektronikkiste.de\/en#website","url":"https:\/\/wolles-elektronikkiste.de\/en","name":"Wolles Elektronikkiste","description":"Die wunderbare Welt der Elektronik","publisher":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wolles-elektronikkiste.de\/en?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46","name":"Wolfgang Ewald","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","contentUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png","width":512,"height":512,"caption":"Wolfgang Ewald"},"logo":{"@id":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2019\/03\/cropped-Logo-1.png"}}]}},"_links":{"self":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/21298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/comments?post=21298"}],"version-history":[{"count":24,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/21298\/revisions"}],"predecessor-version":[{"id":25575,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/21298\/revisions\/25575"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/media\/21209"}],"wp:attachment":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/media?parent=21298"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/categories?post=21298"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/tags?post=21298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}