Usage Example for ESP32-LoRa Wireless Transmission
Last revision 2026/01/06
This article provides a detailed walkthrough on setting up ESP32 and LoRa for wireless transmission, covering necessary hardware and software preparations, wiring diagrams, pin configurations, and includes sample codes for both master and slave programs to facilitate effective communication between two ESP32 boards.
Hardware Preparation
- FireBeetle ESP32 IoT Microcontroller(SKU: DFR0478) ×2
- LoRa Radio 915MHz - FireBeetle Covers(SKU: TEL0122) ×2
- USB Cable ×2
- Dupont Wires
Software Preparation
- Download Arduino IDE: Click to download Arduino IDE.
- Download and install the DFRobot_Lora
- For Arduino IDE V1.8.19 (or earlier), install the library manually: How to Add a Library?
Wiring Diagram

Connection:
- Joint ESP32 board and LoRa module together.
- Connect ESP32 board to PC via USB line.
Other Preparation Work
Pin Connection Configuration Guide
| Item | Details |
|---|---|
| Default Pin Connections | CS Pin → D4, RESET Pin → D2 |
| Custom Pin Assignment Method | Modify the program and specify other IO interfaces by passing parameters to the initialization function |
| Initialization Function Prototype | init(uint8_t NSSPin = NSS_PIN, uint8_t NRESETPin = RESET_PIN) |
Supplementary Notes:
NSSPin/NRESETPin: Function input parameters for specifying custom CS/RESET pins.NSS_PIN/RESET_PIN: Default macro definitions corresponding to the default pins D4/D2.
Sample Code
Download the master program and the slave program to two ESP32 board respectively.
The Slave program code: LoRa module receives data, prints data/RSSI and toggles onboard LED.
/*!
* @file receiverTest.ino
* @brief DFRobot's received data
* @n [Get the module here]
* @n This example is receive.
* @n [Connection and Diagram]
*
* @copyright [DFRobot](https://www.dfrobot.com), 2016
* @copyright GNU Lesser General Public License
*
* @author [yangyang]
* @version V1.0
* @date 2017-04-10
*/
#include <DFRobot_LoRa.h>
DFRobot_LoRa lora;
uint8_t len;
uint8_t rxBuf[32];
void setup()
{
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
Serial.println("Receiver Test");
while(!lora.init()) {
Serial.println("Starting LoRa failed!");
delay(100);
}
lora.rxInit();
}
void loop()
{
if(lora.waitIrq()) { // wait for RXDONE interrupt
lora.clearIRQFlags();
len = lora.receivePackage(rxBuf); // receive data
Serial.write(rxBuf, len);
Serial.println();
lora.rxInit(); // wait for packet from master
// print RSSI of packet
Serial.print("with RSSI ");
Serial.println(lora.readRSSI());
static uint8_t i;
i = ~i;
digitalWrite(LED_BUILTIN, i);
}
}
The Master program code: LoRa module sends specified data cyclically, counts and prints send times.
/*!
* @file sendTest.ino
* @brief DFRobot's send data
* @n [Get the module here]
* @n This example is send.
* @n [Connection and Diagram]
*
* @copyright [DFRobot](https://www.dfrobot.com), 2016
* @copyright GNU Lesser General Public License
*
* @author [yangyang]
* @version V1.0
* @date 2017-04-10
*/
#include <DFRobot_LoRa.h>
DFRobot_LoRa lora;
uint8_t counter = 0;
uint8_t sendBuf[] = "HelloWorld!";
/* The default pin:
* SS:D4
* RST:D2 (If you are using the FireBeetle Board-ESP8266 motherboard controller, the RST defaults to D3)
*/
void setup()
{
Serial.begin(115200);
while(!lora.init()) {
Serial.println("Starting LoRa failed!");
delay(100);
}
}
void loop()
{
Serial.print("Sending packet: ");
Serial.println(counter);
// send packet
lora.sendPackage(sendBuf, 11); // sending data
lora.idle(); // turn to standby mode
counter++;
#if 0
if(counter%10 == 0) {
lora.sleep();
delay (5000);// sleep 5 seconds
}
#endif
delay(500);
}
Results
Two ESP32 motherboards successfully communicate and receive data.


Was this article helpful?
