Мазмуну:

LoRa 3Km - 8Km Wireless Communication with Low Cost E32 (sx1278/sx1276) Arduino, Esp8266 же Esp32 үчүн түзмөк: 15 кадам
LoRa 3Km - 8Km Wireless Communication with Low Cost E32 (sx1278/sx1276) Arduino, Esp8266 же Esp32 үчүн түзмөк: 15 кадам

Video: LoRa 3Km - 8Km Wireless Communication with Low Cost E32 (sx1278/sx1276) Arduino, Esp8266 же Esp32 үчүн түзмөк: 15 кадам

Video: LoRa 3Km - 8Km Wireless Communication with Low Cost E32 (sx1278/sx1276) Arduino, Esp8266 же Esp32 үчүн түзмөк: 15 кадам
Video: LORA радиомодули с UART интерфейсом на 868мгц, E32-868T20D 2024, Ноябрь
Anonim
LoRa 3Km - 8Km Wireless Communication with Low Cost E32 (sx1278/sx1276) Arduino, Esp8266 же Esp32 үчүн түзмөк
LoRa 3Km - 8Km Wireless Communication with Low Cost E32 (sx1278/sx1276) Arduino, Esp8266 же Esp32 үчүн түзмөк

Мен LoBa түзмөгүнүн Semtech сериясына негизделген EBYTE E32 башкаруу үчүн китепкана түзөм, абдан күчтүү, жөнөкөй жана арзан түзмөк.

Бул жерде 3Km, 8Km версиясын таба аласыз

Алар 3000мден 8000мге чейинки аралыкта иштей алышат жана көптөгөн өзгөчөлүктөргө жана параметрлерге ээ. Ошентип, мен бул китепкананы колдонууну жөнөкөйлөтүү үчүн түзөм.

Бул борбордук сенсорлордон маалыматтарды алуу же пилотсуз учактарды башкаруу үчүн чечим.

Жабдуулар

Arduino UNO

Wemos D1 mini

LoRa E32 TTL 100 3Km версиясы

LoRa E32 TTL 1W 8Km версиясы

1 -кадам: Китепкана

Китепкана
Китепкана

Бул жерден менин китепканамды таба аласыз.

Жүктөө үчүн.

Жогорку оң бурчтагы ЖҮКТӨР баскычын чыкылдатыңыз, кысылбаган папканын атын LoRa_E32 деп өзгөртүңүз.

LoRa_E32 папкасында LoRa_E32.cpp жана LoRa_E32.h бар экендигин текшериңиз.

LoRa_E32 китепкана папкасын сиздин / libraries / папканы коюңуз. Сиз биринчи китепкана болсоңуз, китепканалар субфольдорун түзүшүңүз керек болот.

IDEди кайра жүктөө.

2 -кадам: Pinout

Кадап чыгып
Кадап чыгып
Кадап чыгып
Кадап чыгып
Кадап чыгып
Кадап чыгып

Көрүнүп тургандай, сиз M0 жана M1 казыктары аркылуу ар кандай режимдерди орното аласыз.

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

3 -кадам: AUX Pin

AUX Pin
AUX Pin
AUX Pin
AUX Pin
AUX Pin
AUX Pin

Мен айтканымдай, бардык пинди микроконтроллердин туташуусуна кошуу маанилүү эмес, сиз M0 жана M1 төөнөгүчтөрүн ЖОКко же ТӨМӨНгө коюп, конфигурациялоону ала аласыз, эгер сиз AUXке туташпасаңыз, анда китепкана ишенимдүү болуш үчүн акылга сыярлык кечигүүнү орнотот. операция аяктады деп.

AUX пин

Берилиштерди берүүдө тышкы MCUну ойготуу жана маалыматтарды берүүнүн аягына ЖОКту кайтаруу үчүн колдонсо болот.

AUX алгандан кийин LOW төмөн жана буфер бош болгондо HIGH кайтарыңыз.

Ал ошондой эле кадимки иштөөнү калыбына келтирүү үчүн өзүн өзү текшерүү үчүн колдонулат (күйгүзүү жана уйку/программа режиминде).

4 -кадам: Толугу менен туташкан схема Esp8266

Толугу менен байланышкан схема Esp8266
Толугу менен байланышкан схема Esp8266
Толугу менен байланышкан схема Esp8266
Толугу менен байланышкан схема Esp8266

esp8266 байланыш схемасы жөнөкөй, анткени ал логикалык байланыштын бирдей чыңалуусунда иштейт (3.3v).

Жакшы туруктуулукту алуу үчүн тартма каршылыкты (4, 7Kohm) кошуу маанилүү.

5 -кадам: Толугу менен туташкан схема Arduino

Толук туташкан схема Arduino
Толук туташкан схема Arduino
Толук туташкан схема Arduino
Толук туташкан схема Arduino

Arduino жумушчу чыңалуусу 5v, андыктан биз бузулууну болтурбоо үчүн LoRa модулунун RX пин M0 жана M1 чыңалуу бөлүштүргүчүн кошушубуз керек, бул жерден көбүрөөк маалымат ала аласыз Чыңалуу бөлүүчү: эсептегич жана колдонмо.

Сиз 2Xohm резисторун GND жана 1Kohm сигналдан RXке чогуу колдоно аласыз.

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 - бул иштөө режимин өзгөртүү үчүн казыктар (үстөлдүн үстүн караңыз), менимче, бул "өндүрүштөгү" казыктар түздөн -түз ЖОГОРУ же ТӨМӨН туташат, бирок сыноо үчүн алар китепкана тарабынан башкарылат.

bpsRate - бул SoftwareSerialдин ылдамдыгы, адатта, 9600 (программисттин/уйку режиминдеги бир гана чен)

Жөнөкөй мисал

#include "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 -кадам: Баштаңыз

Баштоо буйругу Serialди жана казыктарды киргизүү жана чыгаруу режиминде баштоо үчүн колдонулат.

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.code); // 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 ();

String билдирүү = 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 ());

Конфигурациянын структурасында орнотуулардын бардык маалыматтары бар жана мен бирдиктүү маалыматтардын бардык сүрөттөмөсүн алуу үчүн бир катар функцияларды кошом.

configuration. 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; // Баш тартуу конфигурациясы. OPTION.transmissionPower = POWER_17; // дБм берүү кубатынын конфигурациясы. OPTION.wirelessWakeupTime = WAKE_UP_1250; // Ойгонуу конфигурациясын күтө туруңуз. SPED.airDataRate = AIR_DATA_RATE_011_48; // Аба ылдамдыгынын конфигурациясы. SPED.uartBaudRate = UART_BPS_115200; // Communication baud rate configuration. 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 (); // Бардык башка операцияларга чейин конфигурация көрсөткүчүн алуу маанилүү Конфигурация конфигурациясы = *(Конфигурация *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (статус.код); printParameters (конфигурация); configuration. ADDL = 0x0; configuration. 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; configuration. SPED.airDataRate = AIR_DATA_RATE_011_48; configuration. SPED.uartBaudRate = UART_BPS_115200; configuration. 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 ());

Башка түзмөк жөн гана укурукта жасайт

if (e32ttl.available ()> 1) {ResponseContainer rs = e32ttl.receiveMessage (); String билдирүү = rs.data; // Алгач Serial.println (rs.status.getResponseDescription ()) маалыматын алыңыз; Serial.println (билдирүү); }

13 -кадам: структураны башкаруу

Эгерде сиз татаал структураны жөнөткүңүз келсе, анда бул ыкманы колдоно аласыз

ResponseStatus sendMessage (const void *билдирүүсү, const uint8_t өлчөмү); ResponseStructContainer receiveMessage (const uint8_t өлчөмү);

Бул структураны жөнөтүү үчүн колдонулат, мисалы:

түзүм Messaggione {char type [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)); struct Messaggione messaggione = *(Messaggione *) rsc.data; Serial.println (messaggione.message); Serial.println (messaggione.mitico);

Жарым -жартылай түзүлүштү окуу

Эгерде сиз структуранын башка түрүн башкаруу үчүн билдирүүнүн биринчи бөлүгүн окууну кааласаңыз, анда бул ыкманы колдоно аласыз.

ResponseContainer receiveInitialMessage (const uint8_t size);

Мен муну жүктөлүүчү структураны аныктоо үчүн түрү же башка сапты алуу үчүн түзөм.

struct Messaggione {// Typechar билдирүүсүз жарым -жартылай структура [8]; болит митико; }; char түрү [5]; // ResponseContainer структурасынын биринчи бөлүгү rs = e32ttl.receiveInitialMessage (sizeof (түрү)); // Сапты char массивине коюңуз (кереги жок) memcpy (type, rs.data.c_str (), sizeof (type)); Serial.println ("READ TYPE:"); Serial.println (rs.status.getResponseDescription ()); Serial.println (түрү); // Калганын ResponseStructContainer окуу rsc = e32ttl.receiveMessage (sizeof (Messaggione))); struct 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 (); // Бардык башка операцияларга чейин конфигурация көрсөткүчүн алуу маанилүү Конфигурация конфигурациясы = *(Конфигурация *) c.data; Serial.println (c.status.getResponseDescription ()); Serial.println (статус.код); printParameters (конфигурация); configuration. 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 түзмөгү: энергияны үнөмдөө жана структураланган маалыматтарды жөнөтүү

Сунушталууда: