این برد یکی از ماژول ساخت 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;
}


