این برد یکی از ماژول ساخت Heltec می باشد که بر پایه هسته ESP32 است . LoRa32 یک پلتفرم توسعه LoRa WAN محسوب می گردد . در شبکه های LoRa از تجهیزات کم مصرفی که در باند فرکانسی ISM کار می کنند استفاده می شود . به دلیل هزینه کم و همچنین مصرف انرژی بسیار کم در LoRa ، از این ساختار در شبکه های سنسوری استفاده می شود . شبکه های LoRa خود به چندین دسته تقسیم بندی می شوند که LoRa WAN یکی از بزرگترین ساختار های LoRa می باشد . در LoRa WAN اصل بر ارتباط دور گره ها و فاصله زیاد آن ها می باشد . در این برد از یک چیپ SX127x جهت ارتباط وایرلس LorA استفاده شده است که در کمترین حالت خود امکان ارتباط در فواصل 1.5 کیلومتری را می دهد . همچنین ESP32 به عنوان هسته اصلی این ماژول ، یک SoC بسیار قدرتمند با فرکانس کاری 240MHz است که علاوه بر تمامی پریفرال های موجود بر روی میکروکنترلر ها )واحد های UART ، I2C و…( از تمامی استاندارد های IEEE802.11 ، P2P و TCP/IP پشتیبانی می کند . ESP32 قابلیت ارتباط WiFi را به صورت Client و Server دارد . همچنین ESP32 از بلوتوث نسخه 4 پشتیبانی می کند . این برد دارای 8Mbyte حافظه Flash است که به راحتی می توان استایل های html و css در آن کپی کرد و رابط های کاربری مختلفی ساخت . این برد همچنین دارای یک OLED 0.96” است که از آن می توان حهت مانیتور کردن پارامتر های مختلف و یا جریان دیتا استفاده کرد . می توان چندین برد LoRa32 را در فواصل بسیاری دوری از هم ، به صورت شبکه در آورد . یا می توان تغییرات مخیطی همچون دما و رطوبت مکانی هزاران متر دور تر را توسط آن اندازه گیری و مخابره کرد . این برد یکی از قویترین پلتفرم های LoRa WAN می باشد . یکی از مهمترین مزیت های این برد پشتیبانی آن از باتری های لیتیومی است به طوری که در پشت این برد سوکتی جهت اتصال باتری های لیتیومی وجود دارد .

 

مشخصات :
– هسته اصلی ESP32 با فرکانس کاری 240MHz
– قابلیت ارتباط LoRa در باند های ISM 433MHz تا 510MHz
– دارای چیپ SX128X به عنوان هسته LoRa
– پشتیبانی از بلوتوث نسخه 4
– قابلیت ارتباط WiFi به صورت Client و Server
– امکان ارتباط های با فاصله دور و بر پایه شبکه های WAN
– دارای آنتن رو بردی برای ESP32 و همچنین سوکت IPX و آنتن خارجی LoRa
– دارای نمایشگر OLED 0.96”
– دارای پورت microUSB جهت ارتباط و همچنین برنامه ریزی برد
– دارای بوت لودر اختصاصی Heltec
– دارای 28 پین ورودی خروجی
– دارای سوکت اتصال باتری و پشتیبانی از باتری های لیتیومی
– دارای 8Mbyte حافظه Flash

کاربرد ها :

می توان گفت تقریبا هر آنچه بر پایه شبکه های LoRa می باشد توسط این ماژول قابل اجرا است . به طور مثال شما می خواهید سیر کاهش آب یک رود خانه را در سال اندازه گیری کنید . می توانید با اتصال سنسور های اندازه گیری ارتفاع در کنار رودخانه و اندازه گیری ارتفاع آب توسط این ماژول ، دیتا را به کیلومتر ها دور تر و به یک مرکز جمع آوری داده مخابره کنید . یا وقتی که می خواهید دمای نقاط مختلف یک شهر را اندازه بگیرد و یا دیتا های مربوط به آلودگی هوا را جهت کنترل ترافیک جمع آوری کنید ، می توانید با استفاده از برد های Heltec شبکه های LoRa وسیعی بر پایه شبکه های WAN بسازید و دیتا را به یک مرکز کنترل ترافیک مخابره کنید . پشتیبانی از باتری های لیتیومی و همچنین مصرف بسیار کم این برد آن را به یک گره ارتباطی بی نظیر در شبکه های کم مصرف دور برد تبدیل کرده است . وجود 8Mbyte حافظه Flash برای SoC ESP32 و همچنین توانایی های فوق العاده آن ، برد LoRa32 را به یکی از قویترین MCU ها در اینترنت اشیا تبدیل کرده است .

 

پین های برد heltek LoRa32 :

در این برد پین های SCL ، SDA و REST نمایگشر OLED به ترتیب به پین های 24 ، 21 , 25 متصل اند .

راه اندازی برد Heltec LoRa32 :

برای راه اندازی این برد ، همانند سایر برد های مبتنی بر ESP32 ابتدا باید هسته ESP32 را بر روی آردوینو IDE خود نصب کنید . کلیه برنامه های و مثال های ESP32 را می توان توسط این برد اجرا کرد . در لینک زیر می توانید کتابخانه های و مثال های برد Heltek را دانلود کنید :

https://github.com/HelTecAutomation/Heltec_ESP32

 

کد زیر مربوط به تست واحد LoRa برد می باشد .

#include "Arduino.h"
#include "heltec.h"
#include "WiFi.h"

#define BAND    868E6  //you can set band here directly,e.g. 868E6,915E6

uint64_t chipid;
bool IsACKRecvied = false;

String rssi = "RSSI --";
String packSize = "--";
String packet;

unsigned int counter = 0;

void WIFISetUp(void)
{
  //WIFI初始化 + 扫描演示
  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  WiFi.disconnect(true);
  delay(1000);
  WiFi.mode(WIFI_STA);
  WiFi.setAutoConnect(true);
  WiFi.begin("Your WiFi SSID","Your Password");//fill in "Your WiFi SSID","Your Password"
  delay(100);

  byte count = 0;
  Serial.print("Connecting.");
  while(WiFi.status() != WL_CONNECTED && count < 5)
  {
    count ++;
    Serial.print(".");
    delay(500);
  }

  if(WiFi.status() == WL_CONNECTED)
  {
    Serial.println("\r\nConnecting...OK.");
  }
  else
  {
    Serial.println("Connecting...Failed");
    //while(1);
  }
  Serial.println("WIFI Setup done");
}

void WIFIScan(unsigned int value)
{
  unsigned int i;
  if(WiFi.status() != WL_CONNECTED)
  {
    WiFi.mode(WIFI_MODE_NULL);
  }

  for(i=0;i<value;i++)
  {
    Serial.println("Scan start...");

    int n = WiFi.scanNetworks();
    Serial.println("Scan done");
    delay(500);

    if (n == 0)
    {
      Serial.println("no network found");
      //while(1);
    }
    else
    {
      Serial.print(n);
      Serial.println("networks found:");
      delay(500);

      for (int i = 0; i < n; ++i) {
      // Print SSID and RSSI for each network found
        Serial.print((i + 1));
        Serial.print(":");
        Serial.print((String)(WiFi.SSID(i)));
        Serial.print(" (");
        Serial.print((String)(WiFi.RSSI(i)));
        Serial.println(")");;
        delay(10);
      }
    }
    delay(800);
  }
}

bool receiveflag = false;
bool resendflag=false;
bool deepsleepflag=false;
void interrupt_GPIO0()
{
  delay(10);
  if(digitalRead(0)==0)
  {
      if(digitalRead(LED)==LOW)
      {resendflag=true;}
      else
      {
        deepsleepflag=true;
      }     
  }
}
void setup()
{
  pinMode(LED,OUTPUT);
  Heltec.begin(true /*DisplayEnable Enable*/, true /*LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /**/);

  WIFISetUp();
  
  WiFi.disconnect(true); //重新初始化WIFI
  delay(1000);
  WiFi.mode(WIFI_STA);
  WiFi.setAutoConnect(true);
  
  WIFIScan(1);

  attachInterrupt(0,interrupt_GPIO0,FALLING);
  LoRa.onReceive(onReceive);
  send();
  LoRa.receive();
}

void loop()
{
 if(deepsleepflag)
 {
  delay(1000);
  LoRa.end();
  LoRa.sleep();  
  pinMode(4,INPUT);
  pinMode(5,INPUT);
  pinMode(14,INPUT);
  pinMode(15,INPUT);
  pinMode(16,INPUT);
  pinMode(17,INPUT);
  pinMode(18,INPUT);
  pinMode(19,INPUT);
  pinMode(26,INPUT);
  pinMode(27,INPUT);
  digitalWrite(Vext,HIGH);
  delay(2);
  esp_deep_sleep_start();
 }
 if(resendflag)
 {
   resendflag=false;
   send();      
   LoRa.receive();
 }
 if(receiveflag)
 {
    digitalWrite(25,HIGH);
    Serial.print("Received Size ");
    Serial.print(packSize);
    Serial.print(" pakeges: ");
    Serial.print(packet);
    Serial.print(" With ");
    Serial.println(rssi);    
    receiveflag = false;  
    delay(1000);
    send();
    LoRa.receive();
  }
}

void send()
{
    LoRa.beginPacket();
    LoRa.print("hello ");
    LoRa.print(counter++);
    LoRa.endPacket();
    Serial.print("Packet ");
    Serial.print(counter-1);
    Serial.println(" sent done");
}


void onReceive(int packetSize)//LoRa receiver interrupt service
{
  //if (packetSize == 0) return;

  packet = "";
    packSize = String(packetSize,DEC);

    while (LoRa.available())
    {
        packet += (char) LoRa.read();
    }
    
    rssi = "RSSI: " + String(LoRa.packetRssi(), DEC);

    receiveflag = true;
}

 

 

Tags:
About Author: USER_4