

https://downloads.arduino.cc/libraries/logs/github.com/xreef/ebyte_lora_e22_series_library/
يمكنك طلب ثنائي الفينيل متعدد الكلور هنا
تعليمات وتجميع الفيديو على 6 جزء من الدليل
يمكنك طلب ثنائي الفينيل متعدد الكلور هنا
تعليمات وتجميع الفيديو على 6 جزء من الدليل
أقوم بإنشاء مكتبة لإدارة سلسلة E22 من جهاز Lora ، وجهاز قوي للغاية ، وأجهزة بسيطة ورخيصة.
Lora أو Long Range Data Data Healemetry هي تقنية رائدة من قبل Semtech تعمل بتردد أقل من NRF24L01 (433 MHz ، 868 MHz أو 916 MHz مرة أخرى 2.4 جيجا هرتز ل NRF24L01) ولكن في ترميش المسافة (من 4000 م).
لورا E22
يمكنك العثور هنا على Aliexpress (433 ميجا هرتز 4 كيلومتر) - Aliexpress (433 ميجا هرتز 10 كيلومتر)
يرجى الرجوع إلى مقالتي للحصول على مخطط محدث
يمكنك العثور على مكتبتي هنا.
للتنزيل.
انقر فوق زر التنزيلات في الزاوية اليمنى العليا ، أعد تسمية المجلد غير المضغوط LORA_E22.
تأكد من أن المجلد LORA_E22 يحتوي على LORA_E22.CPP و LORA_E22.H.
ضع مجلد مكتبة LORA_E22 الخاص بك / المكتبات / المجلد.
قد تحتاج إلى إنشاء المجلد الفرعي للمكتبات إذا كانت مكتبتك الأولى.
أعد تشغيل IDE.
E22
| رقم الدبوس | عنصر دبوس | اتجاه الدبوس | تطبيق PIN |
|---|---|---|---|
| 1 | M0 | المدخلات (السحب الضعيف) | العمل مع M1 وتحديد أوضاع التشغيل الأربعة. لا يُسمح بالترتيب ، يمكن أن يكون أرضيًا. |
| 2 | M1 | المدخلات (السحب الضعيف) | العمل مع M0 وتحديد أوضاع التشغيل الأربعة. لا يُسمح بالتراجع ، يمكن أن يكون أرضيًا. |
| 3 | RXD | مدخل | مدخلات TTL UART ، تتصل بـ TXD OutputPin الخارجي (MCU ، PC). يمكن تكوينها على أنها إدخال مفتوح أو سحب. |
| 4 | TXD | الإخراج | مخرجات TTL UART ، يتصل بـ RXD الخارجي (MCU ، PC) InputPin. يمكن تكوينها على أنها إخراج مفتوح أو إخراج دفع |
5 | aux | الإخراج | لكل مؤشر LO Stato di funzionamento del modulo e riattivare l'ccu esterno. Durante la ourceura di inizializzazione di autoControllo ، il pin emette una bassa tenese. può essere configurato تأتي uscita open-drain o push-pull (è consentito non metterlo a terra ، ma se hai ، esempio ti si freeze il dispositivo è preferibile metter una restenza di pull-up da 4.7ko meglio collectivo dispositivo). |
| 6 | VCC | مزود الطاقة 2.3V ~ 5.5V DC | |
| 7 | GND | أرضي |
كما ترون ، يمكنك تعيين أوضاع مختلفة عبر دبابيس M0 و M1.
| وضع | M1 | M0 | توضيح |
|---|---|---|---|
| طبيعي | 0 | 0 | قناة UART والقناة اللاسلكية مفتوحة ، يتم تشغيل الإرسال الشفاف (يدعم التكوين عبر الهواء عبر أمر خاص) |
| وضع wor | 0 | 1 | يمكن تعريفه على أنه جهاز إرسال وور |
| وضع التكوين | 1 | 0 | يمكن للمستخدمين الوصول إلى السجل من خلال المنفذ التسلسلي للتحكم في حالة عمل الوحدة النمطية |
| وضع السكون العميق | 1 | 1 | وضع السكون |
كما ترون أن هناك بعض المسامير التي يمكن استخدامها بطريقة ثابتة ، ولكن إذا قمت بتوصيلها بالمكتبة التي تكسبها في الأداء ويمكنك التحكم في جميع الوضع عبر البرنامج ، لكننا سنشرح أفضل بعد ذلك.
كما أقول بالفعل أنه ليس من المهم توصيل كل دبوس بإخراج متحكم ، يمكنك وضع دبابيس M0 و M1 على ارتفاع أو منخفض للحصول على تكوين مستحيل ، وإذا لم تقم بتوصيل Aux ، حددت المكتبة تأخيرًا معقولًا للتأكد من اكتمال العملية .
عند نقل البيانات يمكن استخدامها لإيقاظ MCU الخارجي والعودة إلى الانتهاء من نقل البيانات.
Lora E22 AUX PIN عند الإرسال
عند استلام AUX منخفضة وعودة عالية عندما يكون المخزن المؤقت فارغًا.
Lora E22 AUX PIN عند الاستقبال
يتم استخدامه أيضًا للتحقق الذاتي لاستعادة التشغيل العادي (على وضع الطاقة والوضع/البرنامج).
Lora E22 AUX PIN على الفحص الذاتي
مخطط اتصال ESP8266 أكثر بساطة لأنه يعمل في نفس الجهد للاتصالات المنطقية (3.3V).
Lora E22 TTL 100 Wemos D1 متصل بالكامل
من المهم إضافة المقاوم السحب (4،7kohm) للحصول على استقرار جيد.
| E22 | ESP8266 |
|---|---|
| M0 | D7 |
| M1 | D6 |
| تكساس | دبوس D2 (سحب 4،7KΩ) |
| RX | دبوس D3 (سحب 4،7KΩ) |
| aux | PIN D5 (Pullup 4،7kΩ) |
| VCC | 5V (ولكن العمل مع قوة أقل في 3.3 فولت) |
| GND | GND |
مخطط اتصال مماثل لـ ESP32 ، ولكن بالنسبة لـ RX و TX ، نستخدم RX2 و TX2 ، لأنه بشكل افتراضي لا يحتوي ESP32 على برامج ولكن لدينا 3 مسلسل.
Ebyte Lora E22 Device ESP32 DEV KIT V1 CONTRACTION CONNECTION
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| تكساس | PIN RX2 (Pullup 4،7kΩ) |
| RX | PIN TX3 (Pullup 4،7kΩ) |
| aux | PIN D18 (Pullup 4،7kΩ) |
| VCC | 5V (ولكن العمل مع قوة أقل في 3.3 فولت) |
| GND | GND |
جهد العمل Arduino هو 5 فولت ، لذلك نحتاج إلى إضافة مقسم للجهد على Rx Pin M0 و M1 من وحدة Lora لمنع الضرر ، يمكنك الحصول على مزيد من المعلومات هنا مقسم الجهد: الآلة الحاسبة والتطبيق.
يمكنك استخدام مقاوم 2KOHM إلى GND و 1KOHM من الإشارة بدلاً من وضعها على RX.
Lora E22 TTL 100 Arduino متصل بالكامل
| M0 | 7 (مقسم الجهد) |
| M1 | 6 (مقسم الجهد) |
| تكساس | دبوس 2 (سحب 4،7KΩ) |
| RX | PIN 3 (Pullup 4،7kΩ والجهد الفاصل) |
| aux | دبوس 5 (سحب 4،7KΩ) |
| VCC | 5V |
| GND | GND |
لقد صنعت مجموعة من العديد من البنائين ، لأنه يمكن أن يكون لدينا المزيد من الخيارات والمواقف التي يجب إدارتها.
LoRa_E22 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);يتم إنشاء المجموعة الأولى من المنشئ لتفويض إدارة المسكنات وغيرها من المسامير للمكتبة.
txE22pin و rxE22pin هو رقم التعريف الشخصي للاتصال بـ UART وهو إلزامي .auxPin هو رقم دبوس يتحقق من العملية ونقلها وحالة الاستلام (سنشرح بشكل أفضل بعد ذلك) ، هذا التعريف الشخصي ليس إلزاميًا ، إذا لم تقم بتعيينه ، فأنا أطبق تأخيرًا للسماح للعملية بإكمال نفسها (مع زمن الوصول ، أواجه مشكلة ، مثل جهاز التجميد ، يجب عليك وضع مقاوم 4.7K أو أفضل توصيله بالجهاز ).m0pin و m1Pin هما دبابيس لتغيير وضع التشغيل (انظر الجزء العلوي من الجدول) ، أعتقد أن هذه المسامير في "الإنتاج" ستتصل عالية أو منخفضة مباشرة ، ولكن للاختبار ستتم إدارتها من قبل المكتبة.bpsRate هو boudrate من بروديزريال عادة ما يكون 9600 (معدل الباود الوحيد في وضع البرمجيات/السكون)مثال بسيط هو
# include " LoRa_E22.h "
LoRa_E22 e22ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E22 e22ttl100(2, 3, 5, 6, 7); // RX, TXيمكننا استخدام برامج برمجية مباشرة مع مُنشئ آخر
LoRa_E22 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);مثال العلوي مع هذا المُنشئ يمكن أن يكون كذلك.
# include < SoftwareSerial.h >
# include " LoRa_E22.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E22 e22ttl100 (mySerial);
// LoRa_E22 e22ttl100(&mySerial, 5, 7, 6);المجموعة الأخيرة من المنشئ هي السماح باستخدام Hardwareserial بدلاً من البرامج.
LoRa_E22 (SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);يتم استخدام أمر البداية لبدء التشغيل المسلسل والدبابيس في وضع الإدخال والإخراج.
void begin ();في التنفيذ
// Startup all pins and UART
e22ttl100.begin();هناك مجموعة من الطرق لإدارة التكوين والحصول على معلومات عن الجهاز.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);لتبسيط إدارة الاستجابة أقوم بإنشاء مجموعة من الحاوية ، بالنسبة لي بشكل مفيد للغاية لإدارة الأخطاء وإرجاع البيانات العامة.
هذه حاوية حالة ولديها نقطة إدخال بسيطة ، مع هذا يمكنك الحصول على رمز الحالة ووصف رمز الحالة
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if Successالرمز
E22_SUCCESS = 1 ,
ERR_E22_UNKNOWN,
ERR_E22_NOT_SUPPORT,
ERR_E22_NOT_IMPLEMENT,
ERR_E22_NOT_INITIAL,
ERR_E22_INVALID_PARAM,
ERR_E22_DATA_SIZE_NOT_MATCH,
ERR_E22_BUF_TOO_SMALL,
ERR_E22_TIMEOUT,
ERR_E22_HARDWARE,
ERR_E22_HEAD_NOT_RECOGNIZEDيتم إنشاء هذه الحاوية لإدارة استجابة السلسلة ولديها نقطة دخول 2.
data مع السلسلة التي تم إرجاعها من الرسالة status مثيل لـ RepsonseStatus .
ResponseContainer rs = e22ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);هذه هي الحاوية "الأكثر تعقيدًا" ، وأنا أستخدم هذا لإدارة الهيكل ، ولديها نفس نقطة الدخول للمسؤولية ، لكن البيانات مؤشر باطل لإدارة بنية معقدة.
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
c.close();الطريقة الأولى هي GetConfiguration ، يمكنك استخدامها لإعادة بيع جميع البيانات المخزنة على الجهاز.
ResponseStructContainer getConfiguration ();هنا مثال الاستخدام.
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
Serial.println(configuration.SPED.getUARTBaudRate());
c.close();تحتوي هيكل التكوين على جميع بيانات الإعدادات ، وأضيف سلسلة من الوظائف للحصول على كل وصف للبيانات الفردية.
configuration.ADDL = 0x03 ; // First part of address
configuration.ADDH = 0x00 ; // Second part
configuration.NETID = 0x00 ; // NETID used for repeater function
configuration.CHAN = 23 ; // Communication channel
configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bit
configuration.OPTION.subPacketSetting = SPS_240_00; // Packet size
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command
configuration.OPTION.transmissionPower = POWER_22; // Device power
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info
configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmission type
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; // Enable WOR mode
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timingلديك وظيفة مكافئة للحصول على كل الوصف:
DEBUG_PRINT (F( " HEAD : " )); DEBUG_PRINT(configuration.COMMAND, HEX);DEBUG_PRINT( " " );DEBUG_PRINT(configuration.STARTING_ADDRESS, HEX);DEBUG_PRINT( " " );DEBUG_PRINTLN(configuration.LENGHT, HEX);
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " AddH : " )); DEBUG_PRINTLN(configuration.ADDH, HEX);
DEBUG_PRINT (F( " AddL : " )); DEBUG_PRINTLN(configuration.ADDL, HEX);
DEBUG_PRINT (F( " NetID : " )); DEBUG_PRINTLN(configuration.NETID, HEX);
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " Chan : " )); DEBUG_PRINT(configuration.CHAN, DEC); DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.getChannelDescription());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " SpeedParityBit : " )); DEBUG_PRINT(configuration.SPED.uartParity, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getUARTParityDescription());
DEBUG_PRINT (F( " SpeedUARTDatte : " )); DEBUG_PRINT(configuration.SPED.uartBaudRate, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getUARTBaudRateDescription());
DEBUG_PRINT (F( " SpeedAirDataRate : " )); DEBUG_PRINT(configuration.SPED.airDataRate, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getAirDataRateDescription());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " OptionSubPacketSett: " )); DEBUG_PRINT(configuration.OPTION.subPacketSetting, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getSubPacketSetting());
DEBUG_PRINT (F( " OptionTranPower : " )); DEBUG_PRINT(configuration.OPTION.transmissionPower, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getTransmissionPowerDescription());
DEBUG_PRINT (F( " OptionRSSIAmbientNo: " )); DEBUG_PRINT(configuration.OPTION.RSSIAmbientNoise, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getRSSIAmbientNoiseEnable());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " TransModeWORPeriod : " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORPeriod, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
DEBUG_PRINT (F( " TransModeTransContr: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORTransceiverControl, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORTransceiverControlDescription());
DEBUG_PRINT (F( " TransModeEnableLBT : " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableLBT, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
DEBUG_PRINT (F( " TransModeEnableRSSI: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRSSI, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
DEBUG_PRINT (F( " TransModeEnabRepeat: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRepeater, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRepeaterModeEnableByteDescription());
DEBUG_PRINT (F( " TransModeFixedTrans: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());بنفس الطريقة التي تريد تكوين تكوين تكوين ، لذلك أعتقد أن الطريقة الأفضل لإدارة التكوين هي استرداد السلطة الحالية ، وتطبيق التغيير الوحيد الذي تحتاجه وتعيينه مرة أخرى.
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE); configuration هو عرض Strucutre Previsiouly ، يسمح لك saveType بالاختيار إذا أصبح التغيير دائمًا للجلسة الحالية.
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters (configuration);
configuration.ADDL = 0x03 ; // First part of address
configuration.ADDH = 0x00 ; // Second part
configuration.NETID = 0x00 ; // NETID used for repeater function
configuration.CHAN = 23 ; // Communication channel
configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bit
configuration.OPTION.subPacketSetting = SPS_240_00; // Packet size
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command
configuration.OPTION.transmissionPower = POWER_22; // Device power
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info
configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmission type
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; // Enable WOR mode
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing
// Set configuration changed and set to not hold the configuration
ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE);
Serial.println(rs.getResponseDescription());
Serial.println(rs.code);
printParameters (configuration);
c.close()المعلمة جميعها تدار كلها ثابتة:
| addh | بايت العنوان العالي للوحدة (الافتراضي 00H) | 00H-FFH |
| addl | بايت العنوان المنخفض للوحدة (الافتراضي 00H) | 00H-FFH |
| تسري | معلومات حول معدل التكافؤ في معدل البيانات ومعدل بيانات الهواء | |
| تشان | قناة الاتصال (410m + Chan*1M) ، الافتراضي 17H (433 ميجا هرتز) ، صالح فقط لجهاز 433 ميجا هرتز Chek أدناه للتحقق من التردد الصحيح لجهازك | 00H-1FH |
| خيار | نوع ناقل الحركة ، وحجم الحزمة ، واترك رسالة خاصة | |
| transmission_mode | الكثير من المعلمة التي تحدد طريقة الإرسال |
خيار
نوع الإرسال ، وإعدادات السحب ، ووقت الاستيقاظ ، و FEC ، طاقة الإرسال
بت التكافؤ في UART: يمكن أن يكون وضع UART مختلفًا بين أطراف الاتصالات
| 4 | 3 | بت التكافؤ uart | قيمة ثابتة |
| 0 | 0 | 8N1 (افتراضي) | mode_00_8n1 |
| 0 | 1 | 8o1 | mode_01_8o1 |
| 1 | 0 | 8 E1 | mode_10_8e1 |
| 1 | 1 | 8n1 (يساوي 00) | mode_11_8n1 |
معدل باود UART: يمكن أن يكون معدل بذاعة UART مختلفًا بين أطراف الاتصالات ، ولا علاقة لمعايير الإرسال اللاسلكي ولن تؤثر على ميزات الإرسال / الاستقبال اللاسلكي.
| 7 | 6 | 5 | TTL Uart Baud Rate (BPS) | قيمة ثابتة |
| 0 | 0 | 0 | 1200 | UART_BPS_1200 |
| 0 | 0 | 1 | 2400 | UART_BPS_2400 |
| 0 | 1 | 0 | 4800 | UART_BPS_4800 |
| 0 | 1 | 1 | 9600 (افتراضي) | UART_BPS_9600 |
| 1 | 0 | 0 | 19200 | UART_BPS_19200 |
| 1 | 0 | 1 | 38400 | UART_BPS_38400 |
| 1 | 1 | 0 | 57600 | UART_BPS_57600 |
| 1 | 1 | 1 | 115200 | UART_BPS_115200 |
معدل بيانات الهواء: كلما انخفض معدل بيانات الهواء ، كلما طالت مسافة الإرسال ، أداء أفضل لمكافحة التداخل ووقت الإرسال الأطول ، يجب أن يحافظ معدل بيانات الهواء على نفس الشيء لكلا الطرفين.
| 2 | 1 | 0 | معدل بيانات الهواء (bps) | قيمة ثابتة |
| 0 | 0 | 0 | 0.3k | Air_data_rate_000_03 |
| 0 | 0 | 1 | 1.2k | Air_data_rate_001_12 |
| 0 | 1 | 0 | 2.4k (افتراضي) | Air_data_rate_010_24 |
| 0 | 1 | 1 | 4.8k | Air_data_rate_011_48 |
| 1 | 0 | 0 | 9.6k | Air_data_rate_100_96 |
| 1 | 0 | 1 | 19.2 كيلو | Air_data_rate_101_192 |
| 1 | 1 | 0 | 38.4k | Air_data_rate_110_384 |
| 1 | 1 | 1 | 62.5k | Air_data_rate_111_625 |
#### إعداد الحزمة الفرعية
هذا هو الحد الأقصى lenght من الحزمة.
عندما تكون البيانات أصغر من طول الحزمة الفرعية ، يكون الإخراج التسلسلي للطرف المتلقي مخرجًا مستمرًا دون انقطاع. عندما تكون البيانات أكبر من طول الحزمة الفرعية ، سيقوم المنفذ التسلسلي الطرف المتلقي بإخراج الحزمة الفرعية.
| 7 | 6 | حجم الحزمة | قيمة ثابتة |
| 0 | 0 | 240bytes (افتراضي) | SPS_240_00 |
| 0 | 1 | 128Bytes | SPS_128_01 |
| 1 | 0 | 64Bytes | SPS_064_10 |
| 1 | 1 | 32BYTES | SPS_032_11 |
#### RSSI تمكين الضوضاء المحيطة
يمكن لهذا الأمر تمكين/تعطيل نوع الإدارة لـ RSSI ، من المهم إدارة التكوين عن بُعد ، فالنتبه ليس معلمة RSSI في الرسالة.
عند التمكين ، يمكن إرسال أمر C0 C1 C2 C3 في وضع الإرسال أو وضع الإرسال WOR لقراءة السجل. سجل 0x00: الضوضاء المحيطة الحالية RSSI سجل 0x01: RSSI عند استلام البيانات في المرة الأخيرة.
| 5 | تمكين الضوضاء المحيطة RSSI | قيمة ثابتة |
| 0 | يُمكَِن | rssi_ambient_noise_enabled |
| 1 | تعطيل (افتراضي) | rssi_ambient_noise_disabled |
#### طاقة النقل
يمكنك تغيير هذه المجموعة الثابتة عن طريق تطبيق تعريف مثل ذلك:
# define E22_22 // default value without set
# define E22_30يمكنك تكوين تردد القناة OLSO مع هذا تحديد:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915#### تمكين RSSI
عند التمكين ، تتلقى الوحدة بيانات لاسلكية وستتبع بايت قوة RSSI بعد الإخراج عبر المنفذ التسلسلي TXD
#### نوع الإرسال
وضع النقل: في وضع الإرسال الثابت ، يمكن استخدام بايت الثلاثة الأولى من إطار بيانات كل مستخدم كعنوان وقناة عالية/منخفضة. تقوم الوحدة بتغيير عنوانها وقناةها عند الإرسال. وسوف يعود إلى الإعداد الأصلي بعد إكمال العملية.
#### تمكين وظيفة مكرر
#### مراقبة البيانات قبل الإرسال
عند التمكين ، سيتم مراقبة البيانات اللاسلكية قبل إرسالها ، والتي يمكن أن تتجنب التداخل إلى حد ما ، ولكنها قد تتسبب في تأخير البيانات.
#### wor
WOR Transmitter: يتم تشغيل وظائف الاستلام والنقل الوحدة النمطية ، ويتم إضافة رمز إيقاظ عند إرسال البيانات. يتم تشغيل الاستلام.
WOR Receiver: الوحدة غير قادرة على نقل البيانات وتعمل في وضع مراقبة WOR. فترة المراقبة هي كما يلي (دورة wor) ، والتي يمكن أن توفر الكثير من الطاقة.
#### Wor Cycle
إذا كان WOR ينقل: بعد استقبال مستقبل WOR للبيانات اللاسلكية ويخرجها من خلال المنفذ التسلسلي ، فإنه ينتظر 1000 مللي ثانية قبل إدخال WOR مرة أخرى. يمكن للمستخدمين إدخال بيانات المنفذ التسلسلي وإعادتها عبر اللاسلكي خلال هذه الفترة. سيتم تحديث كل بايت تسلسلي لـ 1000 مللي ثانية. يجب على المستخدمين نقل البايت الأول ضمن 1000 مللي ثانية.
أولاً ، يجب أن نقدم طريقة بسيطة ولكنها مفيدة للتحقق مما إذا كان هناك شيء ما في المخزن المؤقت
int available ();إنها ببساطة إرجاع عدد البايتات التي لديك في الدفق الحالي.
يتم استخدام وضع الإرسال العادي/الشفاف لإرسال الرسائل إلى جميع الأجهزة بنفس العنوان والقناة.
Lora E22 سيناريوهات الإرسال ، الخطوط هي قنوات
هناك الكثير من الطرق لإرسال/تلقي رسالة ، سنشرح بالتفصيل:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();الطريقة الأولى هي sendMessage ويستخدم لإرسال سلسلة إلى جهاز في الوضع العادي .
ResponseStatus rs = e22ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());الجهاز الآخر ببساطة على الحلقة
if (e22ttl.available() > 1 ){
ResponseContainer rs = e22ttl. receiveMessage ();
String message = rs. data ;` ` // First ever get the data
Serial. println (rs. status . getResponseDescription ());
Serial. println (message);
}إذا كنت ترغب في إرسال مخطط معقد ، يمكنك استخدام هذه الطريقة
ResponseStatus sendMessage ( const void *message, const uint8_t size);
ResponseStructContainer receiveMessage ( const uint8_t size);يتم استخدامه لإرسال Strucutre ، على سبيل المثال:
struct Messaggione {
char type[ 5 ];
char message[ 8 ];
bool mitico;
};
struct Messaggione messaggione = { " TEMP " , " Peple " , true };
ResponseStatus rs = e22ttl.sendMessage(&messaggione, sizeof (Messaggione));
Serial.println(rs.getResponseDescription());والجانب الآخر يمكنك تلقي الرسالة لذلك
ResponseStructContainer rsc = e22ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
Serial.println(messaggione.message);
Serial.println(messaggione.mitico);إذا كنت ترغب في قراءة الجزء الأول من الرسالة لإدارة المزيد من أنواع Strucutre ، فيمكنك استخدام هذه الطريقة.
ResponseContainer receiveInitialMessage ( const uint8_t size);أقوم بإنشائها لتلقي سلسلة بنوع أو غيرها لتحديد الهاوية للتحميل.
struct Messaggione { // Partial strucutre without type
char message[ 8 ];
bool mitico;
};
char type[ 5 ]; // first part of structure
ResponseContainer rs = e22ttl.receiveInitialMessage( sizeof (type));
// Put string in a char array (not needed)
memcpy ( type, rs.data.c_str(), sizeof(type) );
Serial.println( " READ TYPE: " );
Serial.println(rs.status.getResponseDescription());
Serial.println(type);
// Read the rest of structure
ResponseStructContainer rsc = e22ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;بنفس الطريقة أقوم بإنشاء مجموعة من الطريقة لاستخدامها مع الإرسال الثابت
تحتاج إلى تغيير طريقة الإرسال فقط ، لأن جهاز الوجهة لا يتلقى الديباجة مع العنوان والقناة.
لذا بالنسبة لرسالة السلسلة لديك
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);وللهيكل لديك
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *message, const uint8_t size );هنا مثال بسيط
ResponseStatus rs = e22ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e22ttl.sendFixedMessage(0, 0, 0x17, "Ciao");الإرسال الثابت لديه المزيد من السيناريوهات
Lora E22 سيناريوهات الإرسال ، الخطوط هي قنوات
إذا أرسلت إلى جهاز معين (سيناريوهات ثابتة الإرسال الثابتة) ، فيجب عليك إضافة ADDL و ADDH و Chan لتحديده مباشرة.
ResponseStatus rs = e22ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );إذا كنت تريد إرسال رسالة إلى جميع الجهاز في قناة محددة ، فيمكنك استخدام هذه الطريقة.
ResponseStatus rs = e22ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " ); إذا كنت ترغب في تلقي جميع رسائل البث في الشبكة ، فيجب عليك تعيين ADDH و ADDL باستخدام BROADCAST_ADDRESS .
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
printParameters (configuration);
configuration.ADDL = BROADCAST_ADDRESS;
configuration.ADDH = BROADCAST_ADDRESS;
// Set configuration changed and set to not hold the configuration
ResponseStatus rs = e22ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE);
Serial.println(rs.getResponseDescription());
Serial.println(rs.code);
printParameters (configuration);
c.close();### التكوين اللاسلكي
يدعم هذا الجهاز التكوين اللاسلكي باستخدام الأمر sepecial ، ولكن يبدو أنه لا يعمل ، أطلب eByte ولكن لم يتم استلام أي استجابة.
أقوم بتنفيذ أمر يرسل الحزمة بالطريقة الصحيحة (تم اختباره باستخدام Logic Analizer) ولكن يبدو أنه لا يعمل.
بالمناسبة ، أولاً ، تقوم بتنشيط بيئة ضوضاء RSSI ، مما يمكنك استخدام الأمر مثل SO:
Configuration configuration;
configuration.ADDL = 0x13 ;
configuration.ADDH = 0x13 ;
configuration.NETID = 0x00 ;
configuration.CHAN = 23 ;
configuration.SPED.uartBaudRate = UART_BPS_9600;
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
configuration.SPED.uartParity = MODE_00_8N1;
configuration.OPTION.subPacketSetting = SPS_240_00;
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
configuration.OPTION.transmissionPower = POWER_22;
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED;
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_TRANSMITTER;
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;الآن لديك جميع المعلومات للقيام بعملك ، لكنني أعتقد أنه من المهم إظهار بعض الأمثلة الواقعية لإلغاء كل الاحتمالات بشكل أفضل.
جهاز Ebyte Lora E22 لـ Arduino و ESP32 أو ESP8266: الإعدادات والاستخدام الأساسي
جهاز Ebyte Lora E22 لـ Arduino ، ESP32 أو ESP8266: مكتبة
جهاز Ebyte Lora E22 لـ Arduino ، ESP32 أو ESP8266: التكوين
جهاز Ebyte Lora E22 لـ Arduino و ESP32 أو ESP8266: ناقل حركة ثابت و RSSI
جهاز Ebyte Lora E22 لـ Arduino أو ESP32 أو ESP8266: توفير البيانات وإرسالها منظمة
جهاز Ebyte Lora E22 لـ Arduino و ESP32 أو ESP8266: وضع المكرر والإعدادات البعيدة
جهاز Ebyte Lora E22 لـ Arduino و ESP32 أو ESP8266: WOR متحكم ودرع Arduino
جهاز Ebyte Lora E22 لـ Arduino و ESP32 أو ESP8266: WOR متحكم ودرع Wemos D1
جهاز Ebyte Lora E22 لـ Arduino و ESP32 أو ESP8266: WOR Microcontroller و ESP32 DEV V1 SHIELD