İçindekiler:
- Gereçler
- 1. Adım: Kitaplık
- 2. Adım: Pin Çıkışı
- 3. Adım: AUX Pimi
- Adım 4: Tam Bağlantılı Şema Esp8266
- Adım 5: Tamamen Bağlı Şema Arduino
- Adım 6: Kitaplık: Yapıcı
- 7. Adım: Başlayın
- Adım 8: Yapılandırma ve Bilgi Yöntemi
- 9. Adım: Yanıt Kapsayıcı
- Adım 10: Temel Yapılandırma Seçeneği
- Adım 11: Alma Mesajı Gönder
- Adım 12: Normal İletim Modu
- Adım 13: Yapıyı Yönetin
- Adım 14: Normal Mod Yerine Sabit Mod
- Adım 15: Teşekkürler
Video: Arduino, Esp8266 veya Esp32 için Düşük Maliyetli E32 (sx1278/sx1276) Cihazı ile LoRa 3Km - 8Km Kablosuz İletişim: 15 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Çok güçlü, basit ve ucuz bir cihaz olan Semtech serisi LoRa cihazına dayalı EBYTE E32'yi yönetmek için bir kütüphane oluşturuyorum.
3Km versiyonunu burada, 8Km versiyonunu burada bulabilirsiniz.
3000m ile 8000m mesafelerde çalışabilirler ve bir çok özellik ve parametreye sahiptirler. Bu yüzden kullanımı basitleştirmek için bu kütüphaneyi oluşturdum.
Büyükşehir sensörlerinden veri almak veya drone'u kontrol etmek için bir çözüm.
Gereçler
Arduino UNO'su
Wemos D1 mini
LoRa E32 TTL 100 3Km versiyonu
LoRa E32 TTL 1W 8Km versiyonu
1. Adım: Kitaplık
Kütüphaneme buradan ulaşabilirsiniz.
İndirmek.
Sağ üst köşedeki İNDİR düğmesine tıklayın, sıkıştırılmamış LoRa_E32 klasörünü yeniden adlandırın.
LoRa_E32 klasörünün LoRa_E32.cpp ve LoRa_E32.h içerdiğini kontrol edin.
LoRa_E32 kitaplık klasörünü /libraries/ klasörünüze yerleştirin. İlk kitaplığınızsa, kitaplıklar alt klasörünü oluşturmanız gerekebilir.
IDE'yi yeniden başlatın.
2. Adım: Pin Çıkışı
Gördüğünüz gibi M0 ve M1 pinleri ile çeşitli modlar ayarlayabilirsiniz.
Statik olarak kullanılabilecek bazı pinler vardır fakat mikrodenetleyiciye bağlayıp kütüphanede yapılandırırsanız performans kazanırsınız ve tüm modları yazılım üzerinden kontrol edebilirsiniz ama bundan sonra daha iyi anlatacağız.
3. Adım: AUX Pimi
Zaten söylediğim gibi, tüm pinleri mikrodenetleyicinin çıkışına bağlamak önemli değil, istediğiniz konfigürasyonu elde etmek için M0 ve M1 pinlerini YÜKSEK veya DÜŞÜK olarak ayarlayabilirsiniz ve AUX bağlamazsanız kitaplık emin olmak için makul bir gecikme ayarlayın. işlemin tamamlanmış olmasıdır.
AUX pimi
Veri iletirken, harici MCU'yu uyandırmak ve veri aktarımı bitiminde YÜKSEK döndürmek için kullanılabilir.
AUX alırken DÜŞÜK gidiyor ve arabellek boşken YÜKSEK dönüyor.
Ayrıca normal çalışmayı geri yüklemek için kendi kendini kontrol etmek için de kullanılır (güç açıkken ve uyku/program modunda).
Adım 4: Tam Bağlantılı Şema Esp8266
esp8266 bağlantı şeması daha basittir çünkü aynı voltajda mantıksal iletişim (3.3v) çalışır.
İyi bir stabilite elde etmek için pull-up direnci (4, 7Kohm) eklemek önemlidir.
Adım 5: Tamamen Bağlı Şema Arduino
Arduino çalışma voltajı 5v olduğu için LoRa modülünün RX pin M0 ve M1'ine bir voltaj bölücü eklememiz gerekiyor.
GND'ye 2Kohm direnç ve RX'te bir araya getirmek yerine sinyalden 1Kohm kullanabilirsiniz.
Adım 6: Kitaplık: Yapıcı
Oldukça çok sayıda yapıcıdan oluşan bir set oluşturdum çünkü yönetmemiz gereken daha fazla seçenek ve durum olabilir.
LoRa_E32(bayt rxPin, bayt txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32(bayt rxPin, bayt txPin, bayt auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600); LoRa_E32(bayt rxPin, bayt txPin, bayt auxPin, bayt m0Pin, bayt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
İlk kurucu seti, Seri ve diğer pinlerin yönetimini kitaplığa devretmek için oluşturulur.
rxPin ve txPin, UART'a bağlanmak için kullanılan pinlerdir ve zorunludurlar.
auxPin, işlemi, iletimi ve alım durumunu kontrol eden bir pindir (daha sonra daha iyi açıklayacağız), o pin Zorunlu değildir, eğer ayarlamazsanız, işlemin kendi kendine tamamlanmasına izin vermek için bir gecikme uygularım (gecikme ile).
m0pin ve m1Pin, çalışma MODU'nu değiştirmek için kullanılan pinlerdir (yukarıdaki tabloya bakın), “üretim”deki bu pinlerin doğrudan YÜKSEK veya DÜŞÜK bağlanacağını düşünüyorum, ancak test için kütüphane tarafından yönetilmeleri faydalı olacaktır.
bpsRate, SoftwareSerial'in boud hızıdır, normalde 9600'dür (programmin/uyku modundaki tek baud hızı)
Basit bir örnek
#include "LoRa_E32.h"LoRa_E32 e32ttl100(2, 3); // RX, TX // LoRa_E32 e32ttl100(2, 3, 5, 6, 7); // RX, TX
Başka bir kurucu ile doğrudan bir SoftwareSerial kullanabiliriz
LoRa_E32(HardwareSerial* seri, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32(HardwareSerial* seri, bayt auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32(HardwareSerial* seri, bayt auxPin, bayt m0Pin, bayt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
Bu kurucu ile üst örnek böyle yapılabilir.
#include #include "LoRa_E32.h"
YazılımSerial mySerial(2, 3); // RX, TX
LoRa_E32 e32ttl100(&mySerial);
// LoRa_E32 e32ttl100(&mySerial, 5, 7, 6);
Son yapıcı seti, SoftwareSerial yerine bir HardwareSerial kullanımına izin vermektir.
LoRa_E32(SoftwareSerial* seri, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32(SoftwareSerial* seri, bayt auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32(SoftwareSerial* seri, bayt auxPin, bayt m0Pin, bayt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
7. Adım: Başlayın
Start komutu, giriş ve çıkış modunda Seri ve pinleri başlatmak için kullanılır.
geçersiz başlangıç();
yürütmede
// Tüm pinleri ve UART'ı başlat
e32ttl100.begin();
Adım 8: Yapılandırma ve Bilgi Yöntemi
Yapılandırmayı yönetmek ve cihaz hakkında bilgi almak için bir dizi yöntem vardır.
ResponseStructContainer getConfiguration();
ResponseStatus setConfiguration(Yapılandırma yapılandırması, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation();
void printParameters(yapı Yapılandırma yapılandırması);
ResponseStatus resetModule();
9. Adım: Yanıt Kapsayıcı
Yanıt yönetimini basitleştirmek için, hataları yönetmek ve genel verileri döndürmek için benim için çok yararlı bir şekilde bir kapsayıcı seti oluşturuyorum.
Yanıt Durumu
Bu bir durum kabıdır ve 2 basit giriş noktasına sahiptir, bununla durum kodunu ve durum kodunun açıklamasını alabilirsiniz.
Serial.println(c.getResponseDescription()); // Kodun açıklaması
Serial.println(c.code); // 1 ise Başarılı
kod
BAŞARI = 1, HATA_ BİLİNMİYOR, ERR_NOT_SUPPORT, ERR_NOT_UYGULAMA, ERR_NOT_INITIAL, ERR_INVALID_PARAM, ERR_DATA_SIZE_NOT_MATCH, ERR_BUF_TOO_SMALL, ERR_TIMEOUT, ERR_HARDWARE, ERR_HEAD_NOT_TANINMIŞ
YanıtKapsayıcı
Bu kapsayıcı, String yanıtını yönetmek için oluşturulur ve 2 giriş noktasına sahiptir.
iletiden döndürülen dizeye sahip veriler ve bir RepsonseStatus örneği durumu.
ResponseContainer rs = e32ttl.receiveMessage();
String mesajı = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(mesaj);
YanıtStructContainer
Bu daha “karmaşık” kapsayıcıdır, bunu yapıyı yönetmek için kullanıyorum, ResponseContainer'ın aynı giriş noktasına sahip ancak veriler karmaşık yapıyı yönetmek için geçersiz bir işaretçi.
ResponseStructContainer c;
c = e32ttl100.getConfiguration();// Diğer tüm işlemlerden önce yapılandırma işaretçisini almak önemlidir
Konfigürasyon konfigürasyonu = *(Konfigürasyon*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
getConfiguration ve setConfiguration
İlk yöntem getConfiguration'dır, cihazda depolanan tüm verileri almak için kullanabilirsiniz.
ResponseStructContainer getConfiguration();
İşte bir kullanım örneği.
ResponseStructContainer c;
c = e32ttl100.getConfiguration();// Diğer tüm işlemlerden önce yapılandırma işaretçisini almak önemlidir
Konfigürasyon konfigürasyonu = *(Konfigürasyon*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
Serial.println(configuration. SPED.getUARTBaudRate());
Yapılandırmanın yapısı tüm ayar verilerine sahiptir ve tek verilerin tüm açıklamalarını almak için bir dizi işlev ekliyorum.
konfigürasyon. ADDL = 0x0; // addressconfiguration'ın ilk kısmı. ADDH = 0x1; // Adres konfigürasyonunun ikinci kısmı. CHAN = 0x19;// Kanal konfigürasyonu. OPTION.fec = FEC_0_OFF; // İleri hata düzeltme anahtarı konfigürasyonu. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // İletim modu yapılandırması. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Çekme yönetimi yapılandırması. OPTION.transmissionPower = POWER_17; // dBm iletim gücü konfigürasyonu. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Uyandırma yapılandırması için bekleme süresi. SPED.airDataRate = AIR_DATA_RATE_011_48; // Hava veri hızı konfigürasyonu. SPED.uartBaudRate = UART_BPS_115200; // Haberleşme baud hızı konfigürasyonu. SPED.uartParity = MODE_00_8N1; // eşlik biti
Tüm açıklamaları almak için tüm öznitelik için eşdeğer bir işleve sahipsiniz:
Serial.print(F("Chan: ")); Serial.print(configuration. CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());Serial.println(F(" ")); Serial.print(F("SpeedParityBit: ")); Serial.print(configuration. SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration. SPED.getUARTParityDescription()); Serial.print(F("SpeedUARTDatte: ")); Serial.print(configuration. SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration. SPED.getUARTBaudRate()); Serial.print(F("SpeedAirDataRate: ")); Serial.print(configuration. SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration. SPED.getAirDataRate()); Serial.print(F("OptionTrans: ")); Serial.print(configuration. OPTION.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration. OPTION.getFixedTransmissionDescription()); Serial.print(F("OptionPullup: ")); Serial.print(configuration. OPTION.ioDriveMode, BIN);Serial.print(" -> "); Serial.println(configuration. OPTION.getIODroveModeDescription()); Serial.print(F("OptionWakeup: ")); Serial.print(configuration. OPTION.wirelessWakeupTime, BIN);Serial.print(" -> "); Serial.println(configuration. OPTION.getWirelessWakeUPTimeDescription()); Serial.print(F("OptionFEC: ")); Serial.print(configuration. OPTION.fec, BIN);Serial.print(" -> "); Serial.println(configuration. OPTION.getFECDescription()); Serial.print(F("OptionPower: ")); Serial.print(configuration. OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration. OPTION.getTransmissionPowerDescription());
Aynı şekilde setConfiguration bir konfigürasyon yapısı istiyor, bu yüzden konfigürasyonu yönetmenin daha iyi yolunun mevcut olanı almak, ihtiyacınız olan tek değişikliği uygulamak ve tekrar ayarlamak olduğunu düşünüyorum.
ResponseStatus setConfiguration(Yapılandırma yapılandırması, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
yapılandırma, önceden gösterilen yapıdır, saveType, değişiklik yalnızca geçerli oturum için kalıcı hale gelirse, seçim yapmanıza izin verir.
ResponseStructContainer c;c = e32ttl100.getConfiguration(); // Diğer tüm işlemlerden önce yapılandırma işaretçisini almak önemlidir Configuration configuration = *(Configuration*) c.data; Serial.println(c.status.getResponseDescription()); Serial.println(c.status.code); printParameters(yapılandırma); konfigürasyon. ADDL = 0x0; konfigürasyon. ADDH = 0x1; konfigürasyon. CHAN = 0x19; configuration. OPTION.fec = FEC_0_OFF; configuration. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; configuration. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; configuration. OPTION.transmissionPower = POWER_17; configuration. OPTION.wirelessWakeupTime = WAKE_UP_1250; configuration. SPED.airDataRate = AIR_DATA_RATE_011_48; configuration. SPED.uartBaudRate = UART_BPS_115200; configuration. SPED.uartParity = MODE_00_8N1; // Ayar yapılandırması değiştirildi ve yapılandırmayı tutmayacak şekilde ayarlandı ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters(yapılandırma);
Parametrenin tamamı sabit olarak yönetilir:
Adım 10: Temel Yapılandırma Seçeneği
Adım 11: Alma Mesajı Gönder
İlk önce, alıcı arabelleğinde bir şey olup olmadığını kontrol etmek için basit ama kullanışlı bir yöntem tanıtmalıyız.
int kullanılabilir();
Sadece mevcut akışta kaç baytınız olduğunu döndürür.
Adım 12: Normal İletim Modu
Normal/Şeffaf iletim modu, aynı adres ve kanala sahip tüm cihazlara mesaj göndermek için kullanılır.
Mesaj göndermek/almak için bir çok yöntem vardır, detaylı olarak açıklayacağız:
ResponseStatus sendMessage(const String mesajı);
ResponseContainer alıcıMesaj();
İlk yöntem sendMessage'dır ve Normal modda bir aygıta String göndermek için kullanılır.
ResponseStatus rs = e32ttl.sendMessage("Prova");Serial.println(rs.getResponseDescription());
Diğer cihaz sadece döngüde yapar
if (e32ttl.available() > 1){ResponseContainer rs = e32ttl.receiveMessage(); String mesajı = rs.data; // İlk önce veriyi alın Serial.println(rs.status.getResponseDescription()); Serial.println(mesaj); }
Adım 13: Yapıyı Yönetin
Karmaşık bir yapı göndermek istiyorsanız bu yöntemi kullanabilirsiniz.
ResponseStatus sendMessage(const void *message, const uint8_t size);ResponseStructContainer almaMessage(const uint8_t size);
strucutre göndermek için kullanılır, örneğin:
struct Messaggione {karakter tipi[5]; karakter mesajı[8]; bool mitico; }; struct Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage(&messaggione, sizeof(Messaggione)); Serial.println(rs.getResponseDescription());
ve diğer taraf mesajı alabilirsin
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Messaggione));struct Messaggione messaggione = *(Messaggione*) rsc.data; Serial.println(messaggione.message); Serial.println(messaggione.mitico);
Kısmi yapıyı oku
Daha fazla yapı türünü yönetmek için mesajın ilk bölümünü okumak istiyorsanız bu yöntemi kullanabilirsiniz.
ResponseContainer almaInitialMessage(const uint8_t size);
Yüklenecek yapıyı tanımlamak için type veya other ile bir dize almak için oluştururum.
struct Messaggione { // typechar mesajı olmadan kısmi yapı[8]; bool mitico; }; karakter tipi[5]; // yapının ilk kısmı ResponseContainer rs = e32ttl.receiveInitialMessage(sizeof(type)); // Dizeyi bir karakter dizisine koyun (gerekli değil) memcpy (type, rs.data.c_str(), sizeof(type)); Serial.println("OKUMA TÜRÜ: "); Serial.println(rs.status.getResponseDescription()); Seri.println(tür); // yapının geri kalanını oku ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Messaggione)); yapı Messaggione messaggione = *(Messaggione*) rsc.data;
Adım 14: Normal Mod Yerine Sabit Mod
Aynı şekilde, sabit aktarımla kullanmak için bir dizi yöntem oluşturuyorum.
Sabit şanzıman
Yalnızca gönderme yöntemini değiştirmeniz gerekir, çünkü hedef cihaz, Adres ve Kanal qudo settato il sabit mod ile giriş bölümünü almaz.
Yani sahip olduğunuz String mesajı için
ResponseStatus sendFixedMessage(byte ADDL, byte ADDH, byte CHAN, const String mesajı);ResponseStatus sendBroadcastFixedMessage(byte CHAN, const String mesajı);
ve sahip olduğunuz yapı için
ResponseStatus sendFixedMessage(bayt ADDL, bayt ADDH, bayt CHAN, const void *message, const uint8_t size);ResponseStatus sendBroadcastFixedMessage(bayt CHAN, const void *message, const uint8_t boyut);
İşte basit bir örnek
ResponseStatus rs = e32ttl.sendFixedMessage(0, 0, 0x17, &messaggione, sizeof(Messaggione));// ResponseStatus rs = e32ttl.sendFixedMessage(0, 0, 0x17, "Ciao");
Sabit şanzımanın daha fazla senaryosu var
Belirli bir cihaza gönderirseniz (ikinci senaryolar Sabit iletim), doğrudan tanımlamak için ADDL, ADDH ve CHAN eklemelisiniz.
ResponseStatus rs = e32ttl.sendFixedMessage(2, 2, 0x17, "Bir cihaza mesaj");
Belirli bir Kanaldaki tüm cihazlara mesaj göndermek istiyorsanız bu yöntemi kullanabilirsiniz.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage(0x17, "Bir kanalın cihazlarına mesaj");
Ağdaki tüm yayın mesajlarını almak istiyorsanız, ADDH ve ADDL'nizi BROADCAST_ADDRESS ile ayarlamalısınız.
ResponseStructContainer c;c = e32ttl100.getConfiguration(); // Diğer tüm işlemlerden önce yapılandırma işaretçisini almak önemlidir Configuration configuration = *(Configuration*) c.data; Serial.println(c.status.getResponseDescription()); Serial.println(c.status.code); printParameters(yapılandırma); configuration. ADDL = YAYIN_ADDRESİ; configuration. ADDH = YAYIN_ADDRESS; // Ayar yapılandırması değiştirildi ve yapılandırmayı tutmayacak şekilde ayarlandı ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters(yapılandırma);
Adım 15: Teşekkürler
Artık işinizi yapmak için tüm bilgilere sahipsiniz, ancak tüm olasılıkları daha iyi anlamak için bazı gerçekçi örnekler göstermenin önemli olduğunu düşünüyorum.
- Arduino, esp32 veya esp8266 için LoRa E32 cihazı: ayarlar ve temel kullanım
- Arduino, esp32 veya esp8266 için LoRa E32 cihazı: kitaplık
- Arduino, esp32 veya esp8266 için LoRa E32 cihazı: konfigürasyon
- Arduino, esp32 veya esp8266 için LoRa E32 cihazı: sabit iletim
- Arduino, esp32 veya esp8266 için LoRa E32 cihazı: güç tasarrufu ve yapılandırılmış veri gönderme
Önerilen:
Düşük Maliyetli Bir EKG Cihazı Nasıl Yapılır: 26 Adım
Düşük Maliyetli Bir EKG Cihazı Nasıl Yapılır: Herkese merhaba! Benim adım Mariano ve ben bir biyomedikal mühendisiyim. Birkaç hafta sonunu, Bluetooth aracılığıyla bir Android cihaza (akıllı telefon veya tablet) bağlı Arduino kartına dayalı düşük maliyetli bir EKG cihazının prototipini tasarlamak ve gerçekleştirmek için harcadım. İsterim
Android için Düşük Maliyetli 3d Fpv Kamera: 7 Adım (Resimlerle)
Android için Düşük Maliyetli 3d Fpv Kamera: FPV oldukça havalı bir şey. Ve 3d olarak daha da iyi olurdu. Üçüncü boyut uzak mesafelerde pek mantıklı gelmiyor ama bir iç mekan Micro Quadcopter için mükemmel. O yüzden piyasaya bir göz attım. Ama bulduğum kameralar da o
PMMA Mikroakışkan Yongalarının Yapıştırıcısız Yapıştırması için DIY Düşük Maliyetli UV Sel Işığı: 11 Adım
PMMA Mikroakışkan Yongalarının Yapıştırıcısız Yapıştırması için Kendin Yap Düşük Maliyetli UV Sel Işığı: Termoplastiklerden üretilen mikroakışkan cihazlar, sertlik, şeffaflık, azaltılmış gaz geçirgenliği, biyouyumluluk ve enjeksiyon kalıplama gibi seri üretim yöntemlerine daha kolay geçiş nedeniyle giderek daha fazla kullanılmaktadır. Yapıştırma yöntemleri
433MHz Bandında Düşük Maliyetli Kablosuz Sensör Ağı: 5 Adım (Resimlerle)
433MHz Bandında Düşük Maliyetli Kablosuz Sensör Ağı: Teresa Rajba'ya bu makaledeki yayınlarından elde edilen verileri kullanmamı kabul ettiği için çok teşekkürler.*Yukarıdaki resimde - test için kullandığım beş sensör-gönderici birimi Kablosuz sensör nedir ağlar? Basit bir tanım
E32-433T LoRa Modülü Eğitimi - E32 Modülü için DIY Breakout Board: 6 Adım
E32-433T LoRa Modülü Eğitimi | E32 Modülü için DIY Breakout Board: Hey, naber beyler! Akarsh burada CETech'ten. Bu projem, yüksek güçlü 1 watt'lık bir alıcı-verici modülü olan eByte'den E32 LoRa modülünün çalışmasını anlamak için daha çok bir öğrenme eğrisi. Çalışmayı anladıktan sonra, tasarımım var