цифровая электроника
вычислительная техника
встраиваемые системы

 

Основы работы с платой LoRa SX1276 в Arduino IDE

Автор: Mike(admin) от 30-10-2019, 05:15

Как начать работу с платой TTGO LoRa32 SX1276 OLED в Arduino IDE


В последнее время для передачи данных на относительно большие расстояния все чаще используют связь LoRa (Long Range или связь на дальние расстояния). LoRa, по сути, является грамотным способом получить очень хорошую чувствительность приемника и низкую частоту ошибок по битам (BER) при использовании недорогих чипов. Это означает, что приложения с низкой скоростью передачи данных могут получить гораздо большую дальность, используя LoRa, а не другие схожие технологии радиосвязи.


Основы работы с платой LoRa SX1276 в Arduino IDE

На сегодняшний день на рынке представлено довольно большое количество микросхем и отладочных плат для сети LoRa, и сегодня мы поработаем с одной из них. TTGO LoRa32 SX1276 OLED – это плата разработки ESP32 со встроенным чипом LoRa и 0,96-дюймовым OLED-дисплеем SSD1306. В этом руководстве мы покажем, как отправлять и получать пакеты LoRa (соединение точка-точка) и использовать OLED-дисплей с Arduino IDE.


На плате также имеется несколько линий GPIO для подключения периферийных устройств, кнопки PRG (BOOT) и RST, а также разъем для литиевой батареи.


Основы работы с платой LoRa SX1276 в Arduino IDE

Распиновка платы следующая


Основы работы с платой LoRa SX1276 в Arduino IDE

Дисплей OLED обменивается данными с управляющим ESP32 по протоколу связи I2C. Здесь наблюдается следующее подключение: SDA – GPIO 4, SCL – GPIO 15, RST – GPIO 16.


Чип SX1276 LoRa обменивается данными по протоколу связи SPI и внутренне подключен к ESP32 следующим образом: MISO – GPIO 19, MOSI – GPIO 27, SCK – GPIO 5, CS – GPIO 18, IRQ – GPIO 26, RST – GPIO 14.


Для правильной работы с платой нам нужно установить несколько библиотек. Для управления дисплеем в этом руководстве мы будем использовать две библиотеки Adafruit: библиотеку Adafruit_SSD1306 и библиотеку Adafruit_GFX. Выполните следующие шаги, чтобы установить эти библиотеки. Во-первых, откройте IDE Arduino и выберите Скетч – Включить библиотеку –Управление библиотеками (Sketch – Include Library – Manage Libraries). Должен открыться менеджер библиотек. Далее введите «SSD1306» в поле поиска и установите библиотеку SSD1306 от Adafruit.


Основы работы с платой LoRa SX1276 в Arduino IDE

После установки библиотеки SSD1306 от Adafruit введите «GFX» в поле поиска и установите библиотеку.


Основы работы с платой LoRa SX1276 в Arduino IDE

Теперь пришло время для библиотеки LoRa. Есть несколько доступных библиотек для простой отправки и получения пакетов LoRa с ESP32. В этом примере мы будем использовать библиотеку arduino-LoRa от sandeep mistry. Также откройте менеджер библиотек и найдите «LoRa». Выберите библиотеку LoRa, выделенную на изображении ниже и установите ее.


Основы работы с платой LoRa SX1276 в Arduino IDE

После установки библиотек перезапустите вашу Arduino IDE. После этого можно будет программировать нашу плату LoRa. Скопируйте следующий код в вашу Arduino IDE. Этот код отправляет сообщение «Hello», за которым следует работа счетчика на 10 секунд. Также счет отображается на дисплее OLED.



// Библиотеки для LoRa
#include <SPI.h>
#include <LoRa.h>

// Библиотеки для OLED-дисплея
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// определяем выводы для трансивера LoRa
#define SCK 5
#define MISO 19
#define MOSI 27
#define SS 18
#define RST 14
#define DIO0 26

// 433E6 для Азии
// 866E6для Европы
// 915E6 для Северной Америки
#define BAND 866E6

//определяем выводы для OLED дисплея
#define OLED_SDA 4
#define OLED_SCL 15 
#define OLED_RST 16
#define SCREEN_WIDTH 128 // ширина в пикселях
#define SCREEN_HEIGHT 64 // высота в пикселях

// счетчик пакетов
int counter = 0;

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST);

void setup() {

  // сбросить OLED-дисплей программно
  pinMode(OLED_RST, OUTPUT);
  digitalWrite(OLED_RST, LOW);
  delay(20);
  digitalWrite(OLED_RST, HIGH);

  // инициализировать OLED
  Wire.begin(OLED_SDA, OLED_SCL);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // бесконечный цикл
  }
  
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("LORA SENDER ");
  display.display();
  
  // инициализировать последовательный монитор
  Serial.begin(115200);
  
  Serial.println("LoRa Sender Test");

  // SPI контакты LoRa 
  SPI.begin(SCK, MISO, MOSI, SS);
  LoRa.setPins(SS, RST, DIO0);
  
  if (!LoRa.begin(BAND)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
  Serial.println("LoRa Initializing OK!");
  display.setCursor(0,10);
  display.print("LoRa Initializing OK!");
  display.display();
  delay(2000);
}

void loop() {
   
  Serial.print("Sending packet: ");
  Serial.println(counter);

  // Отправить пакет LoRa получателю
  LoRa.beginPacket();
  LoRa.print("hello ");
  LoRa.print(counter);
  LoRa.endPacket();
  
  display.clearDisplay();
  display.setCursor(0,0);
  display.println("LORA SENDER");
  display.setCursor(0,20);
  display.setTextSize(1);
  display.print("LoRa packet sent.");
  display.setCursor(0,30);
  display.print("Counter:");
  display.setCursor(50,30);
  display.print(counter);      
  display.display();

  counter++;
  
  delay(10000);
}

Загрузите код на свою плату. Вам нужно выбрать правильную плату и COM-порт, который вы используете.


Основы работы с платой LoRa SX1276 в Arduino IDE

После загрузки кода, он должен начать отправлять пакеты LoRa.


Основы работы с платой LoRa SX1276 в Arduino IDE

Теперь загрузите скетч приемника на другую плату TTGO LoRa32. Этот скетч прослушивает пакеты LoRa в пределах своего диапазона и выводит содержимое пакетов на OLED-дисплей, а также выводит RSSI (относительный уровень принимаемого сигнала).



#include <SPI.h>
#include <LoRa.h>

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCK 5
#define MISO 19
#define MOSI 27
#define SS 18
#define RST 14
#define DIO0 26

#define BAND 866E6

#define OLED_SDA 4
#define OLED_SCL 15 
#define OLED_RST 16
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST);

String LoRaData;

void setup() { 
  
  pinMode(OLED_RST, OUTPUT);
  digitalWrite(OLED_RST, LOW);
  delay(20);
  digitalWrite(OLED_RST, HIGH);
  
  Wire.begin(OLED_SDA, OLED_SCL);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) { // Address 0x3C for 128x32
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("LORA RECEIVER ");
  display.display();
  
  Serial.begin(115200);

  Serial.println("LoRa Receiver Test");
  
  SPI.begin(SCK, MISO, MOSI, SS);
  LoRa.setPins(SS, RST, DIO0);

  if (!LoRa.begin(BAND)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
  Serial.println("LoRa Initializing OK!");
  display.setCursor(0,10);
  display.println("LoRa Initializing OK!");
  display.display();  
}

void loop() {

  // попробуем разобрать пакет
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    // получил пакет
    Serial.print("Received packet ");

    // читать пакет
    while (LoRa.available()) {
      LoRaData = LoRa.readString();
      Serial.print(LoRaData);
    }

    // вывести RSSI пакета
    int rssi = LoRa.packetRssi();
    Serial.print(" with RSSI ");    
    Serial.println(rssi);

   // Показать информацию на OLED дисплее
   display.clearDisplay();
   display.setCursor(0,0);
   display.print("LORA RECEIVER");
   display.setCursor(0,20);
   display.print("Received packet:");
   display.setCursor(0,30);
   display.print(LoRaData);
   display.setCursor(0,40);
   display.print("RSSI:");
   display.setCursor(30,40);
   display.print(rssi);
   display.display();   
  }
}

Загрузите код на вторую плату. Не забывайте, что вам нужно выбрать TTGO LoRa32-OLED V1 в меню плат. После загрузки кода она должна начать получать пакеты LoRa с первой платы.


Основы работы с платой LoRa SX1276 в Arduino IDE

Благодаря таким платам и в целом технологии LoRa можно сделать целую экосистему Интернета вещей.




© digitrode.ru


Теги: LoRa, ESP32, Arduino



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий