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

 
» » Подключаем модуль LoRa SX1278 к ESP32



Подключаем модуль LoRa SX1278 к ESP32

Автор: Mike(admin) от 12-08-2020, 23:55

LoRa – это беспроводная радиочастотная технология, представленная компанией Semtech и предназначенная для двунаправленной передачи информации на большие расстояния без большого потребления энергии.


Подключаем модуль LoRa SX1278 к ESP32

В этом материале мы узнаем, как мы можем использовать модуль LoRa SX1278 с ESP32. Здесь мы будем использовать два модуля LoRa – один с ESP32, а другой с платой Arduino. ESP32 с LoRa запросит данные о погоде из API для любого конкретного города и отправит их в Arduino с LoRa. Затем Arduino с LoRa получит данные и отобразит их на ЖК-дисплее 16x2. Таким образом, ESP32 с LoRa будет действовать как передатчик, а Arduino с LoRa как приемник. OLED-дисплей также подключен к ESP32 для отображения температуры и влажности на стороне отправителя.


Принципиальные схемы блоков LoRa передатчик/сервер и приемник/клиент приведена далее. В этом проекте мы собираемся отправлять данные о погоде из модуля ESP32 в Arduino Uno с помощью модуля LoRa SX1278. Данные о температуре и влажности будут считываться из Интернета с помощью API с модулем ESP32, а затем отправляться в Arduino с помощью модуля LoRa.


На передающей стороне мы используем ESP32 с модулем LoRa и OLED-дисплеем. Принципиальная схема для этого аппаратного обеспечения следующая:


Подключаем модуль LoRa SX1278 к ESP32

Подключение может выглядеть так:


Подключаем модуль LoRa SX1278 к ESP32

Таблица подключения контактов:


Подключаем модуль LoRa SX1278 к ESP32

На стороне приемника мы используем шилд Arduino Lora. Этот шилд состоит из модуля SX1278 433 МГц со стабилизатором 3,3 В. Шилд будет располагаться непосредственно поверх Arduino, обеспечивая ему возможности LoRa. Полная принципиальная схема шилда LoRa для Arduino приведена далее.


Подключаем модуль LoRa SX1278 к ESP32

Вот как это может выглядеть:


Подключаем модуль LoRa SX1278 к ESP32

Как упоминалось ранее, для запроса данных о погоде из Интернета требуется ссылка на API. Здесь мы собираемся использовать Weather API, который имеет очень простой в использовании API, который позволяет нам получать информацию о погоде. Так что зарегистрируйтесь на сайте, чтобы получить ссылку API. После регистрации перейдите в «My Account» и получите API. Ключ API используется для запросов на получение данных.


Подключаем модуль LoRa SX1278 к ESP32

Теперь вернитесь и нажмите «API Explorer».


Подключаем модуль LoRa SX1278 к ESP32

Теперь на странице API Explorer введите API и название города.


Подключаем модуль LoRa SX1278 к ESP32

Затем прокрутите вниз и нажмите кнопку «Show Response», чтобы сделать запрос. Он даст вам ключ API.


Подключаем модуль LoRa SX1278 к ESP32

Теперь вставьте URL-адрес API в новую вкладку браузера, и результат этого запроса будет выглядеть следующим образом (данные JSON):


Подключаем модуль LoRa SX1278 к ESP32

После получения данных JSON сгенерируйте код, с помощью которого мы сможем прочитать данные JSON и сформулировать их в соответствии с нашими потребностями. Для этого перейдите в ArduinoJson Assistant и вставьте данные JSON в раздел ввода.


Подключаем модуль LoRa SX1278 к ESP32

Теперь прокрутите вниз до программы парсинга и скопируйте раздел кода, который вам пригодится.


Полный код для передатчика и приемника LoRa представлены далее.



// Код для Arduino
#include <SPI.h>
#include <LoRa.h>
#include <LiquidCrystal.h>
const int rs = 8, en = 7, d4 = 6, d5 = 5, d6 = 4, d7 = 3;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Arduino LoRa");
  Serial.print("Arduino LoRa");
  lcd.setCursor(0, 1);
  lcd.print("Receiver");
  delay(2000);
  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    lcd.print("LoRa Failed");
    while (1);
  }
}
void loop() {
  int packetSize = LoRa.parsePacket();
 // lcd.print("LoRa");
  if (packetSize) { 
    Serial.print("Received packet '");
    lcd.clear();
    while (LoRa.available()) {
      char incoming = (char)LoRa.read();
      if (incoming == 'c')
      {
        lcd.setCursor(0, 1);
      }
      else
      {
        lcd.print(incoming);
        Serial.print(incoming);
      }
    }
  }
}


Код для ESP32
#include <HTTPClient.h>
#include <WiFi.h>
#include <ArduinoJson.h>
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include<SH1106.h>  
SH1106 display(0x3c, 21, 22);
const char* ssid = "Galaxy-M20";
const char* pass = "ac312124";
int count;
#define ss 5
#define rst 14
#define dio0 2
const char* url = "http://api.weatherapi.com/v1/current.json?key=ade61a8aef37445d8c0100632202407&q=Jaipur";
void setup() {
  Serial.begin(115200);
  delay(2000);
  Serial.println("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected");
  Serial.println("LoRa Sender");
  LoRa.setPins(ss, rst, dio0);
  while (!LoRa.begin(433E6)) {
    Serial.println(".");
    delay(500);
  }
  LoRa.setSyncWord(0xF3);
  Serial.println("LoRa Initializing OK!");
  display.init();
  display.flipScreenVertically();
  display.setFont(ArialMT_Plain_10);
}
void loop() {
  HTTPClient https;
  String data;
  https.begin(url);
  int httpCode = https.GET();
  if (httpCode > 0) {
    String payload = https.getString();
    char charBuf[500];
    payload.toCharArray(charBuf, 500);
    //Serial.println(payload);
  const size_t capacity = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(8) + JSON_OBJECT_SIZE(23) + 490;
  DynamicJsonDocument doc(capacity);
  const char* json = "{\"location\":{\"name\":\"Jaipur\",\"region\":\"Rajasthan\",\"country\":\"India\",\"lat\":26.92,\"lon\":75.82,\"tz_id\":\"Asia/Kolkata\",\"localtime_epoch\":1595741089,\"localtime\":\"2020-07-26 10:54\"},\"current\":{\"last_updated_epoch\":1595740520,\"last_updated\":\"2020-07-26 10:45\",\"temp_c\":31,\"temp_f\":87.8,\"is_day\":1,\"condition\":{\"text\":\"Mist\",\"icon\":\"//cdn.weatherapi.com/weather/64x64/day/143.png\",\"code\":1030},\"wind_mph\":0,\"wind_kph\":0,\"wind_degree\":0,\"wind_dir\":\"N\",\"pressure_mb\":1008,\"pressure_in\":30.2,\"precip_mm\":0,\"precip_in\":0,\"humidity\":66,\"cloud\":50,\"feelslike_c\":32.2,\"feelslike_f\":89.9,\"vis_km\":5,\"vis_miles\":3,\"uv\":8,\"gust_mph\":7.2,\"gust_kph\":11.5}}";
  deserializeJson(doc, json);
  JsonObject location = doc["location"];
  const char* location_name = location["name"]; // "Jaipur"
  const char* location_region = location["region"]; // "Rajasthan"
  const char* location_country = location["country"]; // "India"
  JsonObject current = doc["current"];
  long current_last_updated_epoch = current["last_updated_epoch"]; 
  const char* current_last_updated = current["last_updated"]; // 
  int current_temp_c = current["temp_c"]; // 31
  int current_humidity = current["humidity"]; // 66
  Serial.print("Temperature: ");
  Serial.println(current_temp_c);
  Serial.println("Humidity: ");
  Serial.println(current_humidity);
  Serial.print("Sending packet: ");
//  Serial.println(counter);
  //Send LoRa packet to receiver
  LoRa.beginPacket();
  LoRa.print("Temperature: ");
  LoRa.print(current_temp_c);
  String Temp = String(current_temp_c);
  LoRa.print("c");
  LoRa.print("Humidity: ");
  LoRa.print(current_humidity);
  String Humidity = String(current_humidity);
  LoRa.endPacket();
  display.clear();
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_16);
  display.drawString(0, 23, "Temperature:");
  display.drawString(94, 23, Temp);
  display.drawString(0, 38, "Humidity:");
  display.drawString(70, 38, Humidity);
   display.display();
  delay(5000);
}
  else {
    Serial.println("Error on HTTP request");
  }
  https.end();
  count++;
}

Когда оборудование и программа будут готовы, загрузите приведенные коды в модули ESP32 и Arduino. Модуль передатчика отправит значения температуры и влажности в модуль приемника. А приемник отобразит их на ЖК-дисплее, подключенном к Arduino, как показано на следующем изображении.


Подключаем модуль LoRa SX1278 к ESP32



© digitrode.ru


Теги: ESP32, LoRa




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

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

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