avatar_ete

LORA modülleri

Başlatan ete, 23 Eylül 2024, 14:36:28

ete

Arkadaşlar,

Lora RF modülleri ile çalışanınız oldumu diye sormak istiyorum.
Bu modüllerin Adres, Kanal ve diğer bazı bilgilerinin isteğinize göre değiştirilmesi mümkün ancak hemen herkesin ayrıca satılan bir USB Stick ile bu işi yaptığını görüyorum.

Ben ise data sheetleri inceleyip bir kaç yayınlanmış makale okuduktan sonra bu işi Config ayarlama şeklinde program içine eklenecek bir kod ile yapmayı düşündüm ancak bir sürü şey denememe rağmen başarılı olamadım. Boşuna çabalamayım diye sizlerede bir sorayım istedim.

Öncelikle bu modülleri önceden duymuş ancak hiç alıp da çalışmamış idim. Şimdi amacım basit iki modülü haberleştirme işi. Kullandığım modul E22-400T22D . Data sheet'i mevcut ancak kısır bilgi verecek şekilde düzenlenmiş. İşin detayına girmeden bu konuda bana bilgi verebilecek birisi varmıdır sormak istiyorum.
Maalesef internette Basic kullanarak bu işi başarmış birini göremedim. İnşallah ilk ben olurum.
Belkide ben bulamadım. EN son Proton sitesi kalmıştı orayada bakmadım henüz. Çalıştığı söylenen örnekler var ama maalesef Arduino ile çalışan örnekler var ve hazır kütüphaneler kullanıldığı için işin detayını onlardan öğrenmek pek mümkün değil. Bu nedenle C dili örnekleri işime yaramıyor.


Ete


Serk@n77

Hocam fixaj.com'da gerekli bilgileri bulabilirsiniz.

Serk@n77

Serial iletişim kodları ile bu yapılabiliyor. Sitede yerini bulamazsanız ben tekrar bakayım. Zamanında bu siteden istifade etmiştim.

ete

Fixaj dan çok yararlanamadım. Ama aşağıdaki linkte
https://mikrodunya.wordpress.com/2021/04/04/8-0km-mesafeli-lora-modulu-ebyte-e32/

daha anlaşılır anlatılmış örnekleri de vermişler.
Burada Sleep modunu kullanmışlar config ayarı için. Önce modülü bu moda sokup 250 ms beklemiş ve ardından aşağıdaki kodları yollamışlar. Aşağıdaki sıralı rakamları bir dizi değişkenine yerleştirip sırası ile döngü kullanarak aktarmışlar. Aktarma kısmı kütüphanede neyi nasıl yapmış belli değil.MUhtemelen SPI gibi bit bit aktarmışlardır.

 
"0xc2, 0x00, 0x01, 0x1a, 0x17, 0xc4" verileri arka arkaya gönderildiğinde parametre ayarları aşağıdaki gibi olacaktır.

Ete

0xc2 : Kayıt Ayarı. Güç kesildiğinde ayar verilerini kaydetme.
0x00,0x01 : Adres Ayarı. Adres 0001 olarak ayarlanıyor.
0x1a : UART Ayarı. 0x1a= 0b00011010 –> 00: 8N1, 011: 9600bps, 010: Air baud 2400 bps.
0x17 : Kanal Ayarı. 0x17= 23, 410MHz+23MHz=433MHz.
0xc4 : Çeşitli Ayarlar. 0xc4= 0b11000100 –> 1: Sabit iletişim, 1: Push-pull TX,RX, 000: wakeup time(bu uygulamada sleep olmadığı için kullanılmıyor)., 1: FEC açık., 00: Güç 30dBm

ete

@Pepe, thank you for the link but it is far away from me they work over the SX1278 chip. The messages are not so helpfull. Continue to look for something better.

Bazı sorunlarımı açıklasam sanırım daha yararlı olacak ne istediğime dair.

Söz konusu modul bilgi formunda 4 adet çalışma modundan bahsediliyor. Mod-0, Mod-1, Mod-2 ve Mod-3
Bunlardan Mod-2 için Konfigurasyon modu denilmiş. Mod seçimi Modülün M0 pini ile M1 pini kullanılıyor. Mod-2 için M0=0 ve M1=1 yapılması yeterli oluyor. Bu aşamadan sonra, yine bilgi formunda verilen Komut formatlarına bakıyorum.
1 nolu komut SET_REGISTER komutu ki bana bu lazım. Bu komut ile değiştirilen register değerleri kayıt altına alınıyor güç kesilince değişmiyor. Bende öyle istiyorum. Komut formatına bakacak olursak;
C0 + Starting Address + Byte_Adedi + Parametreler
Burada $C0 set register işini yaptıran komut , Starting Adres ise registerin başlangıç adresi oluyor sonra Kay Byte lık bilgi vereceksin onu belirtiyorsun ve sonunda parametreyi yani değişmiş bilgiyi veriyorsun. Örnek vermiş , Kanal Numarasını 9 yapalım demiş. Bunun için,
$C0  $05  $01  $09 bilgilerinin verilmesi gerekiyor. Şimdi ben soruyorum. Modüle TX ve RX pinleri ile UART sistemi ile bağlı iken bu bilgileri modüle nasıl ileteceğim.
Ben Hserout [$C0,$05,$01,$09] şeklinde veriyorum bir şey değişmiyor.

BU modülün Mod-3 seçeneği Sleep mode oluyor ve bütün bu işi yapmış sitelerde Konfigurasyon işlemini bu modda yapıyorlar. Bunu kullandıkları modülün farklılığına veriyorum. Ancak kullandıkları modulun bilgi formuna bakınca aynı bilgileri görüyorum.

Diğer bir meselede Adres kullanımı hakkında. İlk adres registeri ADDH sıfır nolu hafızada yer alıyor.Bir sonraki ise ADDL oda 1 nolu hafızada. Ama kullanıcılar bu adreslere değer verirken sıralamada önce LOWByte sonra HIGHByte veriyorlar. Bu adres hafıza sıralamasına ters buda kafa karışıklığı yaratıyor.

Cevaplayamadığım diğer bir konu ise Fixed Transmission veya Broadcasting haberleşme modu için bilgi formlarına bir şekil yerleştirmişler.
Bir Verici yada bilgisayar her neyse 00 03 04 AA BB CC bilgisini yolluyor. Yollayanın adres ve kanal bilgisi 00 01 02 şeklinde. Karşısında 3 adet alıcı var. Birincisi 00 03 04 adres-kanal bilgisine sahip ve o bilgiyi AA BB CC olarak alıyor.
Diğer alıcı 00 05 04 adres-kanal bilgisine sahip herhangi bir şey alamıyor. Üçüncüsüde benzer şekilde farklı adres ve kanal bilgisine sahip olduğu için bir şey alamıyor.
Şimdi burada benim sorum şu, Birinci alıcı gelen bilgiyi ADRES.LowByte , ADRES.HighByte , Kanal_No, AA, BB, CC olarakmı alıyor yoksa adres ve kanal bilgilerini Modül alıp karşılaştırıyor ve aynı ise yalnızca AA BB CC olarak 3 adet bilgiyimi alıyor. Bunu neden soruyorum. Be bilgi alım kısmında kaç değişken kullanalıyım ki gelen bilgileri alabileyim. Benim sistemim yalnızca 1 byte yolluyor. Bu durumda tek değişkenmi yoksa Adres için2 ve kanal için 1 ve bilgi için 1 olmak üzere 4 değişken mi kullanmalıyım. Data sheet de buna dair bilgi yok maalesef.

Toparlarsak konfigurasyon işlemi için hangi modu kullanmalıyım. Mod-2 mi yoksa Mod-3 mü.
Hadi modu belirledik konfig işini nasıl yapmalıyım.

Ete


enes

Uzun zaman once bi calısmam olmustu bu modullerle.
ekte en basıt halıyle tx rx calısma dosyaları mevcut.
bi inceleyın ıstersenız hocam belkı ısınıze yarar.

aslında dorjı modullerden daha kolay bu modullerın kullanımı.

Serk@n77

Hocam konfigürasyon işlemi öncesi

M0, LOW
M1, HIGH

İşlem tamamlandığında ise her iki pinin LOW yapılması gerekiyor.

ete

Bu zaten birinci şart. Modülü Mod-2 ye sokuyor. Bizim modülde konfigürasyon modu oluyor.
Daha sonra her iki pinin LOW yapılması ile modül normal çalışma moduna sokulmuş oluyor.
Bunları elbette yapıyorum.

Ete

Serk@n77

Hocam RF settings programı kurularak ve onun USB üzerinden Lora modülüne gönderdiği veriler incelenerek bir sonuca ulaşılabilir miyiz? Bu veriler size fayda sağlarsa (fakat iki hafta sonra) size gönderebilirim.

Parametreleri değiştirerek gönderdiği verileri inceleyebiliriz.

Bende USB stickin işlevini gören bir Arduino uyumlu kart var.

ete

#10
Elindeki kart acaba Arkis firmasının geliştirme kartımıdır.
https://arkis.com.tr/?page_id=467

Arduino ile hiç çalışmadığım için ne ona program atacak bir ekipmanım nede bilgim var.
Ancak Geliştirme kartı üzerindeki arduino ya kısa bir program atılıp ki bu program anladığım kadarı ile haberleşme pinlerini tanımlamak amacı ile atılıyor Arayüz programı ile bunu kartı kullanmak mümkün olabiliyor.

Yada daha farklı bir yöntem gerekiyor ise sana sorayım. Bu yollayacağın kart ile ben USB arayüz programına (PC de) bağlanıp parametreleri hem görebilir hemde değiştirebilirmiyim?
Bunu sağlamak için kart üzerindeki Arduinoya o kısa programın atılması gerekeceke bunu sen yapabilirsen gerisinide ben yaparım diye düşünüyorum.

15 gün uzun bir süre aslında ama çare yok ise beklerim. Yeterki sonuç alabilelim.

Ete

aRci

Merhaba;
Lora22 ile deneme yaptım ama detaylı çalışmam olmadı daha çok lora32 ile bir çalışmam oldu. ikisi arasında güç tüketimi veri şifreleme ,uzaktan ayar değişimi ve otomatik tekrarlayıcı gibi farklılıklar var. Tavsiye olarak hiç bir ayar yapmadan iki cihazı haberleşme denemesi yaptıktan sonra teste başlayın.

Lora32 için ornek parametreleri alttaki şekilde yükleniyor.
hserout [$C0, add.highbyte, add.lowbyte, sped, chan , optn]

temel de aynı parametre kullanımına sahipler diye hatırlıyorum size lora32 uzerinden hatırladığım kadarını açıklmak isterim.

Genelde Lora32 örnekleri var belkide bundan dolayı ayar modu için mod3 görülmekte ama Lora22 de mod2 yapmışlar.

cihazı mod2 aldıktan sonrası Lora32 den farklı olarak adresleme varki bu kısımı bende yeni gördüm. Veri haberleşmesi hseroutla belirttiğiniz gibi yapmamız gerekiyor. Ama mod2 de yapmanız lazım. cevap alamamanın sebebi baud ayarı olmalı bende ilk denemelerimde pc de deneyerek baudu 9600 yapmış daha sonra test etmiştim bu şakilde sağlıklı başlangıc yapabilmiştim.

cihazda bilindiği gibi 2 adet haberleşme sistemi var biri ttl biri ise hava iletim hızı şeklinde ikisi de birbirinden farklı dır.

Cihazın kanal olarak belirttiği parametresi rf frekans ayarı için buradan çalışma frekansının değiştirisiniz. haberleşeceğiniz cihazda bu değer aynı olmalı.

Adres parametresi cihaza verilen bir numara 2 byte dsan oluşur burada internet örneklerini bilmiyorum ama datasheet e göre once highbyte gönderilmeli aslında burada veriyi nasıl yüklerseniz yükleyin alıcı da aynı şekilde yükledikten sonra farketmez.

Lora32 de Cihazın transparan ve fixed adında iki rf haberleşme modundan transparan genel yayın olarak düşünelim. ilgili kanal üzerindeki tüm transparan moddaki ( Hatırladığım kadarı ile ) cihazlar tarafından alınıyor ken Fixed modda ise kanal haricinde adres verisi eşleşirse gelen veriyi almakta bu modda veri gönderirken verini başına alıcı olan cihazın adres verisini göndermeliyiz
ornek olarak alıcı cihaz adres "$12","$34" veri ise "Deneme" olsun
Hserout [$12,$34,"Deneme"] şeklinde veri gönderilir alıcıda ise çıkış olarak sadece "Deneme" verisini göreceksiniz.

Lora22 de ise birde networkId var bunun uygulamasını bilmiyorum ama sadece Fixed modda adres verisnden sonra yazılması gerekiyor gibi.

Serk@n77

#12
Ete hocam evet gönderdiğiniz linkteki karta benzer bir kart. Ama bende bulunan kartta Arduino yerine ESP32 var. Neticede aynı mantıkla çalışıyor. Yani "RF Settings" diye bir program var. Bu program Arduino'ya USB üzerinden konfigürasyon bilgilerini gönderiyor.

Arduino'nun buradaki işlevi sadece şu: M0,M1 pinlerini hazırlıyor, (M1, high) USB üzerinden gelen kodları USB-TTL ile alıyor, aldığı tüm kodları birebir Lora modülüne gönderiyor, işlem bitince M1 pinini toprağa çekiyor.

Siz, arada "USB Stick" ve "RF Settings" olmadan Lora modülüne veri aktarmak istiyorsunuz.

Arduino'nun programına baktım. USB'den veriyi al, birebir gönder diyor. Ben de verileri hem gönder hem de ekranda göster komutu verip bu verileri sizinle paylaşmak istemiştim.

Sürenin 15 gün olması da maalesef elimin şu an biraz sıkışık olması. Lora modülü almak için.

Normalde kartı göndermeden, verileri burada paylaşayım istemiştim. Mesela sizin istediğiniz konfigürasyon ayarlarına göre olan data satırını tespit edelim. Bunu direkt olarak pic'ten Lora modülüne yazdırabilmeniz için.

Veya konfigürasyon ayarlarını sürekli değiştirip tekrar tekrar veriler alıp data satırındaki veri sırası mantığını çözebilmemiz için.

Ama kart göndermemi isterseniz de gönderebilirim tabiki. Yalnız Arduino programına Lora modülü takılıyken değişiklik yaparsam daha iyi olur. Belki teoride tahmin ettiğim şeyden farklı bir durum oluşur.

elektro77

Belki aşağıdaki kodlar bir işe yarar Hocam.

' UART configuration for communication
DEFINE HSER_RCSTA 90h   ' Enable UART receive
DEFINE HSER_TXSTA 24h   ' Enable UART transmit, BRGH = 1
DEFINE HSER_SPBRG 25    ' Baud rate of 9600 (check if your module uses a different rate)
DEFINE HSER_CLROERR 1   ' Automatically clear overflow errors

' Pin definitions for M0 and M1 to control the mode
M0_PIN VAR PORTB.0   ' Define M0 pin (connect to MCU GPIO)
M1_PIN VAR PORTB.1   ' Define M1 pin (connect to MCU GPIO)

' Set module to Mode-2 (M0 = 0, M1 = 1)
LOW M0_PIN    ' M0 = 0
HIGH M1_PIN   ' M1 = 1
PAUSE 100     ' Small delay to ensure mode change

' Command to set the channel register (example: set channel to 9)
Command VAR BYTE[4]     ' Array to hold the command
Command[0] = $C0        ' SET_REGISTER command
Command[1] = $05        ' Starting address for channel register
Command[2] = $01        ' Number of bytes to write (1 byte)
Command[3] = $09        ' Channel number (9)

' Send the command via UART
HSEROUT [STR Command\4]  ' Send the command array over UART

' Wait for the module to process the command
PAUSE 100

' Optionally read the response (if needed)
Response VAR BYTE[4]
HSERIN 1000, Timeout, [STR Response\4]  ' Read response within 1 second timeout

Timeout:
  ' Handle timeout or errors here

END


"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Ümit teşekkür ederim. Kodları nerden buldun onu merak ettim.
Aşağıda benim uyguladığım Config alt programı varki esas olarak aynı mantık kullanılıyor.
CONFIG:  ' $C0, Başlangıç_Adresi, Byte_Adedi, Parametre(ler)
       M0=0:M1=1:PAUSE 250

       HSEROUT [$C0,$00,$07,$00,$01,$00,$62,$00,$17,$40] '0 nolu hafızadan itibaren 7 adet byte yaz
       M0=0:M1=0:PAUSE 250
       RETURN 

Senin verdiğin kodlarda sadece Kanal numarasını değiştirmiş belkide örnek vermek için yapıldı.
Bu arkadaş geri parametre okumasıda yapmış. Ben yapmadım. Belkide yapıp test etmek en iyisi.

Ete

Powered by EzPortal