Heltec LoRa ESP32 Za međusobni prenos podataka bežičnim putem mikrokontroleri imaju na raspolaganju nekoliko različitih tehnologija. Do sada smo pisali o Bluetooth uređajima, nRF24L01 modulima, kao i malim radio-modulima koji rade na niskim frekvencijama, a svima je zajednički relativno mali domet. Pri tome se ne radi o dometu u idealnim uslovima, već o realnom dometu. Ovom prilikom će biti reči o bežičnoj vezi putem LoRa (long range) protokola, koji je sposoban za mnogo veće razdaljine. Za komunikaciju putem LoRa protokola, razlikujemo LoRa module koje povezujemo sa mikrokontrolerima i već gotova rešenja, ploče koje dolaze u formi dev kita. Mi vam ovom prilikom predstavljamo Heltecov model ESP32 LoRa V2, bolje reći dva uređaja, jer je za bežičnu komunikaciju potrebno dvoje. Inače, Heltec nudi dosta zanimljivih komponenti poput touch inputa HTTM o kojem smo već pisali (SK 5/2018). Ploče iz naslova dolaze u formi dev kitova nalik na NodeMCU ili slično. Standardno za Heltec, PCB je bele boje a ploče dolaze sa nezalemljenim pinovima i odgovarajućom antenom koja se sa pločom povezuje preko kraćeg kabla na U.fl konektor. Sama antena ima tri decibela pojačanja i sa kablom se povezuje preko RP-SMA konektora, pa je moguća njena zamena jačom. Dev kit ploča je breadboard friendly i od ESP32 dev kita je uža za ceo jedan red, a pritom je i kraća. Manje dimenzije joj ne smetaju da od standardnog ESP32 dev kita ima čak šest pinova više, njih 36. O ESP32 smo više puta pisali (SK 10/2018 i SK 6/2018), tako da o samim mogućnostima LX6 jezgra nećemo mnogo pisati. Sve što smo tada naveli za Wi-FI i Bluetooth konekcije, važi i ovde, s tom razlikom da se kompletan ESP32 sistem nalazi sa donje strane i nije pokriven metalnim kućištem. Tensilicin čip ima dva jezgra i radi na 240 megaherca uz osam megabajta memorije, a što je opet sasvim dovoljno. Za povezivanje na lokalnu mrežu, ovaj Heltec ima antenu sa gornje strane u obliku zavojnice (helical). Verzije jedan i dva se između ostalog razlikuju i po tome što je na „kecu” Wi-Fi antena odštampana. I V2 ima odštampanu, ali ona nije povezana. Sa donje strane još imamo oscilator i UART CP2102 čip, a tu je JST 1.25 konektor baterije. Crvena LED sa gornje strane će svetleti dok se baterija puni.Sa gornje strane imamo standardan raspored PRG i RST tastera sa mikro USB konektorom, preko kog na ploču prebacujemo skeč ili je napajamo strujom. Najveći deo ploče prekriva plavi OLED ekran rezolucije 128 × 64 piksela. Ekran, opet, prekriva LoRa SX1276 čip koji radi od 868 do 915 i na 923 megaherca, a sam frekventni opseg biramo u okviru skeča. Uz prateću antenu u idealnim uslovima ove dve ploče bi trebalo da ostvare komunikaciju na razdaljinama do tri kilometra u ruralnim područjima. Pre puštanja ploča u rad neophodno je povezati antene, jer u suprotnom može doći do oštećenja SX1278 čipa. Osetljivost prijemnika je -139 decibela po metru, a kako smo mi prošli na testu, pročitaćete u tekstu ispod.Semtech SX127x serija čipova pripada grupi LoRa transivera, što će reći da se mogu koristiti kao primopredajnici. Razlika je u zadnjem broju koji direktno govori o frekventnom opsegu koji čip koristi. SX1278, recimo, radi na frekvencijama od 433 do 510 megaherca. SX127x serija čipova je identična HopeRF RFM9x seriji i ovu potonju ćemo gledati da testiramo u formi modula u nekom od narednih brojeva. SX172x čipovi pružaju LoRa radio-modulaciju, ali za LoRaWAN je potrebna biblioteka, za šta ESP32 stupa na scenu. Oznake pinova su sa donje strane i postaju praktično nečitljive jednom kada se zaleme hederi, što je proizvođač donekle rešio dodatnim nalepnicama. Prema pinout dijagramu vidimo da su mnogi pinovi rezervisani za ekran i SX1276. Ekran se sa ESP32 povezuje putem I2C protokola, što ne znači da se i drugi I2C moduli ne mogu dodati, ipak GPIO16 je zauzet za reset ekrana. SX1276 sa druge strane koristi SPI interfejs i za svoje potrebe koristi čak šest GPIO. V2 ploče imaju podršku za Vext ekrane, a za to je rezervisan pin 21. Na raspolaganju nam ostaje još 17 pinova, gde je pin 25 rezervisan za ugrađenu LED. Skoro svi GPIO idu preko ADC, uz samo jedan DAC, a dva se koriste za UART. Raspored naponskih pinova je uz mikro USB port, gde imamo po dva GND, 3V3 i Vext i jedan 5V. Vext pin se uz dodatak MOSFET-a može upotrebiti za praćenje „soka” baterije, što može da bude jako zgodno.Mi smo pripremili jedan scenario gde će na udaljenoj plantaži jedna Heltec ploča preko higrometra (SK 2/2019) i DHT22 senzora (SK 4/2017) vršiti merenja koja će slati drugoj putem LoRa bežične veze. Ova druga će preko lokalne mreže podatke poslati na udaljeni server i polako popunjavati SQL tabelu. Pristupom web stranici imaćemo prikaz upisanih podataka u obliku grafikona, nalik na onaj kakav smo pravili kada smo pisali o D1 ploči (SK 3/2018). Pre bilo kakvog rada, potrebno je dodati ploču i biblioteke u IDE. Link ka podacima o ploči, primerima i korigovanim bibliotekama smo ispratili sa zvanične Heltec stranice. Predajnik smo povezali sa higrometrom i DHT22 na pinove 13 i 17. Na našoj „plantaži” očitavamo temperaturu, relativnu vlažnost vazduha i vlažnost zemljišta. O načinu i implementaciji ovih modula smo već pisali i nećemo se ponavljati. Za naš projekat su nam potrebne SPI, LoRa, Wire, SSD1306 i DHT biblioteke koje dobijamo sa linka ka GitHubu. Za rad sa ekranom se može upotrebiti bilo koja druga biblioteka, ali mi smo se držali primera, biblioteka i instrukcija proizvođača. Nakon dodeljivanja pinova ekranu, SX1276 i modulima za merenje, postavljamo frekventni opseg, u našem slučaju 868E6 (868 megaherca). U setup funkciji pokrećemo ekran i LoRa komunikaciju, dok u loop funkciji vršimo očitavanja, prikazujemo ih na ekranu i šaljemo u etar. Skečeve koje smo koristili, kao i PHP fajl možete preuzeti sa adrese goo.gl/viYCbg. S obzirom na to da radimo sa ESP32 čiji su ADC podrazumevano 12-bitne rezolucije, funkcijom analogReadResolution(10) ih postavljamo u 10-bitnu. Ovo je jako važno radi analognog očitavanja higrometra jer je kod 12-bitnog broj „analognih koraka” 4096. Ukoliko se koristi 12-bitna rezolucija, potrebno je korigovati logiku skeča.  | | Prijemnik koristi iste biblioteke kao i predajnik, uz dodatak Wi-Fi biblioteke, jer će podatke, osim prijema, ispisivati i na svom ekranu, ali i slati na udaljeni server. I prijemnik za komunikaciju sa ekranom i LoRa modulom koristi iste pinove i isti frekventni opseg. Ovde još dodajemo konstante ssid, password, webServer i httpPort, neophodne da se ESP32 poveže preko lokalne mreže na udaljeni server. U setup funkciji ovaj put povezujemo ESP32 na lokalnu mrežu i postavljamo LoRa modul kao prijemnik. U funkciji loraData() prikupljamo sve podatke, izdvajamo iz Stringa i prikazujemo ih na ekranu. Funkcijom LoRa.packetRssi() očitavamo snagu primljenog signala što je jako zgodno radi izbora idealne lokacije predajnika. Biblioteka nudi još zanimljivih funkcija poput LoRa.packetSnr() koja daje odnos signal/šum. Funkcija LoRa.packetFrequencyError() vraća greške kod primljenih paketa u hercima. Dostupnih funkcija ima dosta i pre ikakve razrade projekta, imperativ je pročešljati biblioteku. Funkcijom sendToWeb() proveravamo da li je klijent povezan, i ako jeste, preko GET zahteva šaljemo tri podatka, a nakon toga zatvaramo konekciju. Web stranica na udaljenom serveru prikuplja podatke iz url adrese i upisuje ih u bazu podataka. Ista ta stranica će podatke izvući iz baze i formatirati ih u grafikon. U pitanju je blago prepravljena stranica koju smo koristili kada smo pisali o Wemos D1 ploči.Ceo sistem je kod nas radio danima uz različita testiranja. U formi našeg scenarija je radio besprekorno. Nijednog trenutka nije preskočen upis u bazu po učestalosti koju smo zadali. Testirali smo do koje razdaljine su ploče imale upotrebljivu komunikaciju. Predajnik je bio na visini od tri metra dok smo se sa prijemnikom vozili. Na ravnom i u relativno naseljenom mestu uspešno je ostvarivana komunikacija do nekih 1500-1700 metara. Već prvo ozbiljnije brdo je spustilo osetljivost na -118 decibela po metru i paketi su počeli da se gube. Što se tiče potrošnje, znamo da je ESP32 u osnovi štedljiv. U našem slučaju je u pauzama između slanja podataka ka prijemniku, predajnik trošio oko 57 miliampera, dok je prilikom slanja to išlo i do 200 miliampera. Ukoliko će sistem raditi na baterije, smanjivanje učestalosti slanja podataka i slanje ESP32 na „spavanje” je imperativ. Prijemnik je, sa druge strane, u pauzama trošio do 65 miliampera, dok prilikom slanja podataka na server potrošnja nije prelazila 100 miliampera. Iz ovoga vidimo da predajnik troši duplo više struje prilikom slanja od prijemnika koji i prima podatke i šalje ih preko Wi-Fi na server. Apsolutno smo zadovoljni Heltecovim pločama i načinom kako je implementirao ESP32 i SX1276 u jedan ekosistem koji savršeno objedinjuje Bluetooth, Wi-Fi i LoRa tehnologije, a pri tom ostaje dovoljno GPIO za raznovrsne projekte. Ukoliko imate na umu projekat gde je neophodno određene podatke sa udaljenije lokacije prebaciti u oblake, jedan ovakav sistem je odličan izbor. Cena od 32 dolara za komplet je sasvim fer. Dejan PETROVIĆ | | |