Стандартные примеры

Здесь показаны и подробно разобраны все примеры скетчей из поставки библиотеки ELABORY-SX1262. Эти скетчи наглядно демонстрируют основные приёмы и методы работы с библиотекой и передачи данных по LoRa каналу связи.

Скетч sx1262_info

Пример, который выводит в Serial все текущие настройки чипа SX1262. Может использоваться для получения текущей конфигурации подсистемы LoRa контроллера и как пример использования соответствующих функций библиотеки.

/*
  ELABORY_SX1262 Library
  Info example
*/

#include 

ElaborySx1262 radio;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start SX1262 Info example..."));

  if (!radio.begin()) { 
    Serial.println(F("LoRa error"));
    while (true);
  }

  printLoraInfo();
}

void printLoraInfo() {
  Serial.print(F("Frequency:           ")); Serial.println(radio.getFrequency());
  Serial.print(F("Power:               ")); Serial.println(radio.getPower());
  Serial.print(F("Bandwidth:           ")); Serial.println(radio.getSignalBandwidth());
  Serial.print(F("CodingRate:          ")); Serial.println(radio.getCodingRate4());
  Serial.print(F("SpreadingFactor:     ")); Serial.println(radio.getSpreadingFactor());
  Serial.print(F("LowDataRateOptimize: ")); Serial.println(radio.getLowDataRateOptimize());
  Serial.print(F("TransmitTimeout:     ")); Serial.println(radio.getTransmitTimeout());
  Serial.print(F("PreambleLength:      ")); Serial.println(radio.getPreambleLength());
  Serial.print(F("CRC:                 ")); Serial.println(radio.getCrc());
  Serial.print(F("IQ:                  ")); Serial.println(radio.getIq());
  Serial.print(F("Gain:                ")); Serial.println(radio.getGain());
  Serial.print(F("OCP:                 ")); Serial.println(radio.getOCP());
  Serial.println();
}

void loop() {

}

Скетч sx1262_parameters

Пример, который демонстрирует приёмы изменения параметров чипа SX1262 и работу соответствующих функций. Показано изменение текущих настроек SPI интерфейса, установка номеров управляющих GPIO контроллера, установка мощности передатчика и SpreadingFactor. Затем проверяется корректность внесённых изменений путём вывода текущих настроек в Serial.

/*
  ELABORY_SX1262 Library
  Set Parameters example
*/

#include 

ElaborySx1262 radio;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start SX1262 Set Parameters example..."));

  // SPI interface settings
  radio.setSPI(SPI);
  radio.setSPIFrequency(8E6); // 8 MHz

  // Set LoRa module pins (default 10, 9, 2)
  radio.setPins(10, 9, 2); // nss, reset, dio1

  if (!radio.begin(868E6)) { // default 868 MHz
    Serial.println(F("LoRa error"));
    while (true);
  }

  // Examples LoRa settings (see Library documentation)
  radio.setTxPower(10);        // 0-22
  radio.setSpreadingFactor(5); // 5-12

  printLoraInfo();
}

void printLoraInfo() {
  Serial.print(F("Power:           ")); Serial.println(radio.getPower());
  Serial.print(F("SpreadingFactor: ")); Serial.println(radio.getSpreadingFactor());
  Serial.println();
}

void loop() {

}

Скетч sx1262_presets

Пример сначала демонстрирует LoRa настройки по умолчанию, затем устанавливает пресет для быстрой связи PRESET_FAST и затем снова выводит в сериал подробную информацию по всем текущим настройкам. В результате можно наглядно увидеть все внесённые изменения.

/*
  ELABORY_SX1262 Library
  Presets example
*/

#include 

ElaborySx1262 radio;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start SX1262 Presets example..."));

  if (!radio.begin()) { 
    Serial.println(F("LoRa error"));
    while (true);
  }
  Serial.println();
  Serial.println(F("Default Preset parameters:"));
  Serial.println(F("-------------------------"));
  printLoraInfo();
  
  Serial.println(F("Set Preset FAST:"));
  Serial.println(F("---------------"));
  radio.setPreset(PRESET_FAST);
  printLoraInfo();
}

void printLoraInfo() {
  Serial.print(F("Bandwidth:           ")); Serial.println(radio.getSignalBandwidth());
  Serial.print(F("CodingRate:          ")); Serial.println(radio.getCodingRate4());
  Serial.print(F("SpreadingFactor:     ")); Serial.println(radio.getSpreadingFactor());
  Serial.print(F("LowDataRateOptimize: ")); Serial.println(radio.getLowDataRateOptimize());
  Serial.print(F("TransmitTimeout:     ")); Serial.println(radio.getTransmitTimeout());
  Serial.println();
}

void loop() {

}

Скетч sx1262_receive

Универсальный тестовый скетч для демонстрации приёма LoRa пакетов. Принимает пришедшие пакеты, выводит принятые данные в Serial и демонстрирует качественные показатели приёма беспроводных сигналов (RSSI, SNR и т. д.).

/*
  ELABORY_SX1262 Library
  Receive example
*/

#include 

byte buff[255];
ElaborySx1262 radio;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start SX1262 Receive example..."));

  if (!radio.begin()) { 
    Serial.println(F("LoRa error"));
    while (true);
  }
}

void printQuality() {
  Serial.print(F(" (rssi:")); Serial.print(radio.packetRssi());
  Serial.print(F(" snr:"));   Serial.print(radio.packetSnr());
  Serial.print(F(" sr:"));    Serial.print(radio.rssi());
  Serial.print(F(")"));
}

void receiveData() {
  int bytesRead = radio.receive(buff, sizeof(buff));
  if (bytesRead > -1) {
    for (byte i = 0; i < bytesRead; i++) {
      Serial.print(' ');
      Serial.print(buff[i]);
    }

    Serial.print(' ');
    for (byte i = 0; i < bytesRead; i++) {Serial.write(buff[i]);}
    printQuality();
    Serial.println();
  }
}

void loop() {
  receiveData();
}

Скетч sx1262_transmit_array

Тестовый скетч, который демонстрирует приёмы и методы передачи по LoRa каналу байтовых массивов. Фактически, это основной и наиболее часто используемый метод передачи LoRa данных.

/*
  ELABORY_SX1262 Library
  Transmit Array example
*/

#include 

byte arr[] = {0, 1, 2, 30, 40, 50, 160, 170, 180, 253, 254, 255};

ElaborySx1262 radio;

unsigned long packets = 0;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start SX1262 Transmit Array example..."));

  if (!radio.begin()) {
    Serial.println(F("LoRa error"));
    while (true);
  }
}

void transmitArray(byte ar[], int len) {
  radio.write(ar, len);
  Serial.print(F("Send ")); Serial.print(len); Serial.println(F(" bytes"));
}

void loop() {
  packets++;
  transmitArray(arr, sizeof(arr));
  delay(2000);
}

Скетч sx1262_transmit_byte

Пример передачи по LoRa каналу отдельных байтов. Используется относительно редко, но может пригодиться в каких-то экзотических случаях.

/*
  ELABORY_SX1262 Library
  Transmit Byte example
*/

#include 

ElaborySx1262 radio;

unsigned long packets = 0;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start SX1262 Transmit Byte example..."));

  if (!radio.begin()) {
    Serial.println(F("LoRa error"));
    while (true);
  }
}

void transmitByte(byte b) {
  radio.write(b);
  Serial.print(F("Send ")); Serial.println(b);
}

void loop() {
  packets++;
  
  transmitByte(65);
  transmitByte(66);
  transmitByte(67);

  delay(2000);
}

Скетч sx1262_transmit_string

Демонстрация передачи по LoRa каналу связи текстовых строк (данных). Этот метод может использоваться в случаях, когда достаточно просто передать те или иные строки текста (не бинарные данные).

/*
  ELABORY_SX1262 Library
  Transmit String example
*/

#include 

ElaborySx1262 radio;

unsigned long packets = 0;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start SX1262 Transmit String example..."));

  if (!radio.begin()) {
    Serial.println(F("LoRa error"));
    while (true);
  }
}

void transmitString(String s) {
  radio.writeString(s);
  Serial.print(F("Send String >")); Serial.print(s); Serial.println(F("<"));
}

void loop() {
  packets++;
  transmitString("Packet " + String(packets));
  delay(2000);
}

Заключение

Здесь даны описания только стандартных примеров из библиотеки ELABORY-SX1262, которые демонстрируют основные приёмы и методы работы с ней. Большее количество примеров и руководств во работе с библиотекой ELABORY-SX1262 вы можете найти на других страницах нашего сайта.


Ссылки по теме

Разработка контроллеров LORAmaster Lite из серии LORAmaster