Мазмұны:

LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғысына арналған 3км -ден 8км сымсыз байланыс: 15 қадам
LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғысына арналған 3км -ден 8км сымсыз байланыс: 15 қадам

Бейне: LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғысына арналған 3км -ден 8км сымсыз байланыс: 15 қадам

Бейне: LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғысына арналған 3км -ден 8км сымсыз байланыс: 15 қадам
Бейне: Радиомодули EBYTE E22 LoRa, настройка и поключение к ардуино 2024, Шілде
Anonim
LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғыларымен 3км -ден 8км сымсыз байланыс
LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғыларымен 3км -ден 8км сымсыз байланыс

Мен LoBa құрылғысының Semtech сериясына негізделген EBYTE E32 басқару үшін кітапхана құрамын, өте қуатты, қарапайым және арзан құрылғы.

Сіз бұл жерде 3км, 8км нұсқасын таба аласыз

Олар 3000 м -ден 8000 м -ге дейінгі қашықтықта жұмыс жасай алады және олардың көптеген мүмкіндіктері мен параметрлері бар. Сондықтан мен бұл кітапхананы қолдануды жеңілдету үшін құрамын.

Бұл елордалық сенсорлардан деректерді алуға немесе дронды басқаруға арналған шешім.

Жабдықтар

Arduino UNO

Wemos D1 шағын

LoRa E32 TTL 100 3км нұсқасы

LoRa E32 TTL 1W 8Km нұсқасы

1 -қадам: Кітапхана

Кітапхана
Кітапхана

Сіз менің кітапханамды осы жерден таба аласыз.

Жүктеу үшін.

Жоғарғы оң жақ бұрыштағы ЖҮКТЕУ түймесін басыңыз, қысылмаған қалтаның атын LoRa_E32 деп өзгертіңіз.

LoRa_E32 қалтасында LoRa_E32.cpp және LoRa_E32.h бар екенін тексеріңіз.

LoRa_E32 кітапхана қалтасын / libraries / қалтасына қойыңыз. Егер сіздің бірінші кітапханаңыз болса, сізге кітапханалар ішкі қалтасын жасау қажет болуы мүмкін.

IDE қайта іске қосыңыз.

2 -қадам: түйреу

Қою
Қою
Қою
Қою
Қою
Қою

Көріп отырғаныңыздай, M0 және M1 түйреуіштері арқылы әр түрлі режимдерді орнатуға болады.

Статикалық түрде қолдануға болатын кейбір түйреуіштер бар, бірақ егер сіз оны микроконтроллерге қоссаңыз және оларды кітапханада конфигурацияласаңыз, сіз өнімділікке ие боласыз және сіз барлық режимді бағдарламалық қамтамасыз ету арқылы басқара аласыз, бірақ біз келесіде жақсы түсіндіреміз.

3 -қадам: AUX түйреуіші

AUX түйреуіші
AUX түйреуіші
AUX түйреуіші
AUX түйреуіші
AUX түйреуіші
AUX түйреуіші

Мен айтқанымдай, барлық түйреуіштерді микроконтроллердің шығысына қосу маңызды емес, сіз M0 және M1 түйреуіштерін жоғары немесе төмен деңгейге қоюға болады, ал егер AUX қосылмаса, кітапхана сенімді кідірісті орнатады. операция аяқталғанын білдіреді.

AUX түйреуіші

Деректерді жіберу кезінде сыртқы MCU -ны ояту және деректерді берудің аяқталуы бойынша HIGH -ды қайтару үшін қолдануға болады.

AUX алған кезде LOW барады және буфер бос болған кезде HIGH қайтарылады.

Ол сондай-ақ қалыпты жұмысын қалпына келтіру үшін өзін-өзі тексеру үшін қолданылады (қосылу және ұйқы/бағдарлама режимінде).

4 -қадам: Esp8266 толық қосылған схемасы

Толық қосылған схема Esp8266
Толық қосылған схема Esp8266
Толық қосылған схема Esp8266
Толық қосылған схема Esp8266

esp8266 қосылу схемасы қарапайым, себебі ол логикалық байланыстың бірдей кернеуінде жұмыс істейді (3.3v).

Жақсы тұрақтылыққа қол жеткізу үшін тартылатын резисторды (4, 7Км) қосу маңызды.

5 -қадам: Толық қосылған схема Arduino

Толық қосылған схема Arduino
Толық қосылған схема Arduino
Толық қосылған схема Arduino
Толық қосылған схема Arduino

Arduino жұмыс кернеуі 5в, сондықтан біз зақымдануды болдырмау үшін LoXa модулінің RX пин M0 және M1 кернеу бөлгішін қосуымыз керек, кернеу бөлгіш: калькулятор мен қолдану туралы қосымша ақпаратты мына жерден алуға болады.

Сіз RX -ге қосудан гөрі сигналдан GND және 1Kohm үшін 2Kohm резисторды қолдана аласыз.

6 -қадам: Кітапхана: Конструктор

Мен көптеген конструкторлар жиынтығын жасадым, өйткені бізде басқарудың басқа нұсқалары мен жағдайлары болуы мүмкін.

LoRa_E32 (байт rxPin, байт txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (байт rxPin, байт txPin, байт auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600); LoRa_E32 (байт rxPin, байт txPin, байт auxPin, байт m0Pin, байт m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

Конструкторлардың бірінші жиынтығы кітапханаға сериялық және басқа түйреуіштерді басқаруды тапсыру үшін құрылады.

rxPin және txPin - бұл UART -қа қосылатын түйреуіш және олар міндетті болып табылады.

auxPin - бұл жұмыс, жіберу және қабылдау күйін тексеретін түйреуіш (біз бұдан әрі түсіндіреміз), бұл түйреуіш міндетті емес, егер сіз оны орнатпасаңыз, мен операцияның аяқталуына рұқсат беру үшін кідірісті қолданамын (кідіріспен).

m0pin және m1Pin - бұл MODE режимін өзгертуге арналған түйреуіштер (үстіңгі кестені қараңыз), менің ойымша, бұл өндірістегі түйреуіштер HIGH немесе LOW тікелей қосылады, бірақ тест үшін оларды кітапхана басқарады.

bpsRate - бұл SoftwareSerial -дің дауыс жылдамдығы, әдетте 9600 (бағдарламашы/ұйқы режиміндегі жалғыз беру жылдамдығы)

Қарапайым мысал

#«LoRa_E32.h» қосу LoRa_E32 e32ttl100 (2, 3); // RX, TX // LoRa_E32 e32ttl100 (2, 3, 5, 6, 7); // RX, TX

Біз басқа конструктормен бірге SoftwareSerial қолдана аламыз

LoRa_E32 (HardwareSerial* сериялық, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (HardwareSerial* сериялық, байттық auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (HardwareSerial* сериялық, байт auxPin, байт m0Pin, байт m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

Бұл конструктордың жоғарғы үлгісі осылай жасалуы мүмкін.

#қосу #«LoRa_E32.h» қосу

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

LoRa_E32 e32ttl100 (& mySerial);

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

Конструктордың соңғы жиынтығы - SoftwareSerial орнына HardwareSerial пайдалануға рұқсат беру.

LoRa_E32 (SoftwareSerial* сериялық, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (SoftwareSerial* сериялық, байт auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

LoRa_E32 (SoftwareSerial* сериялық, байт auxPin, байт m0Pin, байт m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);

7 -қадам: бастаңыз

Бастау командасы кіріс және шығыс режимінде сериялық және түйреуіштерді іске қосу үшін қолданылады.

void begin ();

орындауда

// Барлық түйреуіштер мен UART іске қосыңыз

e32ttl100.begin ();

8 -қадам: Конфигурация және ақпарат әдісі

Конфигурацияны басқарудың және құрылғы туралы ақпарат алудың көптеген әдістері бар.

ResponseStructContainer getConfiguration ();

ResponseStatus setConfiguration (конфигурация конфигурациясы, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

ResponseStructContainer getModuleInformation ();

void printParameters (struct Configuration конфигурациясы);

ResponseStatus resetModule ();

9 -қадам: жауап контейнері

Жауапты басқаруды жеңілдету үшін мен контейнерлер жиынтығын құрамын, мен үшін қателерді басқаруға және жалпы деректерді қайтаруға өте пайдалы.

ResponseStatus

Бұл күй контейнері және 2 қарапайым кіру нүктесі бар, оның көмегімен сіз күй кодын және күй кодының сипаттамасын ала аласыз

Serial.println (c.getResponseDescription ()); // Кодтың сипаттамасы

Serial.println (c.код); // 1, егер сәттілік

Код - бұл

ЖЕТІСТІК = 1, ERR_UNKNOWN, 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

Бұл контейнер String реакциясын басқару үшін жасалған және 2 кіру нүктесі бар.

хабарламадан және мәртебеден қайтарылған жолмен деректер RepsonseStatus данасы.

ResponseContainer rs = e32ttl.receiveMessage ();

Жолдық хабар = rs.data;

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

Serial.println (хабар);

ResponseStructContainer

Бұл неғұрлым «күрделі» контейнер, мен мұны құрылымды басқару үшін қолданамын, оның ResponseContainer кіру нүктесі бірдей, бірақ деректер күрделі құрылымды басқаруға жарамсыз көрсеткіш болып табылады.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Барлық басқа әрекеттерден бұрын конфигурация көрсеткішін алу маңызды

Конфигурация конфигурациясы = *(Конфигурация *) c.data;

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

Serial.println (статус.код);

getConfiguration және setConfiguration

Бірінші әдіс - getConfiguration, сіз оны құрылғыда сақталған барлық деректерді қалпына келтіру үшін пайдалана аласыз.

ResponseStructContainer getConfiguration ();

Мұнда қолдану мысалы.

ResponseStructContainer c;

c = e32ttl100.getConfiguration (); // Барлық басқа әрекеттерден бұрын конфигурация көрсеткішін алу маңызды

Конфигурация конфигурациясы = *(Конфигурация *) c.data;

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

Serial.println (статус.код);

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

Конфигурация құрылымында барлық параметрлер туралы мәліметтер бар, мен бір деректердің барлық сипаттамасын алу үшін бірқатар функцияларды қосамын.

конфигурация. ADDL = 0x0; // Addressconfiguration. ADDH = 0x1 бірінші бөлігі; // Мекенжай конфигурациясының екінші бөлігі. CHAN = 0x19; // Арна конфигурациясы. OPTION.fec = FEC_0_OFF; // Алдыңғы қатені түзету қосқышының конфигурациясы. OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Трансмиссия режимінің конфигурациясы. OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up management configuration. OPTION.transmissionPower = POWER_17; // дБм беру қуатының конфигурациясы. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Ояту конфигурациясын күту уақыты. SPED.airDataRate = AIR_DATA_RATE_011_48; // Ауа деректерінің жылдамдығы конфигурациясы. SPED.uartBaudRate = UART_BPS_115200; // Байланыс беру жылдамдығының конфигурациясы. SPED.uartParity = MODE_00_8N1; // Паритет биті

Барлық сипаттаманы алу үшін сізде барлық атрибуттың баламалы функциясы бар:

Serial.print (F («Чан:»)); Serial.print (конфигурация. 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 (configuration. 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 (configuration. OPTION.getFECDescription ()); Serial.print (F («OptionPower:»)); Serial.print (config. OPTION.transmissionPower, BIN); Serial.print (« ->»); Serial.println (configuration. OPTION.getTransmissionPowerDescription ());

Сонымен, setConfiguration конфигурацияның құрылымын қалайды, сондықтан менің ойымша, конфигурацияны басқарудың ең жақсы әдісі - ағымдағы нұсқаны алу, сізге қажет жалғыз өзгерісті қолдану және оны қайтадан орнату.

ResponseStatus setConfiguration (конфигурация конфигурациясы, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);

конфигурация - бұл өзгеріс тек ағымдағы сеанс үшін тұрақты болып қалса, таңдауға мүмкіндік беретін saveType құрылымы.

ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Барлық басқа операциялардан бұрын конфигурация көрсеткішін алу маңызды Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (статус.код); printParameters (конфигурация); конфигурация. ADDL = 0x0; конфигурация. ADDH = 0x1; конфигурация. CHAN = 0x19; конфигурация. 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; конфигурация. OPTION.wirelessWakeupTime = WAKE_UP_1250; конфигурация. SPED.airDataRate = AIR_DATA_RATE_011_48; конфигурация. SPED.uartBaudRate = UART_BPS_115200; конфигурация. SPED.uartParity = MODE_00_8N1; // Реттеу конфигурациясы өзгертілді және конфигурациясы ұсталмайтын етіп қойылды ResponseStatus rs = e32ttl100.setConfiguration (конфигурация, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (конфигурация);

Параметрдің барлығы тұрақты ретінде басқарылады:

10 -қадам: Негізгі конфигурация опциясы

Негізгі конфигурация опциясы
Негізгі конфигурация опциясы

11 -қадам: Хабарламаны жіберіңіз

Алдымен біз қабылдау буферінде бірдеңе бар -жоғын тексерудің қарапайым, бірақ тиімді әдісін енгізуіміз керек

int available ();

Бұл ағымдағы ағымда қанша байт бар екенін қайтару.

12 -қадам: Қалыпты беріліс режимі

Қалыпты беру режимі
Қалыпты беру режимі

Қалыпты/мөлдір беру режимі барлық құрылғыға адресі мен арнасы бірдей хабарларды жіберу үшін қолданылады.

Хабарламаны жіберудің/алудың көптеген әдістері бар, біз егжей -тегжейлі түсіндіреміз:

ResponseStatus sendMessage (const String хабарламасы);

ResponseContainer receiveMessage ();

Бірінші әдіс sendMessage болып табылады және ол қалыпты режимде құрылғыға String жіберу үшін қолданылады.

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

Басқа құрылғы тек циклде жасайды

егер (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); Жолдық хабар = rs.data; // Алдымен Serial.println (rs.status.getResponseDescription ()) деректерін алыңыз; Serial.println (хабар); }

13 -қадам: құрылымды басқару

Егер сіз күрделі құрылымды жібергіңіз келсе, бұл әдісті қолдануға болады

ResponseStatus sendMessage (const void *хабарламасы, const uint8_t өлшемі); ResponseStructContainer receiveMessage (const uint8_t өлшемі);

Ол құрылымды жіберу үшін қолданылады, мысалы:

құрылым Messaggione {char түрі [5]; char хабарламасы [8]; бол мито; }; struct Messaggione messaggione = {«TEMP», «Peple», true}; ResponseStatus rs = e32ttl.sendMessage (& messaggione, sizeof (Messaggione)); Serial.println (rs.getResponseDescription ());

ал екінші жағынан сіз хабарламаны осылай ала аласыз

ResponseStructContainer rsc = e32ttl.receiveMessage (sizeof (Messaggione)); құрылым Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);

Ішінара құрылымды оқыңыз

Егер сіз құрылымның басқа түрін басқару үшін хабарламаның бірінші бөлігін оқығыңыз келсе, бұл әдісті қолдануға болады.

ResponseContainer receiveInitialMessage (const uint8_t size);

Мен оны жүктелетін құрылымды анықтау үшін немесе басқа түрдегі жолды алу үшін жасаймын.

struktag Messaggione {// машиналық хабарламасыз ішінара құрылым [8]; бол мито; }; char түрі [5]; // ResponseContainer құрылымының бірінші бөлігі rs = e32ttl.receiveInitialMessage (sizeof (түрі)); // Жолды char массивіне қойыңыз (қажет емес) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println («ОҚУ ТІРІ:»); Serial.println (rs.status.getResponseDescription ()); Serial.println (түрі); // ResponseStructContainer құрылымының қалған бөлігін оқу rsc = e32ttl.receiveMessage (sizeof (Messaggione))); құрылым Messaggione messaggione = *(Messaggione *) rsc.data;

14 -қадам: Қалыпты режимнің орнына бекітілген режим

Дәл осылай мен тұрақты беріліспен қолдануға болатын әдістер жиынтығын жасаймын

Тұрақты беріліс

Сіз тек жіберу әдісін өзгертуіңіз керек, себебі тағайындалған құрылғы мекенжай мен арна орнатылған кіріспе кіріспесін алмайды.

Сондықтан String хабарламасы үшін сізде бар

ResponseStatus sendFixedMessage (байт ADDL, байт ADDH, байт CHAN, const String хабарламасы); ResponseStatus sendBroadcastFixedMessage (байт CHAN, const String хабарламасы);

және сізде құрылым үшін

ResponseStatus sendFixedMessage (байт ADDL, байт ADDH, байт CHAN, const void *хабарлама, const uint8_t өлшемі); ResponseStatus sendBroadcastFixedMessage (байт CHAN, const void *хабарлама, const uint8_t өлшемі);

Міне қарапайым мысал

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

Тұрақты беріліс сценарийлері көп

Егер сіз белгілі бір құрылғыға жіберетін болсаңыз (екінші сценарийлер тіркелген беріліс), оны тікелей анықтау үшін ADDL, ADDH және CHAN қосу керек.

ResponseStatus rs = e32ttl.sendFixedMessage (2, 2, 0x17, «Құрылғыға хабарлама»);

Егер сіз көрсетілген арнадағы барлық құрылғыларға хабарлама жібергіңіз келсе, сіз бұл әдісті қолдана аласыз.

ResponseStatus rs = e32ttl.sendBroadcastFixedMessage (0x17, «Арна құрылғыларына хабарлама»);

Егер сіз желідегі барлық хабарларды алғыңыз келсе, ADDH және ADDL параметрлерін BROADCAST_ADDRESS арқылы орнатуыңыз керек.

ResponseStructContainer c; c = e32ttl100.getConfiguration (); // Барлық басқа операциялардан бұрын конфигурация көрсеткішін алу маңызды Configuration configuration = *(Configuration *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (статус.код); printParameters (конфигурация); конфигурация. ADDL = BROADCAST_ADDRESS; конфигурация. ADDH = BROADCAST_ADDRESS; // Реттеу конфигурациясы өзгертілді және конфигурациясы ұсталмайтын етіп қойылды ResponseStatus rs = e32ttl100.setConfiguration (конфигурация, WRITE_CFG_PWR_DWN_LOSE); Serial.println (rs.getResponseDescription ()); Serial.println (rs.code); printParameters (конфигурация);

15 -қадам: Рахмет

Енді сізде жұмыс істеу үшін барлық ақпарат бар, бірақ менің ойымша, барлық мүмкіндікті түсіну үшін нақты мысалдарды көрсету маңызды.

  1. Arduino, esp32 немесе esp8266 үшін LoRa E32 құрылғысы: параметрлер мен негізгі қолдану
  2. Arduino, esp32 немесе esp8266 үшін LoRa E32 құрылғысы: кітапхана
  3. Arduino, esp32 немесе esp8266 үшін LoRa E32 құрылғысы: конфигурация
  4. Arduino, esp32 немесе esp8266 үшін LoRa E32 құрылғысы: бекітілген беріліс
  5. Arduino, esp32 немесе esp8266 үшін LoRa E32 құрылғысы: қуатты үнемдеу және құрылымдық деректерді жіберу

Ұсынылған: