Introduction: ESP32 and Radio Lora 10x More Powerful!
Can you imagine a 1W Radio LoRa that is 10 times more powerful than the traditional 0.1W ones? Well today I’ll introduce you to the E44-TTL-1W module, which is exactly this. This model has a transistor in the output that amplifies its signal, extending its reach. We will configure this module for use with an MCU or PC, and create an example of communication between the computer and an ESP32.
However, it’s important to note that power isn’t everything, folks. A friend told me that with his 500 milliwatt amateur radio, he could reach in Japan. Power helps of course, but it’s not everything.
Step 1: E44-TTL-1W
The E44-TTL-1W is a 1W wireless transceiver module with LoRa spectral scattering technology. It operates at 900 ~ 931MHz, and is based on the RFIC SX1276, which is imported, an original Semtech, with available transparent transmission, and at the TTL level.
The advantages of these modules are that they are more concentrated on power density and feature better anti-interference performance.
The module has the function of encryption and data compression.
The data compression function decreases the transmission time and the probability of interference, while improving transmission reliability and efficiency.
This module is TX RX, basically. It has control and power pins, but it is turned on in the UART. We can say that this model drastically simplifies communication with LoRa.
One detail is that it is not LoRaWAN within the chip, but instead, a proprietary LoRa protocol from YBT.
In the image below, we can see a STM8L151G that uses little current, as well as the famous SX1276.
Step 2: E15-USB-T2 V1.2
We have the module on the left side of the image, which visually looks like a flash drive. It will be connected to the computer. On the right, we have the schematic that shows each pin of this device.
Step 3: Characteristics
1. LoRa
High-reliability. Extremely low possibility of being intercepted.
2. Ultra-low power consumption
It supports WOR (wake on radio) to reduce overall power consumption.
3. Fixed transmission
The module can communicate with other modules working on different channels and addresses.
4. Broadcast transmission
Setting the module address to 0xFFFF enables communication with other modules on the same channel.
5. Forward Error Correction (FEC)
In the event of sudden interference, it is possible to correct the interfering data packets proactively, so that the reliability and bandwidth are improved.
6. Sleep Mode
When the module works in sleep mode (mode 3), it is available for configuration, but not for transmitting and receiving. (6μA)
Watchdog
It has an integrated watchdog. When an exception occurs, the module will restart after 0.107 seconds and continue working in-accordance to the previous parameters.
8. Parameter saving
The parameters will be saved after setup and will not be reset when off.
Step 4: Pin Definition
Step 5: Modes of Operation
Step 6: Configuration
To enter configuration mode, we need to place the E15-USB module with the pins indicating Sleep mode. To do this, disconnect the indicator jumpers from pins M0 and M1, as shown in the image below.
Download the RF Setting program through the link below:
In image we see the configuration screen using the RF Setting program
Step 7: We Will Now See How to Configure Our Module:
1. Open the RF Setting program.
2. Select the COM port corresponding to the module.
3. Click OpenPort to gain access.
4. Now click GetParam to get the parameters saved in the module.
5. Modify the parameters according to your needs. (Main: UartRate, Address, and Channel)
6. After modifying the parameters, click SetParam. The data is now saved in the module.
7. Click ClosePort to end the configuration with the module.
If you want to reset the default settings, just click on Preset.
Step 8: How to Use
After the settings are completed, we can now use our E44-TTL-1W module for communication with either a MCU (microcontroller) or a PC.
To use the PC, simply connect the E44-TTL-1W module to the E15-USB module, as shown below.
Step 9: On a PC
Remember that for use in the computer, we configure the mode through the pins of the E15-USB module. The figure below shows how to connect / disconnect the jumpers for each mode.
Step 10: On an MCU
To use with a microcontroller, just make the connections shown on the figure.
Step 11: Example
We will now show an example of how to control the LEDs and a Buzzer of an ESP32 through the computer. The commands will be sent by a terminal, and the ESP32 will receive them through the radio LoRa.
Step 12: Operation
The PC sends data through the Serial to the module, which transforms that data into radio frequency LoRa, and then sends it. The module receives the data via radio and sends it to the ESP32 via the Serial.
Step 13: Settings
The two E44-TTL modules must be configured as shown in the image.
Step 14: On a PC
After connecting the E44-TTL-1W module to the E15-USB module, place it in the computer and use A terminal for Serial communication. For example, the termite.
Step 15: In ESP32
We will create a program that will check the commands to control the LEDs or the buzzer when receiving data from the LoRa radio.
Step 16: Library
Add library "TM1637Display".
Access the link and download the library.
Unzip the file and paste it into the libraries folder of the Arduino IDE.
C: / Program Files (x86) / Arduino / libraries
Step 17: COMMANDS
For this project, I created the following command protocol for control:
Step 18: In ESP32
We include the library responsible for communication with the display and initialize the display on the pins we define.
//Biblioteca responsável para comunicação com o display de 7 segmentos
#include <TM1637Display.h> // Module connection pins (Digital Pins) #define CLK 14 #define DIO 13 const uint8_t PIN_BUZZER = 23; const uint8_t PIN_LED1 = 22; const uint8_t PIN_LED2 = 21; const uint8_t PIN_LED3 = 19; const uint8_t PIN_LED4 = 18; //Inicializa o display nos pinos definidos acima TM1637Display display(CLK, DIO); String data = ""; int counterReceive = 0; String idMCU = "MCU_1";
In Setup, we set the brightness of the display, and move on to the Loop.
void setup() {
Serial.begin(9600); //configura o brilho do display com valor máximo display.setBrightness(0x07); display.showNumberDec(0); configurePins(); } void loop() { if(Serial.available()) { while(Serial.available()) { data+=(char)Serial.read(); } data.replace("\n",""); if(data.equals("CHECK")) { Serial.println(idMCU+" OK"); counterReceive++; //imprime no display o valor lido display.showNumberDec(counterReceive); } else { parserData(); counterReceive++; //imprime no display o valor lido display.showNumberDec(counterReceive); } data = ""; } }
Step 19: ParserData
In this step, we proceed with the parser of the received data and verify the commands related to the LED and the Buzzer.
//faz o parser dos dados recebidos para identificar o comando
void parserData() { char command = data[0]; // Serial.print(command); if(command == 'L') { uint8_t led = data[1]-'0'; uint8_t value = data[2]-'0'; configureLed(led, value); } else if(command == 'B') { uint8_t value = data[1]-'0'; digitalWrite(PIN_BUZZER, value); } else if(command == 'A') { uint8_t value = data[1]-'0'; allLeds(value); } }
Step 20: ConfigureLED
Set the connection or disconnection of the LED according to the value passed.
void configureLed(uint8_t led, uint8_t value)
{ switch(led) { case 1: digitalWrite(PIN_LED1, value); break; case 2: digitalWrite(PIN_LED2, value); break; case 3: digitalWrite(PIN_LED3, value); break; case 4: digitalWrite(PIN_LED4, value); break; default: break; } }
Step 21: AllLeds & ConfigurePins
With AllLeds, we will set the value passed to all the LEDs at once. Also, we will set the mode of the pins as output.
void allLeds(uint8_t value)
{ digitalWrite(PIN_LED1, value); digitalWrite(PIN_LED2, value); digitalWrite(PIN_LED3, value); digitalWrite(PIN_LED4, value); } void configurePins() { pinMode(PIN_BUZZER, OUTPUT); pinMode(PIN_LED1, OUTPUT); pinMode(PIN_LED2, OUTPUT); pinMode(PIN_LED3, OUTPUT); pinMode(PIN_LED4, OUTPUT); }