Lora ile “Merhaba” Yazısını 2×16 LCD Seri Ekrana Gönderme

Bu makale Lora-Nano Geliştirme kitinin birinci versiyonuna (V1) göre hazırlanmıştır.

Bu projemizde Lora modülü kullanarak “Merhaba” verisini 2X16 LCD seri ekrana göndereceğiz. Verici ve alıcı olmak üzere 2 adet bağlantı yapacağız. Verici taraftan gönderilen “Merhaba” verisi, alıcı tarafın LCD ekranında yazdırılacak. Lora ve Arduino Nanoların konfigürasyonu ve bağlantısı için Arkış Mühendislik tarafından geliştirilen LoRa-Nano Geliştirme Kitini kullanacağız.

Lora Nedir?

LoRa, uzun menzilli ve düşük güç tüketen bir kablosuz haberleşme teknolojisidir. LoRa (Long Range: Uzun Menzilli) terimi, cihazların birbirleriyle iletişim kurabilmesi için kullanılan bir protokolü ve fiziksel haberleşme katmanını ifade eder. Genellikle 1 GHz altı ISM frekans bantlarında (433Mhz, 868MHz, ,915MHz vb.) çalışır. Tarım, endüstriyel otomasyon, akıllı şehirler ve akıllı ev cihazları gibi birçok alanda kullanılır.

Kullanacağımız Malzemeler

2 adet Lora E22900T22D

2 adet Arduino Nano ve USB kablo

2 adet Lora Nano Geliştirme Kiti

2 adet 868 Mhz Anten.

1 adet 2×16 LCD ekran(I2C modüllü)

4 adet dişi-erkek jumper

Verici (Transmitter) Bağlantısı

Verici bağlantısı için Arduino Nano ve Lora E22900T22D modülünü yerlerine takmak yeterlidir.

Alıcı (Receiver) Bağlantısı

2×16 LCD Ekranın bağlantısı için, geliştirme kitimizin yanında bulunan soketlerden yararlanıyoruz. LCD ekranın bağlantısı için aşağıda bulunan görselde ki nottan yararlanabilirsiniz.

Konfigürasyon

Geliştirme kitimiz ile konfigürasyon da yapabilirsiniz. Kart,  kullanım ve konfigürasyon imkanını birlikte sağlamaktadır.

Verici modülümü bilgisayarıma takıp konfigürasyon kodumu yüklüyorum.  Ardından Ebyte firması tarafından geliştirilen RFSettings uygulamasını açıyorum. Verici için adres satırına 1 Kanal satırına 18 yazıyorum. Tran modu fixed seçip , ayarları kaydedip çıkıyorum. Aynı işlemleri alıcı modül içinde yapıyorum. Alıcı için adres satırına 2 kanal satırına 18 yazıyoruz. Tran modu fixed seçip kaydedip çıkıyoruz. Frekans aralığını değiştirme gereği duymuyorsak her bir lora modülü için konfigürasyonu bir kez yapmak yeterlidir.

Konfigürasyon Kodu
#include <SoftwareSerial.h>
   
SoftwareSerial mySerial(10, 11); // RX, TX
   
#define M0 7
#define M1 6
   
void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
   
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, HIGH);
}
   
void loop() {
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
   
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
}
RF Settings Nasıl İndirilir?

Aşağıdaki linke tıklayarak Lora E22-900T22D için RF Setting programını indirebilirsiniz.

RF Setting İndirme Linki: https://arkis.com.tr/dosyalar/lora/RF_SettingE22-E90SLV2.0.zip

Kodlar

Verici kısmın kodunu inceleyelim.İlk olarak kütüphaneleri dahil ediyoruz.“mySerial” isimli bir SoftwareSerial nesnesi oluşturuyoruz. Bu, LoRa_E22 modülü ile haberleşmek için kullanılacaktır. 10 ve 11 parametreleri, RX ve TX pinlerinin bağlandığı pin numaralarını belirtir.E22 isimli bir LoRa_E22 nesnesi oluşturuyoruz ve mySerial nesnesini kullanarak LoRa_E22 modülüne bağlanmasını sağlıyoruz.M0 sabitini Nanonun D7 pinine M1 sabitini nanonun D6 pinine tanımlıyoruz. Bu pinler, E22 modülünün çalışma modunu seçmek için kullanılacaktır. deger adında maximum 15 karakterlik bir dizi tanımlıyoruz.M0 ve M1 pinlerini çıkış için ayarladık ve çıkış gerilimlerini 0 Volt yaptık. data.deger ifadesi data değişkeninin deger elemanına erişmek için kullanılır. E22.sendFixedMessage komutunda ise ilk satıra 0, 2. satıra alıcının adresini , 3.satıra ise kanal adresini yazıyoruz.

Verici
////VERİCİ////
#include <LoRa_E22.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
LoRa_E22 E22(&mySerial);
#define M0 7
#define M1 6
struct veriler {   
 char deger[15];    //deger adında maksimum 15 karakterlik bir dizi tanımladık
} data;
void setup() {
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  Serial.begin(9600);
  E22.begin();
  delay(500);
}
void loop() {
  sprintf(data.deger,"Merhaba");
  ResponseStatus rs = E22.sendFixedMessage(0, 2, 18, &data, sizeof(veriler));
  Serial.println(rs.getResponseDescription());
  delay(2000);
}
Alıcı

Alıcı kısmın kodunu inceleyelim. Alıcı tarafta da kütüphanelerimizi dahil edip, verici kısımda yaptığımız gerekli tanımlamaların aynısını yapıyoruz.  LCD ekran ile ilgili olan kodların açıklamalarına yanlarında yer verildi.Alıcı modülümüz Merhaba verisini alacak 1 saniye ekranında tutacak ve ardından ekranını temizleyecektir.

/////ALICI////
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);   ///LCD ekranınız çalışmadı ise 0x27 yerine 0x3f değerini girin
#include "LoRa_E22.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
LoRa_E22 E22(&mySerial);
#define M0 7
#define M1 6
struct veriler {
  char deger[15];   //deger adında maximum 15 karakterlik dizi tanımladık
} data;
void setup() {
  lcd.init();         //LCD'yi başlatır
  lcd.backlight();    //LCD arka plan ışıklarını açar.
  
  pinMode(M0, OUTPUT);
  pinMode(M1, OUTPUT);
  digitalWrite(M0, LOW);
  digitalWrite(M1, LOW);
  
  Serial.begin(9600);
  E22.begin();
  delay(500);
}
void loop() {
  while (E22.available()  > 1) {
    ResponseStructContainer rsc = E22.receiveMessage(sizeof(veriler));
    struct veriler data = *(veriler*) rsc.data;
    lcd.print(data.deger);   //LCD ekrana yazı için kullanılır.
    delay(1000);             //1 saniyelik bekleme ekler.
    lcd.clear();             //LCD'de görüntülenen metni siler.
    
    Serial.println(data.deger);// Gelen değeri Arduino seri ekranda okumaya imkan sağlar.
    
    rsc.close();             
  }
}