{"id":20804,"date":"2024-03-23T10:38:21","date_gmt":"2024-03-23T10:38:21","guid":{"rendered":"https:\/\/wolles-elektronikkiste.de\/?p=20804"},"modified":"2024-12-10T17:00:54","modified_gmt":"2024-12-10T17:00:54","slug":"using-lora-with-the-ebyte-e220-e22-and-e32-series","status":"publish","type":"post","link":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series","title":{"rendered":"Using LoRa with the EByte E220, E22 and E32 series"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">About this Post<\/h2>\n\n<p>This article is once again about radio, more precisely about LoRa technology using the example of the <a href=\"https:\/\/www.cdebyte.com\/\" target=\"_blank\" rel=\"noopener\">Ebyte<\/a> E220, E22 and E32 module series. The example sketches are written for the E220 modules, but can be transferred relatively easily, especially as I list the essential points that need to be adapted. Please forgive me for not having written three versions of each sketch.<\/p>\r\n<p>Here is an overview of the post:<\/p>\r\n<ul>\r\n<li><a href=\"#legislation\">Legal &#8211; please note<\/a><\/li>\r\n<li><a href=\"#lora_lorawan_lpwan\">What is LoRa, LoRaWAN and LPWAN?<\/a><\/li>\r\n<li><a href=\"#lore_modules\">LoRA Modules<\/a><\/li>\r\n<li><a href=\"#ebyte_lora_modules\">Ebyte LoRa Modules<\/a>\r\n<ul>\r\n<li><a href=\"#overview\">Overview<\/a><\/li>\r\n<li><a href=\"#naming\">Naming<\/a><\/li>\r\n<li><a href=\"#technical_data\">Technical Data (Example E220-900T22D)<\/a><\/li>\r\n<li><a href=\"#pinout\">Pinout LoRa E220, E22, E32 Series<\/a><\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><a href=\"#libraries\">Libraries for the Ebyte E220, E22 and E32 Series<\/a><\/li>\r\n<li><a href=\"#circuit_nano\">Circuit for the Arduino Nano<\/a><\/li>\r\n<li><a href=\"#settings\">How to make Settings<\/a>\r\n<ul>\r\n<li><a href=\"#settings_sketch_e220\">Configuration Sketch using the E220 Module Series<\/a><\/li>\r\n<li><a href=\"#settings_sketches_e22_e32\">Configuration Sketches for the E22 and E32 series<\/a><\/li>\r\n<li><a href=\"#settings_details\">Settings in Detail<\/a><\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><a href=\"#response_container\">Response Container and Response Status<\/a><\/li>\r\n<li><a href=\"#transparent_transmission\">Transparent Transmission Mode<\/a><\/li>\r\n<li><a href=\"#structures\">Sending and receiving Structures<\/a><\/li>\r\n<li><a href=\"#fixed_transmission\">Fixed Transmission Mode<\/a><\/li>\r\n<li><a href=\"#rssi\">RSSI Received Signal Strength Indicator<\/a><\/li>\r\n<li><a href=\"#wor\">Using Wake On Radio (WOR)<\/a><\/li>\r\n<li><a href=\"#wor_mcu\">Waking up the MCU with WOR<\/a><\/li>\r\n<li><a href=\"#range_test\">Range Test<\/a><\/li>\r\n<li><a href=\"#attachments\">Appendices &#8211; Transceiver Sketches with Settings for E220, E22, E32<\/a><\/li>\r\n<\/ul>\r\n\n<h2 class=\"wp-block-heading\" id=\"legislation\">Legal &#8211; please note!<\/h2>\n\n<p><strong>Important to know<\/strong>:<\/p>\r\n<ul>\r\n<li>Radio transmission is regulated by law in almost every country in the world, e.g. regarding the permitted frequencies, the transmission power or the duty cycle (percentage of the actual transmission time).<\/li>\r\n<li>Not everything you can buy in your country can be used without restrictions &#8211; and some things can&#8217;t be used at all!<\/li>\r\n<\/ul>\r\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, 915 MHz and 2.4 GHz &#8211; but they are not free of restrictions. <strong>You are responsible for complying with the regulations in your country<\/strong>.<\/p>\r\n\n<h2 class=\"wp-block-heading\" id=\"lora_lorawan_lpwan\">What is LoRa, LoRaWAN and LPWAN?<\/h2>\n\n<p>If you are dealing with LoRa, you will also come across the terms LoRaWAN and LPWAN. LoRa stands for <strong>Long<\/strong> <strong>Range<\/strong>, i.e. it is a radio technology for comparatively long distances. LoRa (like <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/arduino-iot-cloud-part-2-arduino-sim-and-sigfox\" target=\"_blank\" rel=\"noopener\">Sigfox<\/a>) belongs to the group of LPWAN radio technologies, which in turn is the abbreviation for Low-Power Wide Area Network. This name thus contains a second characteristic of this technology, namely its low-energy consumption. While LoRa refers to the special radio technology, LoRaWAN is a communication protocol based on it.<\/p>\r\n<p>I am neither a physicist nor a radio engineer. That&#8217;s why I prefer to hold back on explaining exactly how LoRa works. Just this much: It is a special modulation technology that achieves the long-range and low-energy consumption. The data transfer rates are comparatively low.<\/p>\r\n\n<h2 class=\"wp-block-heading\" id=\"lore_modules\">LoRa Modules <\/h2>\n\n<p>Many different LoRa modules are offered in popular online stores such as Amazon or AliExpress. These also include ready-made solutions, e.g. ESP32-based boards with OLED displays. Originally, I had planned to give a broader overview of common modules and libraries. However, I then realized that the topic is simply too extensive to cover everything in one post. I will therefore initially limit myself to the E220, E22 and E32 series from Ebyte. They are close relatives that can be programmed in almost the same way. I may look at other modules in a later post.<\/p>\r\n\n<h2 class=\"wp-block-heading\" id=\"ebyte_lora_modules\">Ebyte LoRa Modules<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"overview\">Overview<\/h3>\n\n<p>Ebyte, more precisely <a href=\"https:\/\/www.cdebyte.com\/\" target=\"_blank\" rel=\"noopener\">Chengdu Ebyte Electronic Technology Co. Ltd<\/a>, offers various LoRa modules. If you are looking for specific models, take a look <a href=\"https:\/\/www.cdebyte.com\/Module-Lora\" target=\"_blank\" rel=\"noopener\">here<\/a>. I have summarized the most important differences between the module series here:<\/p>\r\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_e32_e22_comparison-2-1024x514.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"514\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_e32_e22_comparison-2-1024x514.png\" alt=\"Overview of the E220, E22 and E32 series\" class=\"wp-image-20727\" style=\"width:840px;height:auto\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_e32_e22_comparison-2-1024x514.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_e32_e22_comparison-2-300x151.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_e32_e22_comparison-2-768x385.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_e32_e22_comparison-2.png 1092w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Overview of the E220, E22 and E32 series<\/figcaption><\/figure>\n\n<p>The modules all have the same pinout and are very similar in operation. <\/p>\r\n<p>An overview of the SX1262, SX1276 and SX1278 chips can be found <a href=\"https:\/\/www.cdebyte.com\/news\/580\" target=\"_blank\" rel=\"noopener\">here<\/a>. All chips and modules have their advantages and disadvantages.<\/p>\r\n\n<h3 class=\"wp-block-heading\" id=\"naming\">Naming<\/h3>\n\n<p>The modules are named according to the scheme E<em>aaa-bbb<\/em>T<em>cc<\/em><em>d<\/em>, e.g. E220-900T22D. The parameters are:&nbsp;<\/p>\r\n<ul>\r\n<li>aaa: the &#8220;family name&#8221;,<\/li>\r\n<li>bbb: represents the radio frequency,<\/li>\r\n<li>cc: represents the signal strength in dBm,<\/li>\r\n<li>d: stands for the design (DIP or SMD).<\/li>\r\n<\/ul>\r\n<p>Here, as an example, is an overview of some representatives of the E220 series:<\/p>\r\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/E220_series-1024x344.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"344\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/E220_series-1024x344.png\" alt=\"Model overview of the LoRa E220 series \" class=\"wp-image-20291\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/E220_series-1024x344.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/E220_series-300x101.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/E220_series-768x258.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/E220_series.png 1111w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Model overview of the LoRa E220 series (source: E220-900T22D data sheet)<\/figcaption><\/figure>\n\n<h3 class=\"wp-block-heading\" id=\"technical_data\">Technical Data (Example E220-900T22D)<\/h3>\n\n<p>You can find data sheets and manuals on the <a href=\"https:\/\/www.cdebyte.com\/Module-Lora\" target=\"_blank\" rel=\"noopener\">Chengdu Ebyte website<\/a>. As an example, I have the technical data of the E220-900T22D model for you here:<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"830\" height=\"669\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_1.png\" alt=\"Technical data E220-900T22D LoRa module\" class=\"wp-image-20535\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_1.png 830w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_1-300x242.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_1-768x619.png 768w\" sizes=\"auto, (max-width: 830px) 100vw, 830px\" \/><\/a><figcaption class=\"wp-element-caption\">Technical data E220-900T22D LoRa module (source: E220-900T22D data sheet)<\/figcaption><\/figure>\n\n<p>I found a data sheet for the same module elsewhere, but with slightly different information on the optimum voltage supply:<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_2-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"827\" height=\"152\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_2-1.png\" alt=\"Version 2 of the E220-900T22D LoRa module.\" class=\"wp-image-20539\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_2-1.png 827w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_2-1-300x55.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_tech_data_2-1-768x141.png 768w\" sizes=\"auto, (max-width: 827px) 100vw, 827px\" \/><\/a><figcaption class=\"wp-element-caption\">Version 2 of the E220-900T22D LoRa module.<\/figcaption><\/figure>\n\n<p>If in doubt, try out whether you achieve better results with 5 volts. However, it is important to note that not all pins can handle 5 volts. For 5 volt MCUs, you should therefore use level shifters or voltage dividers.<\/p>\r\n\n<h3 class=\"wp-block-heading\" id=\"pinout\">Pinout LoRa E220, E22, E32 Series<\/h3>\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/pins_e220_lora-1024x189.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"189\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/pins_e220_lora-1024x189.jpg\" alt=\"Pinout LoRa E220 (identical to E22 and E32)\" class=\"wp-image-20543\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/pins_e220_lora-1024x189.jpg 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/pins_e220_lora-300x55.jpg 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/pins_e220_lora-768x141.jpg 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/pins_e220_lora-1320x243.jpg 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/pins_e220_lora.jpg 1444w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Pinout LoRa E220, E22 and E32<\/figcaption><\/figure>\n\n<ul>\r\n<li><strong>GND \/ VCC<\/strong>: Power supply<\/li>\r\n<li><strong>AUX<\/strong>: Indicates the status of the data buffers for sending and receiving and is used for the self-check.<\/li>\r\n<li><strong>RX \/ TX<\/strong>: Serial communication<\/li>\r\n<li><strong>M0 \/ M1 (E220)<\/strong>: Control of the four operating modes:\r\n<ol>\r\n<li><strong>M0 = LOW,&nbsp; M1 = LOW<\/strong>: Normal mode<\/li>\r\n<li><strong>M0 = HIGH, M1 = LOW<\/strong>: WOR Transmitter<\/li>\r\n<li><strong>M0 = LOW,&nbsp; M1 = HIGH<\/strong>: WOR Receiver<\/li>\r\n<li><strong>M0 = HIGH, M1 = HIGH<\/strong>: Deep sleep<\/li>\r\n<\/ol>\r\n<\/li>\r\n<li><strong>M0 \/M1 (E22)<\/strong>: Control&nbsp; of the four operating modes:\r\n<ol>\r\n<li><strong>M0 = LOW,&nbsp; M1 = LOW<\/strong>: Normal mode<\/li>\r\n<li><strong>M0 = HIGH, M1 = LOW<\/strong>: WOR mode (transmitter\/receiver)<\/li>\r\n<li><strong>M0 = LOW,&nbsp; M1 = HIGH<\/strong>: Configuration mode<\/li>\r\n<li><strong>M0 = HIGH, M1 = HIGH<\/strong>: Deep sleep<\/li>\r\n<\/ol>\r\n<\/li>\r\n<li><strong>M0 \/ M1 (E32)<\/strong>: Control of the four operating modes:\r\n<ol>\r\n<li><strong>M0 = LOW,&nbsp; M1 = LOW<\/strong>: Normal mode<\/li>\r\n<li><strong>M0 = HIGH, M1 = LOW<\/strong>: Wake-up mode (transmitter)<\/li>\r\n<li><strong>M0 = LOW,&nbsp; M1 = HIGH<\/strong>: Power saving<\/li>\r\n<li><strong>M0 = HIGH, M1<\/strong> <strong>= HIGH<\/strong>: Sleep<\/li>\r\n<\/ol>\r\n<\/li>\r\n<\/ul>\r\n\n<h2 class=\"wp-block-heading\" id=\"libraries\">Libraries for the Ebyte E220, E22 and E32 Series<\/h2>\n\n<p>I selected the libraries of <a href=\"https:\/\/mischianti.org\/\" target=\"_blank\" rel=\"noopener\">Renzo Mischianti<\/a> to control the modules. You can download them here from GitHub:<\/p>\r\n<ul>\r\n<li><a href=\"https:\/\/github.com\/xreef\/EByte_LoRa_E220_Series_Library\" target=\"_blank\" rel=\"noopener\">EByte_LoRa_E220_Series_Library<\/a><\/li>\r\n<li><a href=\"https:\/\/github.com\/xreef\/EByte_LoRa_E22_Series_Library\" target=\"_blank\" rel=\"noopener\">EByte_LoRa_E22_Series_Library<\/a><\/li>\r\n<li><a href=\"https:\/\/github.com\/xreef\/LoRa_E32_Series_Library\" target=\"_blank\" rel=\"noopener\">LoRa_E32_Series_Library<\/a><\/li>\r\n<\/ul>\r\n<p>&#8230; or install via the library manager of the Arduino IDE.<\/p>\r\n<p>In addition, the industrious Renzo Mischianti has created a multipart tutorial for each of the module series. Here are the links to the first parts: <a href=\"https:\/\/mischianti.org\/ebyte-lora-e220-llcc68-device-for-arduino-esp32-or-esp8266-specs-and-basic-use-1\/\" target=\"_blank\" rel=\"noopener\">E220-Tutorial<\/a>, <a href=\"https:\/\/mischianti.org\/ebyte-lora-e22-device-for-arduino-esp32-or-esp8266-specs-and-basic-usage-1\/\" target=\"_blank\" rel=\"noopener\">E22-Tutorial<\/a>, <a href=\"https:\/\/mischianti.org\/lora-e32-device-for-arduino-esp32-or-esp8266-specs-and-basic-usage-part-1\/\" target=\"_blank\" rel=\"noopener\">E32-Tutorial<\/a>.<\/p>\r\n<p>My motivation for writing my own article was to summarize things a little more compactly and to compare the module series. However, it is definitely worth taking a look at the tutorials. They offer a lot of additional information, such as example sketches and circuit diagrams for other boards.<\/p>\r\n<p>The tutorials and libraries for the various series are structured in the same way. This means you can quickly find your way around if you change the module series.<\/p>\r\n\n<h2 class=\"wp-block-heading\" id=\"circuit_nano\">Circuit for the Arduino Nano <\/h2>\n\n<p>In this article, I use the classic Arduino Nano as the controlling board. I connected it to the E220 module as follows (identical for E22 and E32):<\/p>\r\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_lora_arduino_connect.png\"><img loading=\"lazy\" decoding=\"async\" width=\"804\" height=\"310\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_lora_arduino_connect.png\" alt=\"Connection of the E220 module to the Arduino Nano\" class=\"wp-image-20548\" style=\"width:578px;height:auto\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_lora_arduino_connect.png 804w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_lora_arduino_connect-300x116.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/e220_lora_arduino_connect-768x296.png 768w\" sizes=\"auto, (max-width: 804px) 100vw, 804px\" \/><\/a><figcaption class=\"wp-element-caption\">Connection of the E220 module to the Arduino Nano<\/figcaption><\/figure>\n<\/div>\n<p>A few comments on this:<\/p>\r\n<ul>\r\n<li>If you do not want to use the WOR (Wake On Radio) or power-down modes, you can connect M0 and M1 to GND.<\/li>\r\n<li>In principle, you can also leave AUX unconnected. In this case, the microcontroller does not know when the data transfer is complete, but the library provides a sufficient waiting time.<\/li>\r\n<li>When using a 5 volt board, you must use a level shifter or a voltage divider (e.g. 2 k\u03a9 \/ 1 k\u03a9) for connecting M0, M1, RX to the board pins.<\/li>\r\n<li>AUX, RX and TX require a pull-up resistor.<\/li>\r\n<li>Example circuits for other MCU boards can be found in the tutorials by Renzo Mischianti.<\/li>\r\n<li>The antennas for the E220-900T22D and E32-433T30D modules I used were special versions with a magnetic base for 868 MHz and 433 MHz. These are available for &lt; \u20ac10 in online stores.<\/li>\r\n<\/ul>\r\n\n<p>This is what my setup looked like on the breadboard:<\/p>\r\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/Lora_E220_Arduino_Nano-1024x657.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"657\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/Lora_E220_Arduino_Nano-1024x657.png\" alt=\"LoRa E220 module connected to an Arduino Nano on the breadboard\" class=\"wp-image-20280\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/Lora_E220_Arduino_Nano-1024x657.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/Lora_E220_Arduino_Nano-300x192.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/Lora_E220_Arduino_Nano-768x493.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/Lora_E220_Arduino_Nano-1536x985.png 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/Lora_E220_Arduino_Nano-1320x847.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/Lora_E220_Arduino_Nano.png 1551w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">LoRa E220 module connected to an Arduino Nano on the breadboard<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\" id=\"settings\">How to make Settings<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"settings_sketch_e220\">Configuration Sketch using the E220 Module Series<\/h3>\n\n<p>The libraries are equipped with separate example sketches for setting up and operating the modules. Use setConfiguration.ino to make the settings, and getConfiguration.ino to query them. <strong>These settings are retained even if the power supply is disconnected, provided you select the parameter WRITE_CFG_PWR_DWN_SAVE when saving the configuration <\/strong>(line 62 in the next sketch).<\/p>\r\n<p>When you open <a href=\"https:\/\/github.com\/xreef\/EByte_LoRa_E220_Series_Library\/blob\/master\/examples\/01_setConfiguration\/01_setConfiguration.ino\" target=\"_blank\" rel=\"noopener\">setConfiguration.ino<\/a>, you may be overwhelmed by its size. However, most of it is commented out, and many things are repeated. The upper section contains various examples of object creation for different boards. The middle section contains ready-made configuration examples that you can easily uncomment. At the end you will find the functions for outputting the settings.&nbsp;<\/p>\r\n\n<p>I have reduced setConfiguration.ino (E220 module) to the essentials for use on an Arduino Nano. But I have also added a few lines:<\/p>\r\n<ul>\r\n<li>Lines 1 to 5 are used to output the correct frequency. Just uncomment the line with the correct frequency range.<\/li>\r\n<li>Lines 6 and 7 are relevant for selecting the signal strength.<\/li>\r\n<li>Line 8 ensures that the settings are output in detail.<\/li>\r\n<li>Lines 57 and 58 allow you to encrypt your messages individually.<\/li>\r\n<\/ul>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"setConfiguration_modified.ino\" data-enlighter-title=\"setConfiguration_modified.ino\">\/\/ #define FREQUENCY_433 \/\/ default value without set \r\n\/\/ #define FREQUENCY_170\r\n\/\/ #define FREQUENCY_470\r\n#define FREQUENCY_868\r\n\/\/ #define FREQUENCY_915\r\n\/\/ #define E220_22 \/\/ default value without set \r\n\/\/ #define E220_30 \/\/ uncomment in case you use an E220...T30D or E220...T30S\r\n#define LoRa_E220_DEBUG  \/\/ for printing the settings\r\n#include \"LoRa_E220.h\"\r\n\r\nSoftwareSerial mySerial(4, 5); \/\/ Arduino RX &lt;-- e220 TX, Arduino TX --&gt; e220 RX\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n\/\/ LoRa_E220 e220ttl(4, 5, 3, 7, 6); \/\/ alternative function to create the LoRa_E220 object\r\n\r\nvoid printParameters(struct Configuration configuration);\r\nvoid printModuleInformation(struct ModuleInformation moduleInformation);\r\n\r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  while(!Serial){};\r\n  delay(500);\r\n\r\n  Serial.println();\r\n\r\n\r\n  \/\/ Startup all pins and UART\r\n  e220ttl.begin();\r\n\r\n  ResponseStructContainer c;\r\n  c = e220ttl.getConfiguration();\r\n  \/\/ It's important get configuration pointer before all other operation\r\n  Configuration configuration = *(Configuration*) c.data;\r\n  Serial.println(c.status.getResponseDescription());\r\n  Serial.println(c.status.code);\r\n\r\n  printParameters(configuration);\r\n\r\n\/\/\t----------------------- DEFAULT TRANSPARENT ----------------------- \r\n  configuration.ADDL = 0x02;  \/\/ Low byte of address\r\n  configuration.ADDH = 0x00; \/\/ High byte of address\r\n\r\n  configuration.CHAN = 18; \/\/ 868 MHz for Exxx-900 modules, choose 23 for Exxx-400 to set 433 MHz \r\n\r\n  configuration.SPED.uartBaudRate = UART_BPS_9600; \/\/ Serial baud rate\r\n  configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; \/\/ Air baud rate\r\n  configuration.SPED.uartParity = MODE_00_8N1; \/\/ Parity bit\r\n\r\n  configuration.OPTION.subPacketSetting = SPS_200_00; \/\/ Packet size\r\n  configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; \/\/ Need to send special command\r\n  configuration.OPTION.transmissionPower = POWER_22; \/\/ Device power\r\n\r\n  configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; \/\/ Enable RSSI info\r\n  configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; \/\/ Transmission mode\r\n  configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; \/\/ Check interference\r\n  configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; \/\/ WOR timing\r\n\r\n  configuration.CRYPT.CRYPT_H = 0x00;  \/\/ encryption high byte, default: 0x00\r\n  configuration.CRYPT.CRYPT_L = 0x00;  \/\/ encryption low byte, default: 0x00\r\n\r\n  \/* Set configuration changed and set to hold the configuration; chose \r\nWRITE_CFG_PWR_DWN_LOSE to not save the configuration permanently *\/\r\n  ResponseStatus rs = e220ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE);\r\n  Serial.println(rs.getResponseDescription());\r\n  Serial.println(rs.code);\r\n\r\n  c = e220ttl.getConfiguration();\r\n  \/\/ It's important get configuration pointer before all other operation\r\n  configuration = *(Configuration*) c.data;\r\n  Serial.println(c.status.getResponseDescription());\r\n  Serial.println(c.status.code);\r\n\r\n  printParameters(configuration);\r\n  c.close();\r\n}\r\n\r\nvoid loop() {\r\n\r\n}\r\nvoid printParameters(struct Configuration configuration) {\r\n  DEBUG_PRINTLN(\"----------------------------------------\");\r\n\r\n  DEBUG_PRINT(F(\"HEAD : \"));  DEBUG_PRINT(configuration.COMMAND, HEX);DEBUG_PRINT(\" \");DEBUG_PRINT(configuration.STARTING_ADDRESS, HEX);DEBUG_PRINT(\" \");DEBUG_PRINTLN(configuration.LENGHT, HEX);\r\n  DEBUG_PRINTLN(F(\" \"));\r\n  DEBUG_PRINT(F(\"AddH : \"));  DEBUG_PRINTLN(configuration.ADDH, HEX);\r\n  DEBUG_PRINT(F(\"AddL : \"));  DEBUG_PRINTLN(configuration.ADDL, HEX);\r\n  DEBUG_PRINTLN(F(\" \"));\r\n  DEBUG_PRINT(F(\"Chan : \"));  DEBUG_PRINT(configuration.CHAN, DEC); DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.getChannelDescription());\r\n  DEBUG_PRINTLN(F(\" \"));\r\n  DEBUG_PRINT(F(\"SpeedParityBit     : \"));  DEBUG_PRINT(configuration.SPED.uartParity, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.SPED.getUARTParityDescription());\r\n  DEBUG_PRINT(F(\"SpeedUARTDatte     : \"));  DEBUG_PRINT(configuration.SPED.uartBaudRate, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.SPED.getUARTBaudRateDescription());\r\n  DEBUG_PRINT(F(\"SpeedAirDataRate   : \"));  DEBUG_PRINT(configuration.SPED.airDataRate, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.SPED.getAirDataRateDescription());\r\n  DEBUG_PRINTLN(F(\" \"));\r\n  DEBUG_PRINT(F(\"OptionSubPacketSett: \"));  DEBUG_PRINT(configuration.OPTION.subPacketSetting, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.OPTION.getSubPacketSetting());\r\n  DEBUG_PRINT(F(\"OptionTranPower    : \"));  DEBUG_PRINT(configuration.OPTION.transmissionPower, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.OPTION.getTransmissionPowerDescription());\r\n  DEBUG_PRINT(F(\"OptionRSSIAmbientNo: \"));  DEBUG_PRINT(configuration.OPTION.RSSIAmbientNoise, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.OPTION.getRSSIAmbientNoiseEnable());\r\n  DEBUG_PRINTLN(F(\" \"));\r\n  DEBUG_PRINT(F(\"TransModeWORPeriod : \"));  DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORPeriod, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());\r\n  DEBUG_PRINT(F(\"TransModeEnableLBT : \"));  DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableLBT, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());\r\n  DEBUG_PRINT(F(\"TransModeEnableRSSI: \"));  DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRSSI, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());\r\n  DEBUG_PRINT(F(\"TransModeFixedTrans: \"));  DEBUG_PRINT(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);DEBUG_PRINT(\" -&gt; \"); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());\r\n\r\n\r\n  DEBUG_PRINTLN(\"----------------------------------------\");\r\n}\r\nvoid printModuleInformation(struct ModuleInformation moduleInformation) {\r\n  Serial.println(\"----------------------------------------\");\r\n  DEBUG_PRINT(F(\"HEAD: \"));  DEBUG_PRINT(moduleInformation.COMMAND, HEX);DEBUG_PRINT(\" \");DEBUG_PRINT(moduleInformation.STARTING_ADDRESS, HEX);DEBUG_PRINT(\" \");DEBUG_PRINTLN(moduleInformation.LENGHT, DEC);\r\n\r\n  Serial.print(F(\"Model no.: \"));  Serial.println(moduleInformation.model, HEX);\r\n  Serial.print(F(\"Version  : \"));  Serial.println(moduleInformation.version, HEX);\r\n  Serial.print(F(\"Features : \"));  Serial.println(moduleInformation.features, HEX);\r\n  Serial.println(\"----------------------------------------\");\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>When trying things out, it can be a bit annoying to adjust the settings via a separate sketch, even if this saves resources. Perhaps you would prefer to make the settings directly in the sketches that you also use for control? And perhaps you would like to have an overview of all the setting options? Then take a look at <a href=\"#attachment_1\">Appendix 1<\/a> for the E220 series.<\/p>\r\n\n<h3 class=\"wp-block-heading\" id=\"settings_sketches_e22_e32\">Configuration Sketches for the E22 and E32 Series<\/h3>\n\n<p>In <a href=\"#attachment_2\">Appendix 2<\/a> and <a href=\"#attachment_3\">Appendix 3<\/a> you will find the counterparts to Appendix 1 for the E22 and E32 series respectively.&nbsp; The sketches also provide a good overview of the differences between the three module series.<\/p>\r\n\n<h3 class=\"wp-block-heading\" id=\"settings_details\">Settings in Detail <\/h3>\n\n<h4 class=\"wp-block-heading\">Address and Channel (configuration)<\/h4>\n\n<p>Each LoRa module has an address, which is made up of the higher byte <code>ADDH<\/code> and the lower byte <code>ADDL<\/code>. This allows you to set 65536 addresses. The address is assigned via <code>configuration.ADDL = ...<\/code> or <code>configuration.ADDH = ...<\/code>.<\/p>\r\n<p>The modules I tested cover the frequencies 850 &#8211; 930 MHz and 410 to 493 MHz. Fine adjustment is made via the channel. The formula for the frequency \u03bd is<\/p>\r\n\n<p><\/p>\r\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 19px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/ql-cache\/quicklatex.com-d9f59811c2590eac059781d3714981cd_l3.png\" height=\"19\" width=\"345\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#92;&#110;&#117;&#95;&#123;&#69;&#120;&#120;&#120;&#45;&#57;&#48;&#48;&#125;&#92;&#59;&#32;&#92;&#116;&#101;&#120;&#116;&#123;&#91;&#77;&#72;&#122;&#93;&#125;&#32;&#61;&#32;&#56;&#53;&#48;&#46;&#49;&#50;&#53;&#92;&#32;&#43;&#32;&#92;&#116;&#101;&#120;&#116;&#123;&#92;&#105;&#116;&#123;&#67;&#72;&#65;&#78;&#78;&#69;&#76;&#125;&#125; &#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\r\n\n<p><p class=\"ql-center-displayed-equation\" style=\"line-height: 19px;\"><span class=\"ql-right-eqno\"> &nbsp; <\/span><span class=\"ql-left-eqno\"> &nbsp; <\/span><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/ql-cache\/quicklatex.com-2baff5daf0d7fc991550d9b45a8122bb_l3.png\" height=\"19\" width=\"339\" class=\"ql-img-displayed-equation quicklatex-auto-format\" alt=\"&#92;&#91; &#92;&#110;&#117;&#95;&#123;&#69;&#120;&#120;&#120;&#45;&#52;&#48;&#48;&#125;&#92;&#59;&#32;&#92;&#116;&#101;&#120;&#116;&#123;&#91;&#77;&#72;&#122;&#93;&#125;&#32;&#61;&#32;&#52;&#49;&#48;&#46;&#49;&#50;&#53;&#32;&#43;&#32;&#92;&#116;&#101;&#120;&#116;&#123;&#92;&#105;&#116;&#123;&#67;&#72;&#65;&#78;&#78;&#69;&#76;&#125;&#125; &#92;&#93;\" title=\"Rendered by QuickLaTeX.com\"\/><\/p><\/p>\r\n\r\n\n<p>For the Exxx-900 modules, use <code>configuration.CHAN = 18<\/code> to set the frequency to 868.125 MHz. With the Exxx-400 models, you set 433.125 MHz with <code>configuration.CHAN = 23<\/code>.<\/p>\r\n<p>There is a certain risk that you will transmit on a frequency that is not permitted in your country if you make the wrong selection. I&#8217;m just saying.<\/p>\r\n<p>A check with a <a href=\"https:\/\/www.tinysa.org\/wiki\/\" target=\"_blank\" rel=\"noopener\">tinySA Spectrum Analyzer<\/a> showed a good match with the target frequency within the accuracy of this device. Here is the result for channels 0, 18 and 80 of an E220-900T22D module:<\/p>\r\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/frequency_check_e220_900_ebyte-1024x260.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"260\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/frequency_check_e220_900_ebyte-1024x260.png\" alt=\"Checking the transmission frequency E220-900T22D for channel 0, 18 and 80\" class=\"wp-image-20584\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/frequency_check_e220_900_ebyte-1024x260.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/frequency_check_e220_900_ebyte-300x76.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/frequency_check_e220_900_ebyte-768x195.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/frequency_check_e220_900_ebyte-1320x336.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/frequency_check_e220_900_ebyte.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Checking the transmission frequency for channel 0, 18 and 80 -&gt; 850.13 \/ 868.20 \/ 930.12 MHz<\/figcaption><\/figure>\n\n<p>The principle of channel setting is identical for all modules.<\/p>\r\n\n<h4 class=\"wp-block-heading\">Transmission Rate and Options (configuration.SPED)<\/h4>\n\n<p>You can set the following parameters for UART communication and data transmission over the air (example E220):<\/p>\r\n<ul>\r\n<li><strong>uartBaudRate<\/strong>: Baud rate UART_BPS_xxx<br>\r\n<ul>\r\n<li>xxx = 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><strong>airDataRate<\/strong>: Data rate for radio transmission AIR_DATA_RATE_xxx\r\n<ul>\r\n<li>AIR_DATA_RATE_010_24: 2.4 kbit\/s (default)<\/li>\r\n<li>AIR_DATA_RATE_011_48: 4.8 kbit\/s<\/li>\r\n<li>AIR_DATA_RATE_100_96: 9.6 kbit\/s<\/li>\r\n<li>AIR_DATA_RATE_101_192: 19.2 kbit\/s<\/li>\r\n<li>AIR_DATA_RATE_110_384: 38.4 kbit\/s<\/li>\r\n<li>AIR_DATA_RATE_111_625: 62.5 kbit\/s<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><strong>uartParity<\/strong>: Parity MODE_xxx;\r\n<ul>\r\n<li>MODE_00_8N1: none (default)<\/li>\r\n<li>MODE_01_8O1: odd<\/li>\r\n<li>MODE_10_8E1: even<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n\n<p>The options for the airDataRate differ for the E22 and 32 series. See <a href=\"#attachment_2\">Appendix 2<\/a> and <a href=\"#attachment_3\">3<\/a>.<\/p>\r\n<p>Regarding the data rate via radio: the lower the data rate, the higher the maximum range.<\/p>\r\n\n<h4 class=\"wp-block-heading\">Further Transmission Options (configuration.OPTION)<\/h4>\n\n<p>Further options (example E220):<\/p>\r\n\n<ul>\r\n<li><strong>subPacketSetting<\/strong>: Maximum data packet size, i.e. the maximum length of your message that you can send continuously in one piece.<br>\r\n<ul>\r\n<li>SPS_200_00: 200 bytes<\/li>\r\n<li>SPS_128_01: 128 bytes<\/li>\r\n<li>SPS_064_10: 64 bytes<\/li>\r\n<li>PLC_032_11: 32 bytes<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><strong>RSSIAmbientNoise<\/strong>: RSSI (Received Signal Strength Indicator) Ambient Noise enable<br>\r\n<ul>\r\n<li>RSSI_AMBIENT_NOISE_DISABLED: Function is switched off<\/li>\r\n<li>RSSI_AMBIENT_NOISE_ENABLED: Function is switched on<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><strong>transmissionPower<\/strong>: Transmission power POWER_xx with xx = power in dbm. The setting options depend on the model you are using.<br>\r\n<ul>\r\n<li>xx for E220&#8230;.22D: 22, 17, 13, 10<\/li>\r\n<li>xx for E220&#8230;.30D: 30, 27, 24, 21<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n\n<p>The subPacketSetting and transmissionPower settings differ for the E22 and E32 series (see <a href=\"#attachment_2\">Appendix 2<\/a> and <a href=\"#attachment_3\">3<\/a>). RSSIAmbientNoise is not available on the E32 module.<\/p>\r\n\n<h4 class=\"wp-block-heading\">Mode Settings (configuration.TRANSMISSION_MODE)<\/h4>\n\n<p>I will come back to some of these settings later. Here are the options for the E220 series:<\/p>\r\n\n<ul>\r\n<li><strong>enableRSSI<\/strong>: Signal strength information (Received Signal Strength Indication)<br>\r\n<ul>\r\n<li>RSSI_DISABLED: disabled<\/li>\r\n<li>RSSI_ENABLED: enabled<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><strong>fixedTransmission<\/strong>: Transmission mode\r\n<ul>\r\n<li>FT_FIXED_TRANSMISSION: Transmission to a specific address \/ channel.<\/li>\r\n<li>FT_TRANSPARENT_TRANSMISSION: Transmission to all modules with identical address and channel.<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><strong>enableLBT<\/strong>: LBT (Listen Before Talk) is a function that causes the module to wait up to two seconds for a favorable moment (with low interference) before transmitting.<br>\r\n<ul>\r\n<li>LBT_DISABLED: Function disabled<\/li>\r\n<li>LBT_ENABLED: Function enabled<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li><strong>WORPeriod<\/strong>: WOR (Wake On Radio) period WOR_xxx_yyy with xxx = wake-up period in milliseconds\r\n<ul>\r\n<li>xxx_yyy = 500_000, 1000_001, 1500_010, 2000_011, 2500_100, 3000_101, 3500_110, 4000_111<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n<p>The WORPeriod parameter needs a little more explanation. This is the period after which the receiver wakes up to check whether a message is coming. Of course, the sender does not know when the receiver is awake and therefore sends a &#8220;preamble&#8221; with the length of the wake-up period. The WOR receiver then remains awake until the actual message is received. For this reason, the WOR Receiver and the WOR Transmitter must have the same WORPeriod set.<\/p>\r\n\n<p>The WORPeriod is called wirelessWakeUpTime when using the E32 series. The selectable periods are also different. The enableRSSI and enableLBT settings are not available on the E32 modules.<\/p>\r\n\n<h4 class=\"wp-block-heading\">Encryption (configuration.CRYPT)<\/h4>\n\n<p>All modules encrypt the messages. However, only the E22 and E220 series modules allow individual encryption. To do this, you define values for the two bytes CRYPT_H and CRYPT_L. The setting must, of course, be identical for the transmitter and receiver. A fixed encryption setting is used on the E32.<\/p>\r\n\n<h2 class=\"wp-block-heading\" id=\"response_container\">Response Container and Response Status<\/h2>\n\n<p>Before we finally come to the pratical part, I need to explain two structures defined in the library, namely ResponseContainer and ResponseStatus. They contain information about the incoming and outgoing messages.<\/p>\r\n<p>The ResponseContainer contains the actual message <code>data<\/code>, the signal strength value <code>rssi<\/code>, and the ResponseStatus <code>status<\/code>. <\/p>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"struct_response_container\" data-enlighter-title=\"struct_response_container\" data-enlighter-linenumbers=\"false\">struct ResponseContainer {\r\n  String data;\r\n  byte rssi; \/\/ only E22 and E220 series!\r\n  ResponseStatus status;\r\n};<\/pre>\r\n\n<p>The ResponseStatus is also a structure. It contains the error code <code>code<\/code> and the function <code>getResponseDescription()<\/code>, which returns a string that translates the code comprehensibly. For example, error code 1 (E220_SUCCESS) means &#8220;Success&#8221;.<\/p>\r\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"struct_response_status\" data-enlighter-title=\"struct_response_status\" data-enlighter-linenumbers=\"false\">struct ResponseStatus {\r\n  Status code;\r\n  String getResponseDescription() {\r\n    return getResponseDescriptionByParams(this-&gt;code);\r\n  }\r\n};<\/pre>\r\n\n<h2 class=\"wp-block-heading\" id=\"transparent_transmission\">Transparent Transmission Mode<\/h2>\n\n<p>But now to the first sketch. We allow several (at least two) modules to communicate with each other in &#8220;Transparent Transmission Mode&#8221;. In this mode, you can reach all LoRa modules that have the same address and channel set:<\/p>\r\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_transparent_transmission_scheme-1024x468.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"468\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_transparent_transmission_scheme-1024x468.png\" alt=\"Scheme for transparent transmission mode\" class=\"wp-image-20587\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_transparent_transmission_scheme-1024x468.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_transparent_transmission_scheme-300x137.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_transparent_transmission_scheme-768x351.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_transparent_transmission_scheme-1536x703.png 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_transparent_transmission_scheme-1320x604.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_transparent_transmission_scheme.png 1712w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Scheme for transparent transmission mode<\/figcaption><\/figure>\n\n<p>To try out the transparent mode, you should not normally need to make any changes to the settings. However, if you have problems, set the modules to the correct state with setConfiguration_modified.ino.<\/p>\r\n<p>Then upload the lora_transparent.ino sketch to the microcontroller boards. You may need to adjust lines 3 and 4 for your boards. Take a look at the original example sketches in the library &#8211; there are many ready-made settings for different boards.&nbsp;<\/p>\r\n<p>In most examples, we need a separate serial monitor for each board. With the old Arduino IDE 1.x, this was easy by simply calling up the IDE several times, i.e. creating several instances and selecting a separate serial port for each instance. The IDE 2.x does not seem to allow multiple instances. You can help yourself by saving the sketch under different names, opening the versions, and then setting a separate port for each sketch.&nbsp;<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_transparent.ino\" data-enlighter-title=\"lora_transparent.ino \">#include \"LoRa_E220.h\"\r\n \r\nSoftwareSerial mySerial(4,5);\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  Serial.println(\"Hi, I'm going to send message!\");\r\n \r\n  \/\/ Startup all pins and UARTD\r\n  e220ttl.begin();\r\n \r\n  \/\/ Send message\r\n  ResponseStatus rs = e220ttl.sendMessage(\"Hello, world?\");\r\n  \/\/ Check if there is some problem of successfully send\r\n  Serial.println(rs.getResponseDescription());\r\n}\r\n \r\nvoid loop() {\r\n    \/\/ If something available\r\n  if (e220ttl.available()&gt;1) {\r\n      \/\/ read the String message\r\n    ResponseContainer rc = e220ttl.receiveMessage();\r\n    \/\/ Is something goes wrong print error\r\n    if (rc.status.code!=1){\r\n        Serial.println(rc.status.getResponseDescription());\r\n    }else{\r\n        \/\/ Print the data received\r\n        Serial.println(rc.data);\r\n    }\r\n  }\r\n  if (Serial.available()) {\r\n      String input = Serial.readString();\r\n      e220ttl.sendMessage(input);\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>Apart from the library to be integrated and the object creation (line 4), the sketch works in the same way with the E22 and E32 boards.<\/p>\r\n\n<h3 class=\"wp-block-heading\">Explanations for lora_transparent.ino<\/h3>\n\n<p>First create the object e220ttl and initialize your module with <code>e220ttl.begin()<\/code>.<\/p>\r\n<p>You send messages using <code>sendMessage()<\/code>. As you can see, you do not enter an address or channel in transparent mode. The module automatically sends to the modules with the same settings. The return value of <code>sendMessage()<\/code> is a structure of the type <code>ResponseStatus<\/code>, which I explained above. You can get a readable translation of the status code with <code>getResponseDescription()<\/code>. Ideally, this is &#8220;Success&#8221;. However, &#8220;Success&#8221; only means that the message was sent successfully and not that it was received.<\/p>\r\n<p>You can check whether a message has been received on the receiver side with <code>e220ttl.available()<\/code>. You are reading the message using <code>receiveMessage()<\/code>. More precisely, <code>receiveMessage()<\/code> returns a structure of the type <code>ResponseContainer<\/code>, which contains the actual message in the element <code>data<\/code>.<\/p>\r\n<p>The <code>ResponseContainer<\/code> &#8220;rc&#8221; in turn contains the <code>ResponseStatus<\/code> &#8220;rc.status&#8221;. You check with<\/p>\r\n<p><code> if (rc.status.code != 1) {....<\/code><\/p>\r\n<p>whether an error has occurred. Perhaps the variant<\/p>\r\n<p><code>if (rc.status.getResponseDescription() = \"Success\") {... <\/code><\/p>\r\n<p>would be a little easier to understand, but I wanted to stay close to the original library sketches. <\/p>\r\n<p>If everything is OK, the message is displayed, if not, the corresponding error message appears.<\/p>\r\n<p>Use <code>if (Serial.available(){...<\/code> to check whether an input has been made via the serial monitor. If this is the case, the entry is read and sent.<\/p>\r\n\n<h4 class=\"wp-block-heading\">Output lora_transparent.ino<\/h4>\n\n<p>I used three modules. Below, you can see the output of the first activated module. The two &#8220;Hello, world?&#8221; messages were sent via the setup of the other modules. I sent the two other messages &#8220;manually&#8221; from the other modules by entering them in the serial monitor.<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent.png\"><img loading=\"lazy\" decoding=\"async\" width=\"680\" height=\"116\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent.png\" alt=\"Output lora_transparent. ino\" class=\"wp-image-20274\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent.png 680w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent-300x51.png 300w\" sizes=\"auto, (max-width: 680px) 100vw, 680px\" \/><\/a><figcaption class=\"wp-element-caption\">Output lora_transparent. ino<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\" id=\"structures\">Sending and receiving Structures<\/h2>\n\n<p>In most cases, you probably do not want to transmit character strings, but data, such as that of a weather station. In the following example, we send the humidity (integer), the temperature (float) and the rain status (bool) every five seconds. To send this data as a &#8220;package&#8221;, we define the structure <code>weatherData<\/code>.<\/p>\r\n<p>For this example, we will remain in transparent mode. The two sketches for the transmitter and receiver only need to be changed for the E22 and E32 modules regarding the library to be integrated and the object creation.<\/p>\r\n\n<h4 class=\"wp-block-heading\">Transmitter<\/h4>\n\n<p>The sketch for the transmitter should be largely self-explanatory:<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_struct_transmitter.ino\" data-enlighter-title=\"lora_struct_transmitter.ino\">#include \"LoRa_E220.h\"\r\n \r\nSoftwareSerial mySerial(4,5);\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n\r\nstruct weatherData {\r\n  int humidity;\r\n  float temperature;\r\n  bool rain;\r\n};\r\n\r\nweatherData currentWeather = {50, 20.0, false};\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  Serial.println(\"Hi, I'm going to send message!\");\r\n \r\n  \/\/ Startup all pins and UARTD\r\n  e220ttl.begin();\r\n \r\n  \/\/ Send message\r\n  ResponseStatus rs = e220ttl.sendMessage(\"Hello, world?\");\r\n  \/\/ Check if there is some problem of successfully send\r\n  Serial.println(rs.getResponseDescription());\r\n}\r\n \r\nvoid loop() {\r\n  static unsigned long lastSend = millis(); \r\n  if(millis() - lastSend &gt; 5000){\r\n      currentWeather.humidity = 30;\r\n      currentWeather.temperature = 23.7;\r\n      currentWeather.rain = false; \r\n      e220ttl.sendMessage(&amp;currentWeather, sizeof(currentWeather));\r\n      lastSend = millis();\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>Regarding the sending process, the only difference to the previous sketch is that we do not pass <code>sendMessage()<\/code> a string, but a structure (as reference using &#8220;&amp;&#8221;) and the size of the structure.<\/p>\r\n\n<h4 class=\"wp-block-heading\">Receiver<\/h4>\n\n<p>To be able to process the structure to be received, we use the structure<code>ur ResponseStructContainer<\/code> instead of <code>ResponseContainer<\/code>, which is defined as follows:<\/p>\r\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"ResponseStructContainer\" data-enlighter-title=\"ResponseStructContainer\">struct ResponseStructContainer {\r\n  void *data;\r\n  byte rssi;\r\n  ResponseStatus status;\r\n  void close() {\r\n    free(this-&gt;data);\r\n  }\r\n};<\/pre>\r\n\n<p>The data type <code>void*<\/code> is an untyped pointer that many readers may not be familiar with. In contrast to the usual pointers such as <code>int*<\/code>, its meaning, i.e. the data type, must first be assigned to it.<\/p>\r\n\n<p>Here is the sketch:<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_struct_receiver.ino\" data-enlighter-title=\"lora_struct_receiver.ino\">#include \"LoRa_E220.h\"\r\n \r\nSoftwareSerial mySerial(4,5);\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n\r\nstruct weatherData {\r\n  int humidity;\r\n  float temperature;\r\n  bool rain;\r\n};\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  Serial.println(\"Hi, waiting for weather data...\");\r\n  \/\/ Startup all pins and UARTD\r\n  e220ttl.begin();\r\n}\r\n \r\nvoid loop() {\r\n  if (e220ttl.available()&gt;1) {\r\n      \/\/ read the String message\r\n    ResponseStructContainer rsc = e220ttl.receiveMessage(sizeof(weatherData));\r\n    weatherData currentWeather = *(weatherData*) rsc.data;\r\n    Serial.print(\"Humidity     [%]: \");\r\n    Serial.println(currentWeather.humidity);\r\n    Serial.print(\"Temperature [\u00b0C]: \");\r\n    Serial.println(currentWeather.temperature);\r\n    Serial.print(\"Rain            : \");\r\n    if(currentWeather.rain){\r\n      Serial.println(\"yes\");\r\n    }\r\n    else{\r\n      Serial.println(\"no\");\r\n    }\r\n    Serial.println();\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>The line:<\/p>\r\n<p><code>ResponseStructContainer rsc = e220ttl.receiveMessage(sizeof(weatherData));<\/code><\/p>\r\n<p>reads the received message and saves it in <code>ResponseStructContainer<\/code> &#8220;rsc&#8221;. Please note that we must pass the size of the expected data packet to <code>receiveMessage()<\/code>.<\/p>\r\n<p>The actual data is stored as data type <code>void*<\/code> in <code>rsc.data<\/code>. To be able to do something with this, we cast the data type <code>void*<\/code> into a pointer with <code>(weatherData*)<\/code>, which points to the structure of type <code>weatherData<\/code>. To save the data in the structure <code>currentWeather<\/code>, we have to dereference the pointer with another <code>*<\/code>. So:<\/p>\r\n<p><code>weatherData currentWeather = *(weatherData*) rsc.data;<\/code><\/p>\r\n<p>The output is still missing. It&#8217;s a bit boring, of course, because we always send the same data. But this is only about the principle.<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent_struct_receiver.png\"><img loading=\"lazy\" decoding=\"async\" width=\"546\" height=\"73\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent_struct_receiver.png\" alt=\"\" class=\"wp-image-20277\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent_struct_receiver.png 546w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent_struct_receiver-300x40.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_transparent_struct_receiver-542x73.png 542w\" sizes=\"auto, (max-width: 546px) 100vw, 546px\" \/><\/a><figcaption class=\"wp-element-caption\">Output lora_struct_receiver.ino<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\" id=\"fixed_transmission\">Fixed Transmission Mode<\/h2>\n\n<p>You set the fixed transmission mode by changing the line<\/p>\r\n<p><code>configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;<\/code><\/p>\r\n<p>to:<\/p>\r\n<p><code>configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;<\/code><\/p>\r\n<p>There are two options for sending messages in fixed transmission mode:<\/p>\r\n<ol>\r\n<li>Exclusive transmission to the modules with a specific address on a specific channel:\r\n<ul>\r\n<li>Function: <code>sendFixedMessage(ADDH, ADDL, channel, message); <\/code><\/li>\r\n<li>The transmitting module itself may have a different address and a different channel set.<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>Sending to all modules on a specific channel, regardless of their address (&#8220;broadcasting&#8221;):\r\n<ul>\r\n<li>Function: <code>sendBroadcastFixedMessage(channel, message)<\/code>\r\n<ul>\r\n<li>which corresponds to: <code>sendFixedMessage(0xFF, 0xFF, channel, message)<\/code>, as 0xFFFF is the broadcasting address.<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>The transmitting module may also have a different channel set here.<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ol>\r\n<p>I have two diagrams to illustrate this. Here first for sending to <strong>a specific address<\/strong>:<\/p>\r\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_scheme-1024x470.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"470\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_scheme-1024x470.png\" alt=\"LoRa E220: Schematic for Fixed Transmission Mode\" class=\"wp-image-20589\" style=\"width:840px;height:auto\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_scheme-1024x470.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_scheme-300x138.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_scheme-768x353.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_scheme-1536x705.png 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_scheme-1320x606.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_scheme.png 1712w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Scheme for fixed transmission mode<\/figcaption><\/figure>\n\n<p>And here is the diagram for <strong>broadcasting<\/strong> in fixed transmission mode:<\/p>\r\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_broadcast_scheme-1024x476.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"476\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_broadcast_scheme-1024x476.png\" alt=\"LoRa E220: Scheme for broadcast message in fixed transmission mode\" class=\"wp-image-20591\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_broadcast_scheme-1024x476.png 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_broadcast_scheme-300x140.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_broadcast_scheme-768x357.png 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_broadcast_scheme-1536x715.png 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_broadcast_scheme-1320x614.png 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_fixed_transmission_broadcast_scheme.png 1709w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Scheme for broadcasting in fixed transmission mode<\/figcaption><\/figure>\n\n<h3 class=\"wp-block-heading\">Example Sketch Fixed Transmission Mode<\/h3>\n\n<p>To test the fixed transmission mode, I used three modules with the following settings:<\/p>\r\n<ol>\r\n<li>ADDH = 0x00, ADDL = <strong>0x01<\/strong>, Channel = 18<\/li>\r\n<li>ADDH = 0x00, ADDL = <strong>0x02<\/strong>, Channel = 18<\/li>\r\n<li>ADDH = 0x00, ADDL = <strong>0x03<\/strong>, Channel = 18<\/li>\r\n<\/ol>\r\n<p>I have uploaded the following sketch to the three controlling Arduino boards, whereby I have only adapted the &#8220;greeting&#8221; in line 16 and the switch construction from line 38.<\/p>\r\n<p>The sketch allows messages entered via the serial monitor to be sent to specific addresses (input: &#8220;x,message&#8221; with x = 1,2,3) or to all modules via broadcasting (input: &#8220;18,message&#8221;).&nbsp;<\/p>\r\n<p>The sketch only needs to be adapted for use on E22 and E32 modules regarding the library and object creation.&nbsp;<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_fixed_transmission_no_1.ino\" data-enlighter-title=\"lora_fixed_transmission_no_1.ino\">#include \"LoRa_E220.h\"\r\n\r\nSoftwareSerial mySerial(4, 5); \/\/ Arduino RX &lt;-- e220 TX, Arduino TX --&gt; e220 RX\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  Serial.println(\"Hi, I'm going to send message!\");\r\n \r\n  \/\/ Startup all pins and UART\r\n  e220ttl.begin();\r\n \r\n  \/\/ Send message\r\n  ResponseStatus rs = e220ttl.sendBroadcastFixedMessage(18,\"Hi to all receivers! This is no. 1\"); \/\/ adjust\r\n  \/\/ Check If there is some problem of successfully send\r\n  Serial.println(rs.getResponseDescription());\r\n}\r\n \r\nvoid loop() {\r\n    \/\/ If something available\r\n  if (e220ttl.available()&gt;1) {\r\n      \/\/ read the String message\r\n    ResponseContainer rc = e220ttl.receiveMessage();\r\n    \/\/ Is something goes wrong print error\r\n    if (rc.status.code!=1){\r\n        Serial.println(rc.status.getResponseDescription());\r\n    }else{\r\n        \/\/ Print the data received\r\n        Serial.println(rc.data);\r\n    }\r\n  }\r\n  if (Serial.available()) {\r\n    int addr = Serial.parseInt();\r\n    String input = Serial.readString();\r\n    input = input.substring(input.indexOf(\",\")+1);\r\n    switch(addr){\r\n      case 2:\r\n        e220ttl.sendFixedMessage(0,2,18,input);\r\n        break;\r\n      case 3:\r\n        e220ttl.sendFixedMessage(0,3,18,input);\r\n        break;\r\n      case 18:\r\n        e220ttl.sendBroadcastFixedMessage(18,input);\r\n        break;\r\n      default:\r\n        e220ttl.sendBroadcastFixedMessage(18,input);\r\n    }\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>Here is the output of module 3 (ADDL = 3). To receive the greetings (&#8220;Hi to all receivers! &#8230;&#8221;) from the other modules, it had to be initialized before them.<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_fixed_transmission_no3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"614\" height=\"99\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_fixed_transmission_no3.png\" alt=\"\" class=\"wp-image-20616\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_fixed_transmission_no3.png 614w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_fixed_transmission_no3-300x48.png 300w\" sizes=\"auto, (max-width: 614px) 100vw, 614px\" \/><\/a><figcaption class=\"wp-element-caption\">Output <\/figcaption><\/figure>\n\n<p>Of course, structures can also be sent in fixed transmission mode. However, I try to keep my examples simple and limit them to the relevant topic.<\/p>\r\n\n<h2 class=\"wp-block-heading\" id=\"rssi\">RSSI Received Signal Strength Indicator<\/h2>\n\n<p>As the RSSI function is not available on the E32 modules, this section only applies to the E22 and E220 modules. <\/p>\r\n<p>The RSSI is a dimensionless number of the byte datatype that tells you how strong the received signal was. The number cannot be directly translated into a signal strength in dBm. To read out the RSSI, simply replace <code>receiveMessage()<\/code> with <code>ReceiveMessageRSSI()<\/code> on the receiver side, for example:<\/p>\r\n<p><code>ResponseContainer rc = e220ttl.receiveMessageRSSI();<\/code><\/p>\r\n\n<p>Here is an example sketch:<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_fixed_rssi.ino\" data-enlighter-title=\"lora_fixed_rssi.ino\">#include \"LoRa_E220.h\"\r\n \r\nSoftwareSerial mySerial(4,5);\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  Serial.println(\"Hi, I'm going to send message!\");\r\n \r\n  \/\/ Startup all pins and UART\r\n  e220ttl.begin();\r\n \r\n  \/\/ Send message\r\n  ResponseStatus rs = e220ttl.sendFixedMessage(0,2,18,\"Hello, world?\");\r\n  \/\/ Check If there is some problem of successfully send\r\n  Serial.println(rs.getResponseDescription());\r\n}\r\n \r\nvoid loop() {\r\n    \/\/ If something available\r\n  if (e220ttl.available()&gt;1) {\r\n      \/\/ read the String message\r\n    ResponseContainer rc = e220ttl.receiveMessageRSSI();\r\n    \/\/ Is something goes wrong print error\r\n    if (rc.status.code!=1){\r\n        Serial.println(rc.status.getResponseDescription());\r\n    }else{\r\n        \/\/ Print the data received\r\n        String output = rc.data;\r\n        byte rssiVal =  rc.rssi;\r\n        Serial.println(rc.data);\r\n        Serial.print(\"RSSI: \");\r\n        Serial.println(rc.rssi);\r\n    }\r\n  }\r\n  if (Serial.available()) {\r\n      String input = Serial.readString();\r\n      e220ttl.sendFixedMessage(0,2,18,input);\r\n  }\r\n}<\/pre>\r\n<p> <\/p>\r\n<\/div>\r\n\n<p>For the following receiver output, I placed two modules on my desk and sent two messages. For the first message, I used antennas for both modules. Before sending the second message, I disconnected the antenna from the receiving module. As you can see, the <em>received<\/em> signal strength has dropped accordingly. As you can also see, the RSSI is not a measure of the actual signal strength, as this is the same in both cases.<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"491\" height=\"78\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_fixed_rssi.png\" alt=\"Output lora_fixed_rssi.ino\" class=\"wp-image-20605\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_fixed_rssi.png 491w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_fixed_rssi-300x48.png 300w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><figcaption class=\"wp-element-caption\">Output lora_fixed_rssi.ino<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\" id=\"wor\">Using Wake On Radio (WOR)<\/h2>\n\n<p>The power consumption of the LoRa module series E220, E22 and E32 can be significantly reduced if they are operated in WOR mode (&#8220;Wake On Radio&#8221;). As mentioned above, the transmitter and receiver must have the same WOR period set.&nbsp;<\/p>\r\n\n<h3 class=\"wp-block-heading\">WOR Transmitter<\/h3>\n\n<p>The only additional setting you need to make on the transmitter side is the WOR transmitter mode:<\/p>\r\n<p><code> e220ttl.setMode(MODE_1_WOR_TRANSMITTER);<\/code><\/p>\r\n<p>You do this directly in your application sketch, i.e. not via the configuration sketch. Despite its role as a WOR transmitter, the module can still receive messages.<\/p>\r\n<p>Here is the sketch for the WOR transmitter:<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_wor_transmitter.ino\" data-enlighter-title=\"lora_wor_transmitter.ino\">#include \"LoRa_E220.h\"\r\n\r\nSoftwareSerial mySerial(4, 5); \/\/ Arduino RX &lt;-- e220 TX, Arduino TX --&gt; e220 RX\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n\r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  Serial.println(\"Hi, I'm going to send a WOR message!\");\r\n \r\n  e220ttl.begin();\r\n  e220ttl.setMode(MODE_1_WOR_TRANSMITTER);\r\n \r\n  \/\/ Send message\r\n  ResponseStatus rs = e220ttl.sendFixedMessage(0,2,18,\"Hello, world? WOR!\");\r\n  \/\/ Check If there is some problem of successfully send\r\n  Serial.println(rs.getResponseDescription());\r\n}\r\n \r\nvoid loop() {\r\n    \/\/ If something available\r\n  if (e220ttl.available()&gt;1) {\r\n      \/\/ read the String message\r\n    ResponseContainer rc = e220ttl.receiveMessage();\r\n    \/\/ Is something goes wrong print error\r\n    if (rc.status.code!=1){\r\n       Serial.println(rc.status.getResponseDescription());\r\n    }else{\r\n        \/\/ Print the data received\r\n        Serial.println(rc.data);\r\n    }\r\n  }\r\n  if (Serial.available()) {\r\n      String input = Serial.readString();\r\n      e220ttl.sendFixedMessage(0,2,18,input);\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>The output is still missing. As you can see below, the transmitter receives a confirmation of receipt. This is not a feature of WOR mode, but a feature of the receiver sketch, to which we will come soon.<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_wor_sender.png\"><img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"79\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_wor_sender.png\" alt=\"Output lora_wor_transmitter.ino\" class=\"wp-image-20264\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_wor_sender.png 580w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_wor_sender-300x41.png 300w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><figcaption class=\"wp-element-caption\">Output lora_wor_transmitter.ino<\/figcaption><\/figure>\n\n<p>Instead of <code>setMode(MODE_1_WOR_TRANSMITTER)<\/code> you use <code>setMode(MODE_1_WAKE_UP)<\/code> for the E32 modules. For the E22 modules, set mode <code>MODE_1_WOR<\/code> in the sketch and define the role as WOR transmitter via the configuration sketch.&nbsp; <\/p>\r\n\n<h3 class=\"wp-block-heading\">WOR Receiver<\/h3>\n\n<p>You can set the WOR receiver mode as follows:<\/p>\r\n<p><code>e220ttl.setMode(MODE_2_WOR_RECEIVER);<\/code><\/p>\r\n<p>To be able to send back the confirmation of receipt, you must switch the receiver to normal mode using <code>e220ttl.setMode(MODE_0_NORMAL);<\/code>.<\/p>\r\n<p>You do not necessarily need the interrupt inserted here, which is triggered by the falling edge of the AUX pin. It is only used to announce the output of the incoming message via the TX pin. Here is the diagram of the behavior of the AUX pin and TX pin:<\/p>\r\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/aux_pin_uart_output.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"255\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/aux_pin_uart_output.png\" alt=\"AUX pin vs. TX pin when outputting a message via TX\" class=\"wp-image-20622\" style=\"width:840px;height:auto\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/aux_pin_uart_output.png 1000w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/aux_pin_uart_output-300x77.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/aux_pin_uart_output-768x196.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><figcaption class=\"wp-element-caption\">AUX pin vs. TX pin when outputting a message via TX<\/figcaption><\/figure>\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_wor_receiver.ino\" data-enlighter-title=\"lora_wor_receiver.ino\">#include \"LoRa_E220.h\"\r\n#define AUX_PIN 3\r\nvolatile bool interruptExecuted = false;\r\n \r\nSoftwareSerial mySerial(4, 5); \/\/ Arduino RX &lt;-- e220 TX, Arduino TX --&gt; e220 RX\r\nLoRa_E220 e220ttl(&amp;mySerial, AUX_PIN, 7, 6); \/\/ AUX M0 M1\r\n\r\n\r\nvoid wakeUp() {\r\n  interruptExecuted = true;\r\n  \/\/detachInterrupt(digitalPinToInterrupt(AUX_PIN));\r\n}\r\n\r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  e220ttl.begin();\r\n  e220ttl.setMode(MODE_2_WOR_RECEIVER);\r\n\r\n  Serial.println(\"Start sleep!\");\r\n  delay(100);\r\n  attachInterrupt(digitalPinToInterrupt(AUX_PIN), wakeUp, FALLING);\r\n}\r\n \r\nvoid loop() {\r\n  \/\/  If something available\r\n  if (e220ttl.available()&gt;1) {\r\n    Serial.println(\"Message arrived\");\r\n      \/\/ read the String message\r\n    ResponseContainer rc = e220ttl.receiveMessage();\r\n\r\n    String message = rc.data;\r\n    \/\/Serial.println(rc.status.getResponseDescription());\r\n    Serial.println(message);\r\n\r\n    e220ttl.setMode(MODE_0_NORMAL); \/\/ change to normal mode\r\n    delay(1000);\r\n\r\n    e220ttl.sendFixedMessage(0, 1, 18, \"We have received the message!\");\r\n    e220ttl.setMode(MODE_2_WOR_RECEIVER); \/\/ change back to WOR receiver mode\r\n    interruptExecuted = false;\r\n  }\r\n \r\n  if(interruptExecuted) {\r\n    Serial.println(\"WakeUp Callback, AUX pin go LOW and start receive message!\");\r\n    Serial.flush();\r\n    \/\/attachInterrupt(digitalPinToInterrupt(AUX_PIN), wakeUp, FALLING);\r\n    interruptExecuted = false;\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>And here is the output:<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"544\" height=\"112\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_wor_receiver.png\" alt=\"Output lora_wor_receiver.ino\" class=\"wp-image-20266\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_wor_receiver.png 544w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_wor_receiver-300x62.png 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/output_lora_wor_receiver-542x112.png 542w\" sizes=\"auto, (max-width: 544px) 100vw, 544px\" \/><figcaption class=\"wp-element-caption\">Output lora_wor_receiver.ino<\/figcaption><\/figure>\n\n<p>Instead of <code>setMode(MODE_2_WOR_RECEIVER)<\/code> you use <code>setMode(MODE_2_POWER_SAVING)<\/code> for the E32 modules. For the E22 modules, set the mode <code>MODE_1_WOR<\/code> in the sketch and define the role as WOR receiver before as a permanent setting via setConfiguration.ino.&nbsp;<\/p>\r\n\n<h2 class=\"wp-block-heading\" id=\"wor_mcu\">Waking up the MCU with WOR<\/h2>\n\n<p>Since the AUX pin goes LOW after \/ while receiving the message and before outputting it to the microcontroller, this signal can be used to wake up not only the LoRa module but also a sleeping microcontroller via an external interrupt.<\/p>\r\n<p>Unfortunately, the lead time between the falling edge of the AUX pin and the start of transmission via the TX pin cannot be set (at least I have not found a way to do this). Two to three milliseconds may be too little time, for example, to bring an ESP32 back from deep sleep. On the Arduino Nano, I noticed that at least the first character of the transmitted message was missing. A pragmatic solution, at least for my Arduino Nano configuration, would be to prefix the message with a few dummy characters that can be sacrificed.<\/p>\r\n<p>I have chosen an alternative solution in my example, namely we first send a &#8220;wake-up call&#8221;. Before the actual message goes out, we send the transmitter a confirmation that the receiver is awake.<\/p>\r\n<p>Here is the transmitter sketch:<\/p>\r\n\n<h4 class=\"wp-block-heading\">Transmitter Side<\/h4>\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_wor_wake_up_mcu_sender.ino\" data-enlighter-title=\"lora_wor_wake_up_mcu_sender.ino\">#include \"LoRa_E220.h\"\r\n\r\nSoftwareSerial mySerial(4, 5); \/\/ Arduino RX &lt;-- e220 TX, Arduino TX --&gt; e220 RX\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n  Serial.println(\"Hello, starting now. Type in a message.\");\r\n\r\n  e220ttl.begin();\r\n  e220ttl.setMode(MODE_1_WOR_TRANSMITTER);\r\n}\r\n \r\nvoid loop() {\r\n  if (Serial.available()) {\r\n    String input = Serial.readString();\r\n    e220ttl.sendFixedMessage(0,2,18,\"......wake up!!\"); \/\/ wake up call\r\n    e220ttl.setMode(MODE_0_NORMAL); \/\/ change to normal mode\r\n    delay(100); \/\/ give time for the receiver to wake up\r\n    \r\n    while(e220ttl.available()&lt;= 1); \/\/ wait for confirmation\r\n    ResponseContainer rc = e220ttl.receiveMessage(); \/\/ receive message\r\n    rc.status.getResponseDescription(); \r\n    Serial.println(rc.data);\r\n    \r\n    e220ttl.sendFixedMessage(0,2,18,input); \/\/ send the actual message\r\n    e220ttl.setMode(MODE_1_WOR_TRANSMITTER); \/\/ change back to WOR transmitter mode\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>And here is the unsurprising output:<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"541\" height=\"57\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/outputlora_wor_wake_up_mcu_sender-1.png\" alt=\"\" class=\"wp-image-20259\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/outputlora_wor_wake_up_mcu_sender-1.png 541w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/outputlora_wor_wake_up_mcu_sender-1-300x32.png 300w\" sizes=\"auto, (max-width: 541px) 100vw, 541px\" \/><\/figure>\n\n<p>Here too &#8211; apart from the general adjustments &#8211; you must make the setting <code>setMode(MODE_1_WAKE_UP)<\/code> instead of <code>setMode(MODE_1_WOR_TRANSMITTER)<\/code> for the E32 modules. For the E22 modules, set the mode <code>MODE_1_WOR<\/code> in the sketch and define the role as WOR transmitter as a permanent setting.&nbsp;&nbsp;<\/p>\r\n\n<h4 class=\"wp-block-heading\">Receiver Side<\/h4>\n\n<p>The sleep modes of microcontrollers are hardware-specific. I have written an article about the sleep modes of AVR microcontrollers <a href=\"https:\/\/wolles-elektronikkiste.de\/en\/sleep-modes-and-power-management\" target=\"_blank\" rel=\"noopener\">here<\/a>. If you are not using an AVR-based microcontroller board, you will have to adapt the sketch accordingly.<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_wor_wake_up_mcu_receiver.ino\" data-enlighter-title=\"lora_wor_wake_up_mcu_receiver.ino\">#include \"LoRa_E220.h\"\r\n#include &lt;avr\/sleep.h&gt;\r\n\r\n#define AUX_PIN 3\r\n\r\nSoftwareSerial mySerial(4, 5); \/\/ Arduino RX &lt;-- e220 TX, Arduino TX --&gt; e220 RX\r\nLoRa_E220 e220ttl(&amp;mySerial, AUX_PIN, 7, 6); \/\/ AUX M0 M1\r\n\r\nvoid wakeUp() {\r\n  delay(0); \/\/ add code if you want\r\n}\r\n\r\n\r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n\r\n  \/\/ Startup all pins and UART\r\n  e220ttl.begin();\r\n\r\n  e220ttl.setMode(MODE_2_WOR_RECEIVER);\r\n\r\n  Serial.println(\"Start sleep!\");\r\n  delay(100);\r\n  attachInterrupt(digitalPinToInterrupt(AUX_PIN), wakeUp, FALLING);\r\n  set_sleep_mode(SLEEP_MODE_PWR_DOWN); \/\/ define sleep mode\r\n}\r\n \r\n \r\nvoid loop() {\r\n  sleep_mode(); \/\/ set MCU (Arduino Nano) to sleep\r\n  delay(10);\r\n  if (e220ttl.available()&gt;1) {  \/\/ wait for wake up\r\n    ResponseContainer rc = e220ttl.receiveMessage();\r\n    String message = rc.data;\r\n    Serial.println(message);\r\n\r\n    e220ttl.setMode(MODE_0_NORMAL);\r\n    delay(200);\r\n    e220ttl.sendFixedMessage(0, 1, 18, \"Receiver woke up!\");\r\n    delay(100);\r\n    \r\n    while(e220ttl.available()&lt;= 1); \/\/ wait for second message\r\n    rc = e220ttl.receiveMessage();\r\n    message = rc.data;\r\n    Serial.println(message);\r\n    Serial.flush();\r\n    e220ttl.setMode(MODE_2_WOR_RECEIVER);\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>Here is the output:<\/p>\r\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/outputlora_wor_wake_up_mcu_receiver-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"623\" height=\"97\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/outputlora_wor_wake_up_mcu_receiver-1.png\" alt=\"Output lora_wor_wake_up_mcu_receiver.ino\" class=\"wp-image-20261\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/outputlora_wor_wake_up_mcu_receiver-1.png 623w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/outputlora_wor_wake_up_mcu_receiver-1-300x47.png 300w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/a><figcaption class=\"wp-element-caption\">Output lora_wor_wake_up_mcu_receiver.ino<\/figcaption><\/figure>\n\n<p>If you change the WORPeriod, you must change the delays in the sketches so that the interaction works.<\/p>\r\n<p>For E32 modules, among other things, <code>setMode(MODE_2_WOR_RECEIVER)<\/code> must be replaced by <code>setMode(MODE_2_POWER_SAVING)<\/code>. For the E22 modules, set the mode <code>MODE_1_WOR<\/code> in the sketch and define the role as WOR receiver as a permanent setting. <\/p>\r\n\n<h2 class=\"wp-block-heading\" id=\"range_test\">Range Test<\/h2>\n\n<p>I carried out a range test with the E220-900T22D module. According to the data sheet, the range is up to 5 km, but only if there is a clear line of sight between the modules, which is rather rare at this distance.<\/p>\r\n<p>I selected the highest transmission power of 22 dBm (one-off test that exceeds the allowed limits in Germany) and the lowest data rate because this should provide the greatest range. The antenna used was an 868 MHz antenna. The Arduino was supplied with power via a 9 V lithium battery. Measures for voltage stabilization such as additional capacitors were not used.<\/p>\r\n<p>Here is the receiver unit:<\/p>\r\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/distance_test_setup-1024x708.webp\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"708\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/distance_test_setup-1024x708.webp\" alt=\"LoRa E220 range test setup (receiver)\" class=\"wp-image-20594\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/distance_test_setup-1024x708.webp 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/distance_test_setup-300x207.webp 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/distance_test_setup-768x531.webp 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/distance_test_setup-1536x1062.webp 1536w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/distance_test_setup-1320x912.webp 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/distance_test_setup.webp 1700w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">LoRa E220 range test setup (receiver)<\/figcaption><\/figure>\n\n<p>The transmitter has sent a message every 5 seconds:<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_range_test_transmitter.ino\" data-enlighter-title=\"lora_range_test_transmitter.ino\">#include \"LoRa_E220.h\"\r\n\r\nSoftwareSerial mySerial(4, 5); \/\/ Arduino RX &lt;-- e220 TX, Arduino TX --&gt; e220 RX\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  Serial.println(\"Hi, I'm going to send message!\");\r\n \r\n  \/\/ Startup all pins and UART\r\n  e220ttl.begin();\r\n \r\n  \/\/ Send message\r\n  ResponseStatus rs = e220ttl.sendFixedMessage(0,2,18,\"Hi to receiver!\"); \/\/ adjust\r\n  \/\/ Check If there is some problem of successfully send\r\n  Serial.println(rs.getResponseDescription());\r\n  delay(2000);\r\n}\r\n \r\nvoid loop() {\r\n  \/\/ If something available\r\n  static unsigned long lastSend = 0;\r\n  if (millis() - lastSend &gt; 5000) {\r\n    e220ttl.sendFixedMessage(0,2,18, \"Hi Receiver, did you get this message?\");\r\n    lastSend = millis();\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>The receiver has received the message, checked the content and, if correct, briefly illuminated an LED on pin 8 five times.<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_range_test_receiver.ino\" data-enlighter-title=\"lora_range_test_receiver.ino\">#include \"LoRa_E220.h\"\r\n#define LED_PIN 8\r\n\r\nSoftwareSerial mySerial(4, 5); \/\/ Arduino RX &lt;-- e220 TX, Arduino TX --&gt; e220 RX\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  pinMode(LED_PIN, OUTPUT);\r\n  Serial.begin(9600);\r\n  delay(500);\r\n \r\n  Serial.println(\"Hi, waiting for messages!\");\r\n \r\n  \/\/ Startup all pins and UART\r\n  e220ttl.begin();\r\n  delay(2000);\r\n}\r\n \r\nvoid loop() {\r\n  \/\/ If something available\r\n  if (e220ttl.available()&gt;1) {\r\n    ResponseContainer rc = e220ttl.receiveMessage();\r\n    \/\/Serial.println(rc.data);\r\n    if(rc.data = \"Hi Receiver, did you get this message?\"){\r\n      for(int i=0; i&lt;5; i++){\r\n        digitalWrite(LED_PIN, HIGH);\r\n        delay(100);\r\n        digitalWrite(LED_PIN, LOW);\r\n        delay(100);\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<p>The transmitter was placed on my desk at home. I went out into the fields with the receiver unit and checked up to what distance I could receive messages. The radio signal first had to penetrate my own house wall, then a narrow strip of woodland and three or four houses before it crossed the open field. The terrain was flat. This gave me a range of 1.34 km.<\/p>\r\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/range_test-1024x142.webp\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"142\" src=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/range_test-1024x142.webp\" alt=\"Result of the range test\" class=\"wp-image-20600\" srcset=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/range_test-1024x142.webp 1024w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/range_test-300x42.webp 300w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/range_test-768x106.webp 768w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/range_test-1320x183.webp 1320w, https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/range_test.webp 1393w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Result of the range test (measured with Google Maps).<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\" id=\"attachments\">Appendices &#8211; Transceiver Sketches with Settings for E220, E22, E32<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"attachment_1\">Appendix 1 &#8211; E220 Transceiver Sketch with Settings <\/h3>\n\n<p>Sketch with embedded configuration for E220 modules. You can copy the function <code>setConfiguration()<\/code> and use it in other sketches.&nbsp;The sketch was tested with two E220-900T22D modules.<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_e220_fixed_transmission_with setting_options.ino\" data-enlighter-title=\"lora_e220_fixed_transmission_with setting_options.ino\">\/\/ #define FREQUENCY_433 \/\/ default value without set \r\n\/\/ #define FREQUENCY_170\r\n\/\/ #define FREQUENCY_470\r\n#define FREQUENCY_868\r\n\/\/ #define FREQUENCY_915\r\n\/\/ #define E220_22 \/\/ default value without set \r\n\/\/ #define E220_30 \/\/ uncomment in case you use an E220...T30D or E220...T30S\r\n#include \"LoRa_E220.h\"\r\n \r\nSoftwareSerial mySerial(4,5);\r\nLoRa_E220 e220ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n  \r\n  Serial.println(\"Beginning configuration...\");\r\n  e220ttl.begin();\r\n  setConfiguration();\r\n  Serial.println(\"Hi, I'm going to send message!\");\r\n \r\n  ResponseStatus rs = e220ttl.sendBroadcastFixedMessage(18, \"Hello, world?\");\r\n  Serial.println(rs.getResponseDescription());\r\n}\r\n \r\nvoid loop() {\r\n    \/\/ If something available\r\n  if (e220ttl.available()&gt;1) {\r\n      \/\/ read the String message\r\n    ResponseContainer rc = e220ttl.receiveMessage();\r\n    \/\/ Is something goes wrong print error\r\n    if (rc.status.code!=1){\r\n        Serial.println(rc.status.getResponseDescription());\r\n    }else{\r\n        \/\/ Print the data received\r\n        Serial.println(rc.data);\r\n    }\r\n  }\r\n  if (Serial.available()) {\r\n      String input = Serial.readString();\r\n      e220ttl.sendFixedMessage(0, 2, 18, input);\r\n  }\r\n}\r\n\r\nvoid setConfiguration(){\r\n  ResponseStructContainer c;\r\n  c = e220ttl.getConfiguration();\r\n  \/\/ It's important get configuration pointer before all other operation\r\n  Configuration configuration = *(Configuration*) c.data;\r\n  Serial.println(c.status.getResponseDescription());\r\n  Serial.println(c.status.code);\r\n\r\n  configuration.ADDL = 0x03;  \/\/ Low byte of address\r\n  configuration.ADDH = 0x00; \/\/ High byte of address\r\n\r\n  configuration.CHAN = 18; \/\/ Communication channel --&gt; 868 MHz\r\n\r\n  \/*\r\n  UART_BPS_xxx with xxx = Baudrate\r\n  xxx = 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200\r\n  *\/\r\n  configuration.SPED.uartBaudRate = UART_BPS_9600; \/\/ Serial baud rate\r\n\r\n  \/*\r\n  AIR_DATA_RATE_000_24     2.4 kb\/s\r\n  AIR_DATA_RATE_001_24     2.4 kb\/s\r\n  AIR_DATA_RATE_010_24     2.4 kb\/s\r\n  AIR_DATA_RATE_011_48     4.8 kb\/s\r\n  AIR_DATA_RATE_100_96     9.6 kb\/s\r\n  AIR_DATA_RATE_101_192   19.2 kb\/s\r\n  AIR_DATA_RATE_110_384   38.4 kb\/s\r\n  AIR_DATA_RATE_111_625   62.5 kb\/s \r\n  *\/\r\n  configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; \/\/ Air baud rate\r\n  \r\n  \/* \r\n  MODE_00_8N1  none\r\n  MODE_01_8O1  odd\r\n  MODE_10_8E1  even\r\n  MODE_11_8N1  none\r\n  *\/\r\n  configuration.SPED.uartParity = MODE_00_8N1; \/\/ Parity bit\r\n\r\n  \/*\r\n  SPS_200_00  200\r\n  SPS_128_01  128\r\n  SPS_064_10   64\r\n  SPS_032_11   32\r\n  *\/\r\n  configuration.OPTION.subPacketSetting = SPS_200_00; \/\/ Packet size\r\n\r\n  \/*\r\n  RSSI_AMBIENT_NOISE_DISABLED\r\n  RSSI_AMBIENT_NOISE_ENABLED\r\n  *\/\r\n  configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; \/\/ Need to send special command\r\n\r\n  \/*\r\n  POWER_xxx with xxx = power in dBm\r\n  E220...T22D\/S: xxx = 22, 17, 13, 10\r\n  E220...T30D\/S: xxx = 30, 27, 24, 21\r\n  *\/\r\n  configuration.OPTION.transmissionPower = POWER_22; \/\/ Device power\r\n\r\n  \/*\r\n  RSSI_DISABLED\r\n  RSSI_DISABLED\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; \/\/ Enable RSSI info\r\n\r\n  \/*\r\n  FT_FIXED_TRANSMISSION\r\n  FT_TRANSPARENT_RANSMISSION\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION; \/\/ Transmission mode\r\n\r\n  \/*\r\n  LBT_DISABLED\r\n  LBT_ENABLED\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; \/\/ Check interference\r\n\r\n  \/*\r\n  WOR_xxx_yyy with xxx = WOR Period\r\n  xxx_yyy = 500_000, 1000_001, 1500_010, 2000_011, 2500_100, 3000_101, 3500_110, 4000_111\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; \/\/ WOR timing\r\n\r\n  configuration.CRYPT.CRYPT_H = 0x00;  \/\/ encryption high byte, default: 0x00\r\n  configuration.CRYPT.CRYPT_L = 0x00;  \/\/ encryption low byte, default: 0x00\r\n\r\n  \/\/ Set configuration changed and set to hold the configuration\r\n  ResponseStatus rs = e220ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE); \/\/ WRITE_CFG_PWR_DWN_LOSE to not permanently save\r\n\r\n  Serial.println(rs.getResponseDescription());\r\n  Serial.println(rs.code);\r\n  c.close();\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<h3 class=\"wp-block-heading\" id=\"attachment_2\">Appendix 2 &#8211; E22 Transceiver Sketch with Settings<\/h3>\n\n<p>Sketch with embedded configuration for E22 modules. You can copy the function <code>setConfiguration()<\/code> and use it in other sketches. The sketch was tested with two E22-400T22D modules.<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_e22_fixed_transmission_with setting_options.ino\" data-enlighter-title=\"lora_e22_fixed_transmission_with setting_options.ino\">\/\/ #define FREQUENCY_433 \/\/ default value without set \r\n\/\/ #define FREQUENCY_170\r\n\/\/ #define FREQUENCY_470\r\n\/\/ #define FREQUENCY_868\r\n\/\/ #define FREQUENCY_915\r\n\/\/ #define E22_22 \/\/ default value without set \r\n\/\/ #define E22_30 \/\/ uncomment in case you use an E22...T30D or E22...T30S\r\n#include \"LoRa_E22.h\"\r\n \r\nSoftwareSerial mySerial(4,5);\r\nLoRa_E22 e22ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n  \r\n  Serial.println(\"Beginning configuration...\");\r\n  e22ttl.begin();\r\n  setConfiguration();\r\n  Serial.println(\"Hi, I'm going to send message!\");\r\n \r\n  ResponseStatus rs = e22ttl.sendBroadcastFixedMessage(23, \"Hello, world?\");\r\n  Serial.println(rs.getResponseDescription());\r\n}\r\n \r\nvoid loop() {\r\n    \/\/ If something available\r\n  if (e22ttl.available()&gt;1) {\r\n      \/\/ read the String message\r\n    ResponseContainer rc = e22ttl.receiveMessage();\r\n    \/\/ Is something goes wrong print error\r\n    if (rc.status.code!=1){\r\n        Serial.println(rc.status.getResponseDescription());\r\n    }else{\r\n        \/\/ Print the data received\r\n        Serial.println(rc.data);\r\n    }\r\n  }\r\n  if (Serial.available()) {\r\n      String input = Serial.readString();\r\n      e22ttl.sendFixedMessage(0, 2, 23, input);\r\n  }\r\n}\r\n\r\nvoid setConfiguration(){\r\n  ResponseStructContainer c;\r\n  c = e22ttl.getConfiguration();\r\n  \/\/ It's important get configuration pointer before all other operation\r\n  Configuration configuration = *(Configuration*) c.data;\r\n  Serial.println(c.status.getResponseDescription());\r\n  Serial.println(c.status.code);\r\n\r\n  configuration.ADDL = 0x03;  \/\/ Low byte of address\r\n  configuration.ADDH = 0x00; \/\/ High byte of address\r\n  configuration.NETID = 0x00; \/\/ used for repeater function\r\n\r\n  configuration.CHAN = 23; \/\/ Communication channel --&gt; 433 MHz\r\n\r\n  \/*\r\n  UART_BPS_xxx with xxx = Baudrate\r\n  xxx = 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200\r\n  *\/\r\n  configuration.SPED.uartBaudRate = UART_BPS_9600; \/\/ Serial baud rate\r\n\r\n  \/*\r\n  AIR_DATA_RATE_000_03     0.3 kb\/s\r\n  AIR_DATA_RATE_001_12     1.2 kb\/s\r\n  AIR_DATA_RATE_010_24     2.4 kb\/s\r\n  AIR_DATA_RATE_011_48     4.8 kb\/s\r\n  AIR_DATA_RATE_100_96     9.6 kb\/s\r\n  AIR_DATA_RATE_101_192   19.2 kb\/s\r\n  AIR_DATA_RATE_110_384   38.4 kb\/s\r\n  AIR_DATA_RATE_111_625   62.5 kb\/s \r\n  *\/\r\n  configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; \/\/ Air baud rate\r\n  \r\n  \/* \r\n  MODE_00_8N1  none\r\n  MODE_01_8O1  odd\r\n  MODE_10_8E1  even\r\n  MODE_11_8N1  none\r\n  *\/\r\n  configuration.SPED.uartParity = MODE_00_8N1; \/\/ Parity bit\r\n\r\n  \/*\r\n  SPS_240_00  200\r\n  SPS_128_01  128\r\n  SPS_064_10   64\r\n  SPS_032_11   32\r\n  *\/\r\n  configuration.OPTION.subPacketSetting = SPS_240_00; \/\/ Packet size\r\n\r\n  \/*\r\n  RSSI_AMBIENT_NOISE_DISABLED\r\n  RSSI_AMBIENT_NOISE_ENABLED\r\n  *\/\r\n  configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; \/\/ Need to send special command\r\n\r\n  \/*\r\n  POWER_xxx with xxx = power in dBm\r\n  E22...T22D\/S: xxx = 22, 17, 13, 10\r\n  E22...T30D\/S: xxx = 30, 27, 24, 21\r\n  *\/\r\n  configuration.OPTION.transmissionPower = POWER_22; \/\/ Device power\r\n\r\n  \/*\r\n  RSSI_DISABLED\r\n  RSSI_DISABLED\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; \/\/ Enable RSSI info\r\n\r\n  \/*\r\n  FT_FIXED_TRANSMISSION\r\n  FT_TRANSPARENT_RANSMISSION\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION; \/\/ Transmission mode\r\n\r\n  \/*  In the repeater mode, ADDH\/ADDL is no longer used as the module address, it is used as a NETID \r\n  to pair and forwarding. If the reperater receive the data from a network, then it will forward the \r\n  data to the other network. The network ID of the repeater itself is invalid in this case.\r\n  The repeater module cannot transmit and receive data, and cannot perform low-power operation.\r\n  REPEATER_ENABLED \r\n  REPEATER_DISABLED\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED;\r\n\r\n  \/*\r\n  LBT_DISABLED\r\n  LBT_ENABLED\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; \/\/ Check interference\r\n\r\n  \/*\r\n  WOR_TRANSMITTER\r\n  WOR_RECEIVER\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER;\r\n\r\n  \/*\r\n  WOR_xxx_yyy with xxx = WOR Period in ms\r\n  xxx_yyy = 500_000, 1000_001, 1500_010, 2000_011, 2500_100, 3000_101, 3500_110, 4000_111\r\n  *\/\r\n  configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; \/\/ WOR timing\r\n\r\n  configuration.CRYPT.CRYPT_H = 0x00;  \/\/ encryption high byte, default: 0x00\r\n  configuration.CRYPT.CRYPT_L = 0x00;  \/\/ encryption low byte, default: 0x00\r\n\r\n  \/\/ Set configuration changed and set to not hold the configuration\r\n  ResponseStatus rs = e22ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE); \/\/ WRITE_CFG_PWR_DWN_LOSE to not permanently save\r\n\r\n  Serial.println(rs.getResponseDescription());\r\n  Serial.println(rs.code);\r\n  c.close();\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<h3 class=\"wp-block-heading\" id=\"attachment_3\">Appendix 3 &#8211; E32 Transceiver Sketch with Settings<\/h3>\n\n<p>Sketch with embedded configuration for E32 modules. You can copy the function <code>setConfiguration()<\/code> and use it in other sketches.&nbsp; The sketch was tested with two E220-900T22D modules.<\/p>\r\n\n<div class=\"scroll-paragraph\">\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-group=\"lora_e32_fixed_transmission_with setting_options.ino\" data-enlighter-title=\"lora_e32_fixed_transmission_with setting_options.ino\">\/\/ #define FREQUENCY_433 \/\/ default value without set \r\n\/\/ #define FREQUENCY_170\r\n\/\/ #define FREQUENCY_470\r\n\/\/ #define FREQUENCY_868\r\n\/\/ #define FREQUENCY_915\/* Choose your module *\/\r\n\/\/ #define E32_TTL_100 \r\n\/\/ #define E32_TTL_500 \r\n#define E32_TTL_1W \/\/ E32-TTL-1W, E32-433T30S\/D, E32-868T30S\/D, E32-915T30S\/D\r\n\/\/ #define E32_TTL_2W\r\n#include \"LoRa_E32.h\"\r\n \r\nSoftwareSerial mySerial(4,5);\r\nLoRa_E32 e32ttl(&amp;mySerial, 3, 7, 6); \/\/ AUX M0 M1\r\n \r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  delay(500);\r\n  \r\n  Serial.println(\"Beginning configuration...\");\r\n  e32ttl.begin();\r\n  setConfiguration();\r\n  Serial.println(\"Hi, I'm going to send message!\");\r\n \r\n  ResponseStatus rs = e32ttl.sendBroadcastFixedMessage(23, \"Hello, world?\");\r\n  Serial.println(rs.getResponseDescription());\r\n}\r\n \r\nvoid loop() {\r\n    \/\/ If something available\r\n  if (e32ttl.available()&gt;1) {\r\n      \/\/ read the String message\r\n    ResponseContainer rc = e32ttl.receiveMessage();\r\n    \/\/ Is something goes wrong print error\r\n    if (rc.status.code!=1){\r\n        Serial.println(rc.status.getResponseDescription());\r\n    }else{\r\n        \/\/ Print the data received\r\n        Serial.println(rc.data);\r\n    }\r\n  }\r\n  if (Serial.available()) {\r\n      String input = Serial.readString();\r\n      e32ttl.sendFixedMessage(0, 2, 23, input);\r\n  }\r\n}\r\n\r\nvoid setConfiguration(){\r\n  ResponseStructContainer c;\r\n  c = e32ttl.getConfiguration();\r\n  \/\/ It's important get configuration pointer before all other operation\r\n  Configuration configuration = *(Configuration*) c.data;\r\n  Serial.println(c.status.getResponseDescription());\r\n  Serial.println(c.status.code);\r\n\r\n  configuration.ADDL = 0x03;  \/\/ Low byte of address\r\n  configuration.ADDH = 0x00; \/\/ High byte of address\r\n\r\n  configuration.CHAN = 23; \/\/ Communication channel --&gt; 433 MHz\r\n\r\n  \/* After turning off FEC, the actual data transmission rate increases \r\n  while anti-interference ability decreases. Also, the transmission distance is relatively short, and both communication parties must keep on the same pages about turn-on or turn-off FEC.\r\n  FEC_0_OFF\r\n  FEC_1_ON\r\n  *\/\r\n  configuration.OPTION.fec = FEC_1_ON;\r\n\r\n  \/*\r\n  FT_FIXED_TRANSMISSION\r\n  FT_TRANSPARENT_RANSMISSION\r\n  *\/\r\n  configuration.OPTION.fixedTransmission = FT_FIXED_TRANSMISSION; \/\/ Transmission mode\r\n  \r\n  \/* Using internal pull-up resistors may make external redundant \r\n  IO_D_MODE_OPEN_COLLECTOR\r\n  IO_D_MODE_PUSH_PULLS_PULL_UPS\r\n  *\/\r\n  configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS;\r\n\r\n  \/* for E32_TTL_1W\r\n  POWER_xxx with xxx = power in dBm\r\n  E32_TTL_100: xxx = 20, 17, 14, 10\r\n  E32_TTL_500: xxx = 27, 24, 21, 18\r\n  E32_TTL_1W : xxx = 30, 27, 24, 21\r\n  E32_TTL_2W : xxx = 33, 30, 27, 24\r\n  *\/\r\n  configuration.OPTION.transmissionPower = POWER_30; \/\/ Device power\r\n\r\n  \/* WOR period is called WAKE_UP time here\r\n  WAKE_UP_xxx with xxx = Wake-Up Period\r\n  xxx = 250, 500. 750, 1000, 1250, 1500, 1750, 2000\r\n  *\/\r\n  configuration.OPTION.wirelessWakeupTime = WAKE_UP_1250; \r\n\r\n  \/*\r\n  AIR_DATA_RATE_000_03     0.3 kb\/s\r\n  AIR_DATA_RATE_001_12     1.2 kb\/s\r\n  AIR_DATA_RATE_010_24     2.4 kb\/s\r\n  AIR_DATA_RATE_011_48     4.8 kb\/s\r\n  AIR_DATA_RATE_100_96     9.6 kb\/s\r\n  AIR_DATA_RATE_101_192   19.2 kb\/s\r\n  AIR_DATA_RATE_110_192   19.2 kb\/s\r\n  AIR_DATA_RATE_111_192   19.2 kb\/s \r\n  *\/\r\n  configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; \/\/ Air baud rate\r\n\r\n  \/*\r\n  UART_BPS_RATE_xxx with xxx = Baudrate\r\n  xxx = 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200\r\n  *\/\r\n  configuration.SPED.uartBaudRate = UART_BPS_9600; \/\/ Serial baud rate\r\n\r\n  \/\/ Set configuration changed and set to hold the configuration\r\n  ResponseStatus rs = e32ttl.setConfiguration(configuration, WRITE_CFG_PWR_DWN_SAVE); \/\/ WRITE_CFG_PWR_DWN_LOSE to not save permanently\r\n\r\n  Serial.println(rs.getResponseDescription());\r\n  Serial.println(rs.code);\r\n  c.close();\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n<\/div>\r\n\n<h2 class=\"wp-block-heading\">Acknowledgement<\/h2>\n\n<p>I would like to thank <a href=\"https:\/\/mischianti.org\/\" target=\"_blank\" rel=\"noopener\">Renzo Mischianti<\/a> for the wonderful libraries and the detailed tutorials.<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>With the Ebyte LoRa modules from the E220, E20 and E32 series, you can send data over long distances with low energy consumption. An overview and introduction. <\/p>\n","protected":false},"author":1,"featured_media":20289,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[545,548],"tags":[556,2423,2429,2428,2430,2426,2436,2431,2435,2425,2424,2427,564,2434,861,2433,2432,2438,2437],"class_list":["post-20804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-433-mhz-en","category-wireless","tag-arduino-en-2","tag-circuit-en-2","tag-e22-en","tag-e220-en","tag-e32-en","tag-ebyte-en","tag-fec-en","tag-fixed-transmission-en","tag-lbt-en","tag-long-range-en","tag-lora-en","tag-lpwan-en","tag-range-en","tag-rssi-en","tag-settings-2","tag-structures","tag-transparent-transmission-en","tag-wake-on-radio-en","tag-wor-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using LoRa with the EByte E220, E22 and E32 series &#8226; Wolles Elektronikkiste<\/title>\n<meta name=\"description\" content=\"With the Ebyte LoRa modules from the E220, E20 and E32 series, you can send data over long distances with low energy consumption. An overview and introduction.\" \/>\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\/using-lora-with-the-ebyte-e220-e22-and-e32-series\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using LoRa with the EByte E220, E22 and E32 series &#8226; Wolles Elektronikkiste\" \/>\n<meta property=\"og:description\" content=\"With the Ebyte LoRa modules from the E220, E20 and E32 series, you can send data over long distances with low energy consumption. An overview and introduction.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series\" \/>\n<meta property=\"og:site_name\" content=\"Wolles Elektronikkiste\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-23T10:38:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-10T17:00:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_e220_post_image-1.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1120\" \/>\n\t<meta property=\"og:image:height\" content=\"1120\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\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=\"42 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series\"},\"author\":{\"name\":\"Wolfgang Ewald\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"headline\":\"Using LoRa with the EByte E220, E22 and E32 series\",\"datePublished\":\"2024-03-23T10:38:21+00:00\",\"dateModified\":\"2024-12-10T17:00:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series\"},\"wordCount\":4636,\"commentCount\":35,\"publisher\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#\\\/schema\\\/person\\\/b774e4d64b4766889a2f7c6e5ec85b46\"},\"image\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/lora_e220_post_image-1.webp\",\"keywords\":[\"Arduino\",\"circuit\",\"E22\",\"E220\",\"E32\",\"Ebyte\",\"FEC\",\"Fixed Transmission\",\"LBT\",\"Long Range\",\"LoRa\",\"LPWAN\",\"Range\",\"RSSI\",\"settings\",\"Structures\",\"Transparent transmission\",\"Wake on Radio\",\"WOR\"],\"articleSection\":[\"433 MHz\",\"Wireless\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series\",\"name\":\"Using LoRa with the EByte E220, E22 and E32 series &#8226; Wolles Elektronikkiste\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/lora_e220_post_image-1.webp\",\"datePublished\":\"2024-03-23T10:38:21+00:00\",\"dateModified\":\"2024-12-10T17:00:54+00:00\",\"description\":\"With the Ebyte LoRa modules from the E220, E20 and E32 series, you can send data over long distances with low energy consumption. An overview and introduction.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series#primaryimage\",\"url\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/lora_e220_post_image-1.webp\",\"contentUrl\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/lora_e220_post_image-1.webp\",\"width\":1120,\"height\":1120},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\\\/using-lora-with-the-ebyte-e220-e22-and-e32-series#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/wolles-elektronikkiste.de\\\/en\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using LoRa with the EByte E220, E22 and E32 series\"}]},{\"@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":"Using LoRa with the EByte E220, E22 and E32 series &#8226; Wolles Elektronikkiste","description":"With the Ebyte LoRa modules from the E220, E20 and E32 series, you can send data over long distances with low energy consumption. An overview and introduction.","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\/using-lora-with-the-ebyte-e220-e22-and-e32-series","og_locale":"en_US","og_type":"article","og_title":"Using LoRa with the EByte E220, E22 and E32 series &#8226; Wolles Elektronikkiste","og_description":"With the Ebyte LoRa modules from the E220, E20 and E32 series, you can send data over long distances with low energy consumption. An overview and introduction.","og_url":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series","og_site_name":"Wolles Elektronikkiste","article_published_time":"2024-03-23T10:38:21+00:00","article_modified_time":"2024-12-10T17:00:54+00:00","og_image":[{"width":1120,"height":1120,"url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_e220_post_image-1.webp","type":"image\/webp"}],"author":"Wolfgang Ewald","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Wolfgang Ewald","Est. reading time":"42 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#article","isPartOf":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series"},"author":{"name":"Wolfgang Ewald","@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"headline":"Using LoRa with the EByte E220, E22 and E32 series","datePublished":"2024-03-23T10:38:21+00:00","dateModified":"2024-12-10T17:00:54+00:00","mainEntityOfPage":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series"},"wordCount":4636,"commentCount":35,"publisher":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#\/schema\/person\/b774e4d64b4766889a2f7c6e5ec85b46"},"image":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#primaryimage"},"thumbnailUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_e220_post_image-1.webp","keywords":["Arduino","circuit","E22","E220","E32","Ebyte","FEC","Fixed Transmission","LBT","Long Range","LoRa","LPWAN","Range","RSSI","settings","Structures","Transparent transmission","Wake on Radio","WOR"],"articleSection":["433 MHz","Wireless"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series","url":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series","name":"Using LoRa with the EByte E220, E22 and E32 series &#8226; Wolles Elektronikkiste","isPartOf":{"@id":"https:\/\/wolles-elektronikkiste.de\/en#website"},"primaryImageOfPage":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#primaryimage"},"image":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#primaryimage"},"thumbnailUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_e220_post_image-1.webp","datePublished":"2024-03-23T10:38:21+00:00","dateModified":"2024-12-10T17:00:54+00:00","description":"With the Ebyte LoRa modules from the E220, E20 and E32 series, you can send data over long distances with low energy consumption. An overview and introduction.","breadcrumb":{"@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#primaryimage","url":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_e220_post_image-1.webp","contentUrl":"https:\/\/wolles-elektronikkiste.de\/wp-content\/uploads\/2024\/03\/lora_e220_post_image-1.webp","width":1120,"height":1120},{"@type":"BreadcrumbList","@id":"https:\/\/wolles-elektronikkiste.de\/en\/using-lora-with-the-ebyte-e220-e22-and-e32-series#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/wolles-elektronikkiste.de\/en"},{"@type":"ListItem","position":2,"name":"Using LoRa with the EByte E220, E22 and E32 series"}]},{"@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\/20804","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=20804"}],"version-history":[{"count":2,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/20804\/revisions"}],"predecessor-version":[{"id":22962,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/posts\/20804\/revisions\/22962"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/media\/20289"}],"wp:attachment":[{"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/media?parent=20804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/categories?post=20804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wolles-elektronikkiste.de\/en\/wp-json\/wp\/v2\/tags?post=20804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}