Bir çok video ve uygulama yaptık ve yavaş yavaş geniş kitlelere ulaşma imkanımız oldu. Daha geniş kesimlere hitap etme adına Lora modülünün temelleri başlıklı bir yazı hazırladım. Burada lora modüllerinden E32 433T20D ve E32 433T30D gibi modellerin bağlantı şemasını, 4 ve üzeri lora modülleri ile nasıl bir ağ oluşturabileceğimiz, veri gönderirken adresleme nasıl yapılmalı bu konular üzerine duracağız.
1.1 Lora Modülü Bağlantı Şeması
Bu şema çalışma durumundaki şemadır. Yani M1 ve M0 pinleri GND çekilmiştir. Burada dikkat edilmesi gereken 2 husus bulunmakta. Birincisi RX ve TX pinlerini neye göre arduino üzerinde 11. ve 10. pinlere bağladığımız gerçeği. Bunun sebebi siz kodu nasıl yazarsanız ona göre bağlantıyı yapmalısınız. Software serial kütüphanesini kullandığımız için arduino üzerindeki RX ve TX pinleri kullanmak zorunda değiliz. Kütüphanede biz nasıl tanımlarsak o pinleri kullanabiliyoruz. Yukarıdaki şemadaki arduino içindeki kod yapası şu şekilde başlamalıdır ki, arduino ve lora modülleri haberleşebilsin.
E22-900T22D 7km Menzilli 900MHz LoRa Modülü
SX1262 çipli, 900 MHz bandında çalışan ve 7km’ye kadar menzil sunan bir LoRa modülüdür.
Ürün Sayfasına Git10km Menzilli 433 MHz LoRa Modülü
SX1278 çipli, 1W çıkış gücüne sahip ve 10km menzilli veri iletişimi sunan bir LoRa modülüdür.
Ürün Sayfasına GitE32-433T20D LoRa Modülü
433 MHz frekansında çalışan, SX1278 çipli uzun mesafe veri iletişimi için ideal bir LoRa modülüdür.
Ürün Sayfasına Git40dBi SMA 433 MHz Anten
Bu anten, 433 MHz frekansında yüksek kazançlı bir veri iletimi sağlar ve LoRa cihazlar için idealdir.
Ürün Sayfasına Git
#include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
/*
* Pinler Arduino Nano Lora E32 433T20d
* 11 3
* 10 4
*/
LoRa_E32 e32ttl(&mySerial);
Diğer dikkat edilmesi gereken konu ise neden gerilim bölücü koyduk. Sebep oldukça basit arduino TTL (transistor to transistor logic) seviyesi 0-5V mertebesinden ancak Lora modüllerinin ise 0-3.3V mertebesinde olmaktan kaynaklanıyor. Basit bir gerilim bölücü ile arduinodan gidecek verinin lora modülüne zarar vermemesi için gerilim seviyesini oranladık.
Şemada ufak bir not ekledim. Ancak tekrarlamakta fayda var. Bazı arkadaşlarımızda 5v da devrenin istedikleri gibi çalışmadığı ancak 3.3V de daha iyi çalıştığını bildirdiler. Sizde aynı sorunu yaşıyorsanız gerilim mertebesini değiştirebilirsiniz. Çalışma aralığı 2.7-5.5v arasında olduğu için 2 volt seviyesinde de lora modülü zarar görmeyecektir.
Lora modülünün temelleri
1.2 Lora modülünde Adresleme konusunda kafası karışan arkadaşlar için
Adresleme ve kanal konusunda arkadaşlar çok fazla soru alıyorum. Şimdi konuyu baştan alırsak 2 temel haberleşme çeşidi bulunmakta Lora modüllerinde. Fixed yanı sadece adresi bilinen noktaya veri transferi, birde genel olarak yayın yapıldığı Broadcast modu. Ben genelde veri güvenliği için Fixed modu tercih ediyorum.
Bu görselde nelere dikkat etmeliyiz. Birinci kural veri göndereceğimiz noktanın adresini ve kanalı tam olarak bilmeliyiz. Diğer nokta ise fixed modda veriyi gönderen noktanın adresi ve kanalı önemli değildir. Yani fixed modda dilediğiniz adrese ve kanala veri gönderebilirsiniz.
Broadcast modda ise genel bir yayın yapımı vardır. Araba radyosu mantığı eğer kanalı biliyorsanız o noktaya veri gönderebilirsiniz. burada adres söz konusu değildir sadece kanala veri gönderebilirsiniz. o kanaldaki bütün noktalar veriyi alır. Karşı tarafın adresinin bir önemi yoktur. MQTT yapısını bilen arkadaşlar için abone mantığına benzer.
Şimdi gelelim kafanızı karıştığı noktaya. Usb programlayıcı ile programla yaptığınızda adres decimal yani 10 luk tabanda belirlenmektedir. Ancak Arduino da kullandığımız kütüphanede ise adresleme 16 lık tabanda belirlenmektedir.
Garip bir örnek ile konuyu anlatmaya çalışayım. Misal USB programlayıcıda “5555” adresini atayalım.
şimdi adresi 5555 yaptık peki arduino da adresi nasıl yazacaz çünkü kütüphanede high ve low olarak adresi 2 ye ayırmış.
Bu lora modülünün adresini arduino üzerinde şu şekilde yazmalıyız.
ResponseStatus rs = e32ttl.sendFixedMessage(21, 179, 7, &data, sizeof(Signal));
şimdi kafaların iyice karıştığına eminim 🙂 “21” ve “179” nereden geldi diye. Burada kafa karışıklığına sebep veren şey, kütüphanenin kullanmış olduğu şu metod.
ResponseStatus sendFixedMessage(byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size);
ResponseStatus sendBroadcastFixedMessage(byte CHAN, const void *message, const uint8_t size );
Şimdi burada kütüphane ile RF setting programı arasında bir sayısal dönüşüm yapmamız gerekiyor. Biz RF setting adresi 5555 yapınca görsel de kırmızı oklarla gösterdiğim gibi 5555 adresini 16 tabanda 2 ye ayırdı hıgh = 15, low=b3. Kullandığımız kütüphane ise 16 taban yerine 10 luk tabana çevirmemizi istiyor. Yani 16 lık tabanda 15, onluk tabanda 21’i, b3 ise 179’u temsil eder. Sanırım konu anlaşılır oldu.
başka bir örnek yapalım sizde misal şu adresleri Rf setting programı ile deneyin bakalım ne olacak 65535, 65536, 65537
adresi 65534 yapıyorum.
Sonuç olarak bu adres ve kanal değerinin arduino tarafındaki kod yapısı şu şekilde olmalıdır.
ResponseStatus rs = e32ttl.sendFixedMessage(255, 254, 31, &data, sizeof(Signal));
Sanırım adresleme konusu tam olarak oturdu.
Son bir hatırlatma yine yapayım USB programlayıcı ile parametre ayarlarını girerken USB stick üzerindeki jumper ları çıkartmanız lazım. Sadece 5v beslemeyi gösteren jumper kalmalıdır. RX ve TX pinleri de kısa devre olarak geldiği için o jumper i de unutmayınız. Örnek Görsel:
1.3 Lora ile ağ yapısı oluşturma ve Ağa bir çok lora modülünü dahil etmek
Bazı arkadaşlardan şu soruyu alıyorum.
Kaç tane lora modülünü bir merkeze bağlayabiliriz?
Sanırım bu adresleme örneklerimiz bu soruya direk cevap olmuştur. Dikkat edilmesi gereken durum Lora modüllerinde internet wifi ağına bağlanmak gibi bağlılık söz konusu değil siz hangi adrese veri gönderirseniz o adrese veri gidecektir. Dolayısıyla kaç tane adrese gidebileceğini yukarıdaki örnekte de göstermiş olduk. Yani kaç tane lora modülünü bağlayabilir biraz da sizin becerinize kalmış oluyor. Ama bu şekilde yüzlerce binlerce lora modülünü ağınıza dahil edebilirsiniz.
Ben genelde tarama usulu kullanarak ağımdaki diğer Lora modülleri ile haberleşiyorum. Şöyle ki, bütün adreslerin kayıt ettiğim bir merkez var. Bunu bir array ile tanımlıyorum. Sonrasında bir for döngüsü ile sırayla bütün adreslere sırayla veriyi yolluyorum. Yaklaşık 3-5sn bekleme atyorum. Cevap gelirse gelen cevabı kayıt ediyorum. Cevap gelmez ise Timeout yapıp diğer modüle geçiyorum.
Kod yapısı şöyle:
//Ağdaki diğer lora modüllerinin adresleri,
const byte Frekanslar[SensorSays] = {1, 2, 3, 4, 5, 6, 7};
void loop() {
for (MevcutMakina = 0; MevcutMakina < SensorSays ; MevcutMakina++) {
int deger1 = MevcutMakina + 1;
String text1 = ". Sensörün değerleri alınıyor...";
String sum1 = deger1 + text1;
Serial.println(sum1);
Durt(MevcutMakina);
}
Bu kod sayesinde mevcut sensor sayısı (yani ağımdaki Lora sayısı) kadar bir for döngüsü sürekli kendini yenileyip. Durt metodu ile bir tane adrese mesaj gönderip gelen cevabı işleyecek. Durt metodu da şu şekilde:
void Durt(byte i) {
ResponseStatus rs = e32ttl.sendFixedMessage(0, Frekanslar[i], 4, &kalibre, sizeof(Kalibre));
Serial.println(rs.getResponseDescription());
mesajgeldi = true;
sure = millis();
while (mesajgeldi) {
if (millis() > sure + bekleme) {
sure = millis();
int deger1 = i + 1;
String text1 = ". Sensor için Süre Doldu";
String sum1 = deger1 + text1;
Serial.println(sum1);
mesajgeldi = false;
} else {
while (e32ttl.available() > 1) {
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Kalibre));
....
//şeklinde mesaj gelirse onu artık nasıl işleyeceğiniz size kalmış
Evet arkadaşlar benim Lora modülünün temelleri yazımda anlatacaklarım bu kadar yine aklınıza takılan bir şey olursa sitemizdeki Soru&Cevap kısmından bize ulaşabilirsiniz. Bir sonraki videonun konusunu belirlemekte yardımcıda olmuş olursunuz. Olumlu yorumlarınızı bekliyorum.
Saygılarımla
Merhabalar,
RF setting v3.50 uygulamasında LoRa’mın bulundugu portu sectıkten sonra open port’a tıklayınca var olmayan bır aygıt belirtildi hatası alıyorum.
Bu konuda yardımcı olabılır mısınız acaba?
merhabalar indirme sayfamızda altta cp210xadında bir driver var onu indirip kurup tekrar dener misiniz
merhaba; yukarıda paylaştıgınız koda gore iki adet lorayı tarıyorum.her hangi bir sorun yok . Ancak arduino bir sure sonra donuyor bu yuzden watcdog timer kullanmak zorunda kalıyorum. sizde de donma sorunu oldumu .donma sorunu ne olabilir teşekkurler . aşagıya kodun ozetini paylaşıyorum.
#include “Arduino.h”
#include “LoRa_E32.h”
#include
#include
SoftwareSerial mySerial(52, 51); // using Arduino Nano
LoRa_E32 e32ttl(&mySerial);
void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);
void setup()
{
wdt_enable(WDTO_8S);
Serial.begin(9600);
delay(50);
Serial1.begin(9600);
delay(50);
e32ttl.begin();
delay(50);
Serial.println(“start!!!!!!!!!!!!”);
}
struct Message {
char message[8];
byte temperature[4];
} ;
struct MessageHumidity {
char message[8];
byte humidity;
} ;
byte Sensor = 0;
int delayy = 3500;
int times;
boolean message_coming;
boolean trig = 0;
const byte Address[2] = {1, 3};
void loop() {
// delay(100);
for (Sensor = 0; Sensor times + delayy) {
times = millis();
message_coming = false;
}
else
{
if (e32ttl.available() > 1) {
char type[5];
ResponseContainer rs = e32ttl.receiveInitialMessage(sizeof(type));
String typeStr = rs.data;
}
}
}
}
Seçkin hocam soruyu sorucevap sayfamıza yazar mısınız? ilk gördüğüm kodda bir kaç hata var zaten arduino ide derleme hatası verecektir.
birde şu kodu gördümnano mu kullanıyorsunuz Mega mı?
SoftwareSerial mySerial(52, 51); // using Arduino Nano
Hocam gerilim bölücü dirençleri kullanmazsak ne gibi sorunlarla karşılaşabiliriz?
Arduino RX ve TX haberleşme sistemi TTL (transistör to transistor logic level) seviyesi 5v mertebesindedir, LoRa nın ise TTL seviyesi 3.3 volt mertebesinde olduğu için Arduinodan giden 5v lora cihazının RX pininde ısınmaya ve uzun süreli kullanımda bozulmasına sebebiyet verir. Ürünün bilgi kağıdında da bu şekilde yazıyor.
Hocam Fritzing dosyasındaki lora modülünün şeklini atabilir misiniz? İnternette şeklini bulamadım. Fritzing de kullanan yok.
indirme sayfasına ekliyorum
Hocam tam olarak bir ağa kaç tane lora bağlanır anlayamadım
Merhabalar, 10k direnç ile 20k dirençlerinin yerleri tam tersi gerekmiyor mu ?
evet haklısın çizim hatalı olmuş düzeltirim