آموزش Espآموزش ESP32آموزش آردوینوآموزش اینترنت اشیاپروژه های Esp

آموزش اتصال ماژول LoRa SX1278 به ESP32

LoRa یک تکنولوژی مبتنی بر امواج رادیویی هست که توسط شرکت Semtech معرفی شده و برای انتقال اطلاعات دو جهته با مسافت‌های طولانی بدون مصرف انرژی زیاد مورد استفاده قرار می‌گیرد. اگر به تازگی با LoRa آشنا شدید، در مورد تکنولوژی LoRa و LoRaWAN بیاموزید و راه‌اندازی LoRa با اردوینو و Raspberry pi را مورد بررسی قرار دهید.

در این آموزش می آموزیم که چگونه می توانیم ماژول LoRa SX1278 را با استفاده از ESP32 راه اندازی کنیم. در اینجا ما از دو ماژول LoRa استفاده خواهیم کرد ( ارسال کننده اطلاعات و دریافت کننده اطلاعات ) – یکی را با استفاده از ESP32 و دیگری با برد آردوینو راه اندازی میکنیم. ESP32 داده های آب و هوا یک شهر را از API میگیرد و آن را از طریق فرستنده LoRa ارسال میکند. سپس آردوینو با استفاده گیرنده LoRa داده ها را دریافت کرده و روی LCD 16×2 نمایش می دهد. بنابراین ESP32 LoRa به عنوان فرستنده و Arduino LoRa به عنوان یک گیرنده عمل خواهند کرد. یک OLED نیز به ESP32 وصل شده است تا دما و رطوبت را در سمت فرستنده نمایش دهد.

قطعات مورد نیاز

  • ESP32
  • Arduino Uno
  • شیلد Lora برای Arduino
  • ماژول LoRa -02 SX1278  (×2)
  • ماژول 16*2 LCD
  • ماژول صفحه نمایش OLED
  • برد برد
  • سیم جامپر

با استفاده از لینک زیرمیتوانید به فایل ها (PCB) و تمام مراحل برای ساخت شیلد LoRa برای Arduino دسترسی پیدا کنید.

مدار LoRa با ESP32

شکل مدار بخش فرستنده (سرور) و گیرنده (کلاینت) ماژول LoRa در زیر آورده شده است. در این پروژه قصد داریم با استفاده از ماژول LoRa SX1278 داده های آب و هوا را از ماژول ESP32 به آردوینو Uno منتقل کنیم. داده های دما و رطوبت با استفاده از یک API از اینترنت به وسیله ESP32 دریافت میشوند و سپس آن ها را با استفاده از ماژول LoRa به آردوینو ارسال می کند.

قسمت فرستنده LoRa به وسیله ESP32

در قسمت ارسال، ما از ESP32 با ماژول LoRa و صفحه نمایش OLED استفاده می کنیم. ترسیم مدار این پروژه در زیر نشان داده شده است.

قسمت فرستنده LoRa به وسیله ESP32

تصویر اتصالات SX1278 به ESP32

در جدول زیر نام پین ها و اتصالات به صورت کامل آورده شده است.

LoRa SX1278 Module ESP32
3.3V 3.3V
GND GND
NSS D5
DIO0 D2
SCK D18
MISO D19
MOSI D23
RST D14
OLED Pin ESP32 Pin
Vcc 3.3v
GND GND
SCL D22
SDA D21

ما قبلا از صفحه نمایش OLED در بسیاری از پروژه ها استفاده کردیم.

راه اندازی قسمت دریافت LoRa به وسیله Arduino

در قسمت دریافت اطلاعات، ما ازشیلد  Lora برایArduino  استفاده می کنیم. ( این شیلد قبلاً برای پروژه ردیاب GPS مبتنی بر Lora طراحی شده. برای دریافت فایل Gerber و سایر اطلاعات در مورد شیلد LoRa می توانید روی لینک زیر کلیک کنید.)

این شیلد شامل ماژول SX1278 433MHz با رگولاتور 3.3 ولت است که با استفاده از رگولاتور متغیر LM317 طراحی شده است. این شیلد مستقیماً در بالای آردوینو قرار می گیرد و قابلیت های LoRa را برای آن فراهم می کند. ترسیم مداری کامل شیلدLoRa  در تصاویر زیر آورده شده است:

راه اندازی قسمت دریافت LoRa به وسیله Arduino 

 

مدار ارتباطی LoRa

ساخت لینک API برای دریافت اطلاعات آب و هوا

همانطور که قبلا دراین مقاله به آن اشاره شد، به یک لینک API برای دریافت داده های آب و هوا از اینترنت نیاز هست . در اینجا قصد داریم از وبسایت Weather API استفاده کنیم که دارای یک API بسیار ساده برای استفاده است و به ما این امکان را می دهد که اطلاعات آب و هوا را دریافت و بروزرسانی کنیم. بنابراین برای دریافت لینک API در وبسایت Weather API ثبت نام کنید.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

پس از ثبت نام، به قسمت « My Account » بروید و API را دریافت کنید.

(API key یک کلید برای ارسال درخواست و دریافت اطلاعات می باشد.)

LoRa ESP32

روی تب API Explorer کلیک کنید.

LoRa ESP32

حالا در صفحه API explorer، نام شهر و API (دریافتی در قسمت قبل) را وارد کنید.

دریافت اطلاعات آب و هوا

سپس به پایین اسکرول کنید و روی دکمه «Show Response  » کلیک کنید تا درخواست ارسال شود. پس از آن API key را به شما می دهد.

LoRa ESP32

لینک API خود را کپی کنید و در یک مرورگر پیست کنید و خروجی کار باید شبیه به زیر باشد. ( یک متغیر JSON )

LoRa ESP32

پس از دریافت داده JSON حال باید کدی را بنویسیم که بتواند داده های مورد نیازمان را از متغیر JSON استخراج کنیم و به آن مطابق با نیاز های خود دسترسی داشته باشیم.  برای این کار، وارد سایت ArduinoJson Assistant میشویم و داده های JSON را در قسمت Input پیست میکنیم.

LoRa ESP32 داده های JSON

حالا به پایین اسکرول کنید تا زمانی که به قسمت parsing program برسید. در این قسمت کد هایی که برای شما مفید هستند را کپی کنید.

کد های ارسال اطلاعات ESP32 با استفاده از LoRa

کد کامل قسمت فرستنده و گیرنده LoRa در انتهای این مقاله آورده شده است. در اینجا ما چند قسمت مهم از کد را توضیح می دهیم.

ابتدا تمام کتابخانه های مورد نیاز را اضافه میکنیم. SPI.h برای ارتباط SPI بین ESP32 و LoRa استفاده می شود، کتابخانه Wire.h  برای ارتباط بین دستگاه های با پروتکل ارتباطی I2C استفاده می شود (OLED).

می توانید کتابخانه های مورد نیاز را از اینجا دانلود کنید.

#include <HTTPClient.h>
#include <WiFi.h>
#include <ArduinoJson.h>
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include<SH1106.h>

سپس با استفاده از کد زیر OLED را تنظیم میکنیم برای این کار باید مقادیر آدرس و پین های ESP32 متصل به OLED را وارد کنیم.

مطابق کد زیر.

SH1106 display(0x3c, 21, 22);

ESP32 برای دریافت اطلاعات به اینترنت نیاز دارد پس باید آن را به یک وای فای متصل کنیم برای این کار باید نام و رمز عبور وای فای را ذخیره کنیم که طبق کد زیر آن ها را در دو متغیر ( که در کد زیر آمده است ) ذخیره میکنیم.

const char* ssid = "Wi-fi Name";
const char* pass = "Password";

بعد از آن پین های متصل به LoRa را تعریف میکنیم.

#define ss 5
#define rst 14
#define dio0 2

حال لینک API را (که قبلا ایجاد کرده بودیم) وارد میکنیم تا از طریق آن بتوانیم دما و رطوبت را دریافت کنیم.

Const char* url = "http://api.weatherapi.com/v1/current.json?key=ade61a8aef37445d8c0100632202407&q=Jaipur";

در داخل تابع setup، سریال مانیتور را با نرخ 115200 برای برای دیباگ کردن تنظیم میکنیم ، همچنین صفحه نمایش OLED و ارتباط LoRa را با تابع () begin راه ندازی می کنیم.

  Serial.begin(115200);
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
  }
  LoRa.setPins(ss, rst, dio0);
  while (!LoRa.begin(433E6)) {
  }
  LoRa.setSyncWord(0xF3);
}

اکنون در تابع loop بررسی می کنیم که آیا فایل JSON توسط ESP32 دریافت می شود یا خیر و با استفاده از کد زیر داده های JSON را روی سریال مانیتور پرینت می کنیم.

int httpCode = https.GET();
  if (httpCode > 0) {
    String payload = https.getString();
    char charBuf[500];
    payload.toCharArray(charBuf, 500);
    Serial.println(payload);

پس از آن از کدی را که به وسیله ArduinoJson Assistant  تولید کردیم استفاده میکنیم. این کد به ما کمک میکند تا اطلاعات دما و رطوبت شهر مورد نظر را از متغیر JSON دریافت کنیم.

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);
  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

حال در مرحله آخر، مقادیر دما و رطوبت را به گیرنده LoRa ارسال میکنیم.

LoRa.beginPacket();
LoRa.print("Temperature: ");
LoRa.print(current_temp_c);
LoRa.print("c");
LoRa.print("Humidity: ");
LoRa.print(current_humidity);
LoRa.endPacket();

کد های دریافت اطلاعات Arduino از  LoRa

به طور مشابه، کتابخانه ماژول LoRa و LCD را اضافه می کنیم و مشخص می کنیم که LCD به کدام پین ها متصل است.

#include <SPI.h>
#include <LoRa.h>
#include <LiquidCrystal.h>
constintrs = 8, en = 7, d4 = 6, d5 = 5, d6 = 4, d7 = 3;
LiquidCrystallcd(rs, en, d4, d5, d6, d7);

در داخل تابع loop، داده ها را به صورت پک شده از ماژول فرستنده دریافت می کنیم. پس از دریافت پک داده ها از گیرنده LoRa، آردوینو شروع به خواندن آنها به صورت کاراکتر می کند و آنها را روی LCD چاپ می کند. هنگامی که کلمه کلیدی “c” را دریافت می کند، باقی اطلاعات را بر روی خط دوم چاپ میکند.

void loop() {
intpacketSize = LoRa.parsePacket();
if (packetSize) {
Serial.print("Received packet '");
while (LoRa.available()) {
char incoming = (char)LoRa.read();
if (incoming == 'c')
      {
lcd.setCursor(0, 1);
      }
else
      {
lcd.print(incoming);
      }

نحوه کارکرد ESP32-LoRa

پس از آماده شدن سخت افزار و برنامه، کدهای زیر را در ماژول های ESP32 و Arduino آپلود کنید.  ESP32 مقادیر را به ماژول فرستنده میدهد و ماژول فرستنده مقادیر دما و رطوبت را به ماژول گیرنده ارسال می کند. ماژول گیرنده LoRa آنها را مطابق شکل زیر بر روی LCD متصل به آردوینو نمایش می دهد.

نحوه کار ماژول LoRa لورا ESP32

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *