Mundarija:

Arduino, Esp8266 yoki Esp32 uchun past narxli E32 (sx1278/sx1276) qurilmali LoRa 3 km dan 8 km gacha simsiz aloqa: 15 qadam
Arduino, Esp8266 yoki Esp32 uchun past narxli E32 (sx1278/sx1276) qurilmali LoRa 3 km dan 8 km gacha simsiz aloqa: 15 qadam

Video: Arduino, Esp8266 yoki Esp32 uchun past narxli E32 (sx1278/sx1276) qurilmali LoRa 3 km dan 8 km gacha simsiz aloqa: 15 qadam

Video: Arduino, Esp8266 yoki Esp32 uchun past narxli E32 (sx1278/sx1276) qurilmali LoRa 3 km dan 8 km gacha simsiz aloqa: 15 qadam
Video: Home Assistant - подключаем адресную ленту WS2812B через ESP8266 с прошивкой WLED 2024, Noyabr
Anonim
Arduino, Esp8266 yoki Esp32 uchun past narxli E32 (sx1278/sx1276) bilan LoRa 3Km dan 8Kmgacha simsiz aloqa
Arduino, Esp8266 yoki Esp32 uchun past narxli E32 (sx1278/sx1276) bilan LoRa 3Km dan 8Kmgacha simsiz aloqa

Men LoBa qurilmasining Semtech seriyali EBYTE E32 ni boshqarish uchun kutubxona yarataman, juda kuchli, sodda va arzon qurilma.

Siz bu erda 3km, 8km versiyasini topishingiz mumkin

Ular 3000 m dan 8000 m gacha masofada ishlashlari mumkin va ular juda ko'p xususiyat va parametrlarga ega. Shunday qilib, men foydalanishni soddalashtirish uchun ushbu kutubxonani yarataman.

Bu metropoliten sensorlaridan ma'lumotlarni olish yoki dronni boshqarish uchun echim.

Ta'minotlar

Arduino UNO

Wemos D1 mini

LoRa E32 TTL 100 3km versiyasi

LoRa E32 TTL 1W 8Km versiyasi

1 -qadam: kutubxona

Kutubxona
Kutubxona

Bu erda mening kutubxonamni topishingiz mumkin.

Yuklab olish uchun.

O'ng yuqori burchakdagi YUKLASH tugmasini bosing, siqilmagan papkaning nomini LoRa_E32 o'zgartiring.

LoRa_E32 papkasida LoRa_E32.cpp va LoRa_E32.h mavjudligini tekshiring.

LoRa_E32 kutubxona papkasini / libraries / papkasini joylashtiring. Agar siz birinchi kutubxonangiz bo'lsa, kutubxonalar pastki papkasini yaratishingiz kerak bo'lishi mumkin.

IDE -ni qayta ishga tushiring.

2 -qadam: Pinout

Pinout
Pinout
Pinout
Pinout
Pinout
Pinout

Ko'rib turganingizdek, siz M0 va M1 pinlari orqali turli xil rejimlarni o'rnatishingiz mumkin.

Statik usulda ishlatilishi mumkin bo'lgan ba'zi pinlar bor, lekin agar siz uni mikrokontrollerga ulasangiz va ularni kutubxonada sozlasangiz, siz ishlay olasiz va siz dasturiy ta'minot orqali hamma rejimni boshqarishingiz mumkin, lekin biz bundan keyin yaxshiroq tushuntiramiz.

3 -qadam: AUX pin

AUX pin
AUX pin
AUX pin
AUX pin
AUX pin
AUX pin

Men aytganimdek, barcha pinlarni mikrokontrolderga ulash muhim emas, siz konfiguratsiyani olish uchun M0 va M1 pinlarini HIGH yoki LOW ga qo'yishingiz mumkin, agar siz AUX -ga ulanmasangiz, kutubxonaga ishonch hosil qiling. operatsiya tugaganligini.

AUX pin

Ma'lumot uzatish paytida tashqi MCU -ni uyg'otish va ma'lumotlarni uzatish tugagandan so'ng HIGH -ni qaytarish mumkin.

AUXni qabul qilganda LOW past bo'ladi va bufer bo'sh bo'lganda HIGH ni qaytaring.

Bundan tashqari, u normal ishlashni tiklash uchun o'zini tekshirish uchun ishlatiladi (yoqish va uyqu/dastur rejimida).

4 -qadam: To'liq ulangan sxema Esp8266

To'liq ulangan sxema Esp8266
To'liq ulangan sxema Esp8266
To'liq ulangan sxema Esp8266
To'liq ulangan sxema Esp8266

esp8266 ulanish sxemasi sodda, chunki u bir xil mantiqiy aloqada ishlaydi (3.3v).

Yaxshi barqarorlikka erishish uchun tortishish qarshiligini (4, 7Kohm) qo'shish muhim.

5 -qadam: Arduino -ning to'liq ulangan sxemasi

To'liq ulangan sxema Arduino
To'liq ulangan sxema Arduino
To'liq ulangan sxema Arduino
To'liq ulangan sxema Arduino

Arduino ishchi kuchlanishi 5v, shuning uchun biz shikastlanishni oldini olish uchun LoXa modulining RX pin M0 va M1 kuchlanish taqsimlagichini qo'shishimiz kerak, bu erda qo'shimcha ma'lumot olishingiz mumkin: kuchlanish bo'luvchi: kalkulyator va dastur.

RX -da yig'ilgandan ko'ra, signaldan GND va 1Kohmgacha bo'lgan 2Kohmli rezistorni ishlatishingiz mumkin.

6 -qadam: Kutubxona: Konstruktor

Men juda ko'p sonli konstruktorlar to'plamini yasadim, chunki bizda boshqarish uchun ko'proq variant va vaziyat bo'lishi mumkin.

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);

Birinchi konstruktorlar to'plami kutubxonaga ketma -ket va boshqa pinlarni boshqarishni topshirish uchun yaratilgan.

rxPin va txPin - UARTga ulanish uchun pin va ular majburiydir.

auxPin - bu operatsiya, uzatish va qabul qilish holatini tekshiradigan pin (biz bundan keyin batafsilroq tushuntiramiz), bu pin majburiy emas, agar siz uni o'rnatmasangiz, men operatsiyani o'z vaqtida bajarishga ruxsat berish uchun kechiktirishni qo'llayman (kechikish bilan).

m0pin va m1Pin - bu MODE rejimini o'zgartirish uchun pinlar (yuqoridagi jadvalga qarang), menimcha, bu "ishlab chiqarish" pimlari to'g'ridan -to'g'ri "HIGH" yoki "LOW" ga ulanadi, lekin sinov uchun ular kutubxona tomonidan boshqariladi.

bpsRate - bu SoftwareSerial -ning ovoz tezligi odatda 9600 (dasturiy/uyqu rejimidagi yagona uzatish tezligi)

Oddiy misol

#"LoRa_E32.h" ni qo'shing LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX

Biz to'g'ridan -to'g'ri SoftwareSerial -dan boshqa konstruktor bilan foydalanishimiz mumkin

LoRa_E32 (HardwareSerial* ketma -ket, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (HardwareSerial* ketma -ket, bayt auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (HardwareSerial* ketma -ket, bayt auxPin, bayt m0Pin, bayt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

Ushbu konstruktor bilan yuqoridagi misol shunday bo'lishi mumkin.

#qo'shish #kiritish "LoRa_E32.h"

SoftwareSerial mySerial (2, 3); // RX, TX

LoRa_E32 e32ttl100 (& mySerial);

// LoRa_E32 e32ttl100 (& mySerial, 5, 7, 6);

Oxirgi konstruktorlar to'plami - SoftwareSerial o'rniga HardwareSerialdan foydalanishga ruxsat berish.

LoRa_E32 (SoftwareSerial* ketma -ket, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (SoftwareSerial* ketma -ket, bayt auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (SoftwareSerial* ketma -ket, bayt auxPin, bayt m0Pin, bayt m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

7 -qadam: boshlang

Start buyrug'i kirish va chiqish rejimida ketma -ket va pinlarni ishga tushirish uchun ishlatiladi.

void start ();

ijroda

// Barcha pinlarni va UARTni ishga tushiring

e32ttl100.begin ();

8 -qadam: Konfiguratsiya va ma'lumot usuli

Konfiguratsiyani boshqarish va qurilma haqida ma'lumot olishning bir qancha usullari mavjud.

ResponseStructContainer getConfiguration ();

ResponseStatus setConfiguration (Konfiguratsiya konfiguratsiyasi, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

ResponseStructContainer getModuleInformation ();

void printParameters (struct Configuration configuration);

ResponseStatus resetModule ();

9 -qadam: javob konteyner

Javobni boshqarishni soddalashtirish uchun men konteynerlar to'plamini yarataman, bu men uchun xatolarni boshqarish va umumiy ma'lumotlarni qaytarish uchun juda foydali.

ResponseStatus

Bu holat konteyneridir va 2 ta oddiy kirish nuqtasiga ega, shu bilan siz status kodini va holat kodining tavsifini olishingiz mumkin

Serial.println (c.getResponseDescription ()); // Kod tavsifi

Serial.println (kodi); Muvaffaqiyat bo'lsa // 1

Kod - bu

Muvaffaqiyat = 1, ERR_NUMXUN

ERR_NOT_SUPPORT, ERR_NOT_IMPLEMENT, ERR_NOT_INITIAL, ERR_INVALID_PARAM, ERR_DATA_SIZE_NOT_MATCH, ERR_BUF_TOO_SMALL, ERR_TIMEOUT, ERR_HARDWARE, ERR_HEAD_NOT_RECOGNIZED

ResponseContainer

Bu konteyner String javobini boshqarish uchun yaratilgan va 2 ta kirish nuqtasiga ega.

xabar va statusdan qaytarilgan satrli ma'lumotlar, RepsonseStatus misoli.

ResponseContainer rs = e32ttl.receiveMessage ();

String xabari = rs.data;

Serial.println (rs.status.getResponseDescription ());

Serial.println (xabar);

ResponseStructContainer

Bu "murakkabroq" konteyner, men uni tuzilmani boshqarish uchun ishlataman, u ResponseContainer -ning kirish nuqtasiga ega, lekin ma'lumotlar murakkab tuzilmani boshqarish uchun bo'sh ko'rsatgichdir.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Boshqa barcha operatsiyalardan oldin konfiguratsiya ko'rsatgichini olish muhim

Konfiguratsiya konfiguratsiyasi = *(Konfiguratsiya *) c.data;

Serial.println (c.status.getResponseDescription ());

Serial.println (status.kod);

getConfiguration va setConfiguration

Birinchi usul - getConfiguration, siz undan qurilmada saqlangan barcha ma'lumotlarni olish uchun foydalanishingiz mumkin.

ResponseStructContainer getConfiguration ();

Mana, foydalanish misoli.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Boshqa barcha operatsiyalardan oldin konfiguratsiya ko'rsatgichini olish muhim

Konfiguratsiya konfiguratsiyasi = *(Konfiguratsiya *) c.data;

Serial.println (c.status.getResponseDescription ());

Serial.println (status.kod);

Serial.println (configuration. SPED.getUARTBaudRate ());

Konfiguratsiya tuzilmasida barcha sozlamalar ma'lumotlari bor va men bitta ma'lumotning barcha tavsifini olish uchun bir qator funktsiyalarni qo'shaman.

konfiguratsiya. ADDL = 0x0; // Adres konfiguratsiyasining birinchi qismi. ADDH = 0x1; // Manzil konfiguratsiyasining ikkinchi qismi. CHAN = 0x19; // Kanal konfiguratsiyasi. OPTION.fec = FEC_0_OFF; // Oldinga xatoni tuzatish tugmachasining konfiguratsiyasi. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmissiya rejimining konfiguratsiyasi. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up boshqaruv konfiguratsiyasi. OPTION.transmissionPower = POWER_17; // dBm uzatish quvvati konfiguratsiyasi. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Uyg'otish konfiguratsiyasini kuting. SPED.airDataRate = AIR_DATA_RATE_011_48; // Havo ma'lumotlari tezligi konfiguratsiyasi. SPED.uartBaudRate = UART_BPS_115200; // Aloqa tezligi konfiguratsiyasi. SPED.uartParity = MODE_00_8N1; // Parit bit

Barcha tavsifni olish uchun sizda barcha atributlar uchun ekvivalent funksiya mavjud:

Serial.print (F ("Chan:")); Serial.print (konfiguratsiya. 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 (config. OPTION.fixedTransmission, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getFixedTransmissionDescription ()); Serial.print (F ("OptionPullup:")); Serial.print (config. OPTION.ioDriveMode, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getIODroveModeDescription ()); Serial.print (F ("OptionWakeup:")); Serial.print (config. OPTION.wirelessWakeupTime, BIN); Serial.print (" ->"); Serial.println (configuration. OPTION.getWirelessWakeUPTimeDescription ()); Serial.print (F ("OptionFEC:")); Serial.print (config. OPTION.fec, BIN); Serial.print (" ->"); Serial.println (config. OPTION.getFECDescription ()); Serial.print (F ("OptionPower:")); Serial.print (config. OPTION.transmissionPower, BIN); Serial.print (" ->"); Serial.println (config. OPTION.getTransmissionPowerDescription ());

Xuddi shu tarzda, setConfiguration konfiguratsiya tuzilishini xohlaydi, shuning uchun menimcha, konfiguratsiyani boshqarishning eng yaxshi usuli - bu joriy versiyani olish, kerakli o'zgarishlarni qo'llash va uni qayta o'rnatish.

ResponseStatus setConfiguration (Konfiguratsiya konfiguratsiyasi, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

konfiguratsiya - bu avvalgi ko'rsatuv, saveType -ning o'zgarishi faqat joriy sessiya uchun doimiy bo'lib qolsa, tanlashga ruxsat beradi.

ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Boshqa barcha operatsiyalardan oldin konfiguratsiya ko'rsatgichini olish muhim Konfiguratsiya konfiguratsiyasi = *(Konfiguratsiya *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguratsiya); konfiguratsiya. ADDL = 0x0; konfiguratsiya. ADDH = 0x1; konfiguratsiya. CHAN = 0x19; konfiguratsiya. OPTION.fec = FEC_0_OFF; config. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; config. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; config. OPTION.transmissionPower = POWER_17; config. OPTION.wirelessWakeupTime = WAKE_UP_1250; konfiguratsiya. SPED.airDataRate = AIR_DATA_RATE_011_48; config. SPED.uartBaudRate = UART_BPS_115200; config. SPED.uartParity = MODE_00_8N1; // Konfiguratsiyani o'zgartiring va konfiguratsiyani ushlab turmaslik uchun o'rnating ResponseStatus rs = e32ttl100.setConfiguration (konfiguratsiya, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfiguratsiya);

Parametrlar doimiy ravishda boshqariladi:

10 -qadam: Asosiy konfiguratsiya opsiyasi

Asosiy konfiguratsiya opsiyasi
Asosiy konfiguratsiya opsiyasi

11 -qadam: qabul qilingan xabarni yuboring

Birinchidan, qabul qilish tamponida biror narsa borligini tekshirish uchun oddiy, lekin foydali usulni joriy etishimiz kerak

int mavjud ();

Joriy oqimda qancha bayt borligini qaytarish kifoya.

12 -qadam: Oddiy uzatish rejimi

Oddiy uzatish rejimi
Oddiy uzatish rejimi

Oddiy/Shaffof uzatish rejimi bir xil manzil va kanalli barcha qurilmalarga xabar yuborish uchun ishlatiladi.

Xabarni yuborish/qabul qilishning ko'plab usullari mavjud, biz batafsil tushuntirib beramiz:

ResponseStatus sendMessage (const String xabari);

ResponseContainer receiveMessage ();

Birinchi usul sendMessage bo'lib, u oddiy rejimda qurilmaga String yuborish uchun ishlatiladi.

ResponseStatus rs = e32ttl.sendMessage ("Prova"); Serial.println (rs.getResponseDescription ());

Boshqa qurilma oddiygina pastadir ustida ishlaydi

agar (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); String xabari = rs.data; // Avval Serial.println (rs.status.getResponseDescription ()) ma'lumotlarini oling; Serial.println (xabar); }

13 -qadam: Strukturani boshqarish

Agar siz murakkab tuzilmani yubormoqchi bo'lsangiz, ushbu usuldan foydalanishingiz mumkin

ResponseStatus sendMessage;

Strukturani yuborish uchun ishlatiladi, masalan:

Messaggione {char turi [5] tuzilishi; char xabari [8]; bool mitico; }; struct Messaggione messaggione = {"TEMP", "Peple", true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());

va boshqa tomondan siz xabarni shunday qabul qilishingiz mumkin

ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); struct Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);

Qisman tuzilmani o'qing

Agar siz boshqa turdagi strukturalarni boshqarish uchun xabarning birinchi qismini o'qishni xohlasangiz, ushbu usuldan foydalanishingiz mumkin.

ResponseContainer receiveInitialMessage (const uint8_t hajmi);

Men yuklanadigan tuzilmani aniqlash uchun turini yoki boshqasini olish uchun yarataman.

struktura Messaggione {// yozish mashinasi xabarisiz qisman struktura [8]; bool mitico; }; char turi [5]; // ResponseContainer strukturasining birinchi qismi rs = e32ttl.receiveInitialMessage (sizeof (tur)); // stringni char qatoriga qo'ying (kerak emas) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("O'QISH TURI:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (turi); // ResponseStructContainer tuzilmasining qolgan qismini o'qing rsc = e32ttl.receiveMessage (sizeof (Messaggione))); struktura Messaggione messaggione = *(Messaggione *) rsc.data;

14 -qadam: Oddiy rejim o'rniga qattiq rejim

Xuddi shu tarzda, men qattiq uzatishda foydalanish uchun usullar to'plamini yarataman

Ruxsat etilgan uzatish

Siz faqat jo'natish usulini o'zgartirishingiz kerak, chunki maqsadli qurilma manzil va kanal sozlamalari bilan muqaddimani qabul qilmaydi.

Shunday qilib, sizda String xabari bor

ResponseStatus sendFixedMessage (ADDL bayt, ADDH bayt, CHAN bayt, const String xabari); ResponseStatus sendBroadcastFixedMessage (bayt CHAN, const String xabari);

va sizda tuzilish bor

ResponseStatus sendFixedMessage;

Mana oddiy misol

ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17 va & messaggione, sizeof (Messaggione))); // ResponseStatus rs = e32ttl.sendFixedMessage (0, 0, 0x17, "Ciao");

Ruxsat etilgan uzatish ko'proq ssenariylarga ega

Agar siz ma'lum bir qurilmaga yuboradigan bo'lsangiz (ikkinchi stsenariylar Ruxsat etilgan uzatish), uni to'g'ridan -to'g'ri aniqlash uchun ADDL, ADDH va CHAN qo'shishingiz kerak.

ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, "Qurilmaga xabar");

Agar siz xohlagan kanaldagi barcha qurilmalarga xabar yubormoqchi bo'lsangiz, ushbu usuldan foydalanishingiz mumkin.

ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, "Kanal qurilmalariga xabar");

Agar siz tarmoqdagi barcha xabarlarni olishni xohlasangiz, ADDH va ADDL -ni BROADCAST_ADDRESS -ga o'rnatishingiz kerak.

ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Boshqa barcha operatsiyalardan oldin konfiguratsiya ko'rsatgichini olish muhim Konfiguratsiya konfiguratsiyasi = *(Konfiguratsiya *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (c.status.code); printParameters (konfiguratsiya); config. ADDL = BROADCAST_ADDRESS; konfiguratsiya. ADDH = BROADCAST_ADDRESS; // Konfiguratsiya o'zgartirildi va ResponseStatus rs = e32ttl100.setConfiguration (konfiguratsiya, WRITE_CFG_PWR_DWN_LOSE) konfiguratsiyasi saqlanmaydigan qilib sozlandi; Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (konfiguratsiya);

15 -qadam: Rahmat

Endi siz o'z ishingizni bajarish uchun barcha ma'lumotlarga egasiz, lekin menimcha, barcha imkoniyatlarni yaxshiroq tushunish uchun haqiqiy misollarni ko'rsatish muhim.

  1. Arduino, esp32 yoki esp8266 uchun LoRa E32 qurilmasi: sozlash va asosiy foydalanish
  2. Arduino, esp32 yoki esp8266 uchun LoRa E32 qurilmasi: kutubxona
  3. Arduino, esp32 yoki esp8266 uchun LoRa E32 qurilmasi: konfiguratsiya
  4. Arduino, esp32 yoki esp8266 uchun LoRa E32 qurilmasi: qattiq uzatish
  5. Arduino, esp32 yoki esp8266 uchun LoRa E32 qurilmasi: quvvatni tejash va tuzilgan ma'lumotlarni yuborish

Tavsiya: