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