/lora

Low-level Lora (SX127_) library for the ESP-32 IDF

Primary LanguageC

esp32-lora-library

This is an adapted version of the "esp32-lora-library" repository which allows it to be directly cloned to the components/ directory of a project. It can also be added as a git submodule.

What is it

esp32-lora-library is a C component to be integrated into ESP32-IDF for sending and receiving data through a LoRa transceiver based on Semtech's SX127_ ICs.

The library itself is based on sandeepmistry's arduino-LoRa (https://github.com/sandeepmistry/arduino-LoRa) library for Arduino.

How to install

Simply clone the repository and copy the components/lora lora directory into your ESP-IDF project directory or into the components/ path of your $IDF_PATH (it will be public to all your projects). You can then simply #include "lora.h" and use its functions. Using make menuconfig there will be LoRa Options to configure (like pin numbers)

git clone https://github.com/Inteform/esp32-lora-library
cp -r esp32-lora-library/ /path/to/my/esp32/project/components
cd /path/to/my/esp32/project
make menuconfig
make
#etc

Basic usage

A simple sender program...

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "lora.h"

void task_tx(void *p)
{
   for(;;) {
      vTaskDelay(pdMS_TO_TICKS(5000));
      lora_send_packet((uint8_t*)"Hello", 5);
      printf("packet sent...\n");
   }
}

void app_main()
{
   lora_init();
   lora_set_frequency(915e6);
   lora_enable_crc();
   xTaskCreate(&task_tx, "task_tx", 2048, NULL, 5, NULL);
}

Meanwhile in the receiver program...

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "lora.h"

uint8_t but[32];

void task_rx(void *p)
{
   int x;
   for(;;) {
      lora_receive();    // put into receive mode
      while(lora_received()) {
         x = lora_receive_packet(buf, sizeof(buf));
         buf[x] = 0;
         printf("Received: %s\n", buf);
         lora_receive();
      }
      vTaskDelay(1);
   }
}

void app_main()
{
   lora_init();
   lora_set_frequency(915e6);
   lora_enable_crc();
   xTaskCreate(&task_rx, "task_rx", 2048, NULL, 5, NULL);
}

Connection with the RF module

By default, the pins used to control the RF transceiver are--

Pin Signal
CS IO15
RST IO32
MISO IO13
MOSI IO12
SCK IO14

but you can reconfigure the pins using make menuconfig and changing the options in the "Component options -> LoRa Options"