

Arduino Uno Shield
يمكنك طلب ثنائي الفينيل متعدد الكلور هنا
تعليمات وتجميع الفيديو على 6 جزء من الدليل
Wemos D1 Shield
يمكنك طلب ثنائي الفينيل متعدد الكلور هنا
ESP32 درع
يمكنك طلب ثنائي الفينيل متعدد الكلور هنا
تعليمات وتجميع الفيديو على 6 جزء من الدليل
أقوم بإنشاء مكتبة لإدارة سلسلة من أجهزة Lora Ebyte E32 ، وجهاز قوي للغاية ، وجهاز بسيط ورخيص.
Lora E32-TTL-100
يمكنك العثور هنا على aliexpress (جهاز 3 كم) aliexpress
يمكنهم العمل على مسافة 3000 متر إلى 8000 متر ، ولديهم الكثير من الميزات والمعلمات.
لذلك أقوم بإنشاء هذه المكتبة لتبسيط الاستخدام.
يرجى الرجوع إلى مقالتي للحصول على مخطط محدث
يمكنك العثور على مكتبتي هنا.
للتنزيل.
انقر فوق زر التنزيلات في الزاوية اليمنى العليا ، أعد تسمية المجلد غير المضغوط LORA_E32.
تأكد من أن المجلد LORA_E32 يحتوي على LORA_E32.CPP و LORA_E32.H.
ضع مجلد مكتبة LORA_E32 الخاص بك / المكتبات / المجلد.
قد تحتاج إلى إنشاء المجلد الفرعي للمكتبات إذا كانت مكتبتك الأولى.
أعد تشغيل IDE.
E32 TTL 100
يمكنك الشراء هنا aliexpress
| رقم الدبوس | عنصر دبوس | اتجاه الدبوس | تطبيق 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 | الإخراج | للإشارة إلى حالة عمل الوحدة النمطية وتستيقظ في MCU الخارجي. أثناء إجراء تهيئة الفحص الذاتي ، يخرج الدبوس مستوى منخفض. يمكن تكوينها على أنها إخراج Orpush-Pull المخرج المفتوح (يسمح العائم). |
| 6 | VCC | مزود الطاقة 2.3V ~ 5.5V DC | |
| 7 | GND | أرضي | كما ترون ، يمكنك تعيين أوضاع مختلفة عبر دبابيس M0 و M1. |
| وضع | M1 | M0 | توضيح |
|---|---|---|---|
| طبيعي | 0 | 0 | قناة UART والقناة اللاسلكية جيدة للذهاب |
| wke-up | 0 | 1 | مثل المعتاد ولكن تتم إضافة رمز الديباجة إلى البيانات المنقولة لإيقاظ المتلقي. |
| توفير الطاقة | 1 | 0 | تعطيل UART ويكون اللاسلكي على وضع WOR (Wake on Radio) مما يعني أن الجهاز سوف يتم تشغيله عند استلام البيانات. الإرسال غير مسموح به. |
| ينام | 1 | 1 | تستخدم في إعداد المعلمات. نقل وتلقي المعوقين. |
كما ترون أن هناك بعض المسامير التي يمكن استخدامها بطريقة ثابتة ، ولكن إذا قمت بتوصيلها بالمكتبة التي تكسبها في الأداء ويمكنك التحكم في جميع الوضع عبر البرنامج ، لكننا سنشرح أفضل بعد ذلك.
كما أقول بالفعل أنه ليس من المهم توصيل كل دبوس بإخراج متحكم ، يمكنك وضع دبابيس M0 و M1 على ارتفاع أو منخفض للحصول على تكوين مستحيل ، وإذا لم تقم بتوصيل Aux ، حددت المكتبة تأخيرًا معقولًا للتأكد من اكتمال العملية .
عند نقل البيانات يمكن استخدامها لإيقاظ MCU الخارجي والعودة إلى الانتهاء من نقل البيانات.
Lora E32 AUX PIN عند الإرسال
عند استلام AUX منخفضة وعودة عالية عندما يكون المخزن المؤقت فارغًا.
Lora E32 AUX PIN عند الاستقبال
يتم استخدامه أيضًا للتحقق الذاتي لاستعادة التشغيل العادي (على وضع الطاقة والوضع/البرنامج).
Lora E32 AUX PIN على التحقق الذاتي
مخطط اتصال ESP8266 أكثر بساطة لأنه يعمل في نفس الجهد للاتصالات المنطقية (3.3V).
Lora E32 TTL 100 Wemos D1 متصل بالكامل
من المهم إضافة المقاوم السحب (4،7kohm) للحصول على استقرار جيد.
| M0 | D7 |
|---|---|
| M1 | D6 |
| RX | دبوس D2 (سحب 4،7KΩ) |
| تكساس | دبوس D3 (سحب 4،7KΩ) |
| aux | D5 (المدخلات) |
| 3.3V | GND |
جهد العمل Arduino هو 5 فولت ، لذلك نحتاج إلى إضافة مقسم للجهد على Rx Pin M0 و M1 من وحدة Lora لمنع الضرر ، يمكنك الحصول على مزيد من المعلومات هنا مقسم الجهد: الآلة الحاسبة والتطبيق.
يمكنك استخدام مقاوم 2KOHM إلى GND و 1KOHM من الإشارة بدلاً من وضعها على RX.
Lora E32 TTL 100 Arduino متصل بالكامل
| M0 | 7 (مقسم الجهد) |
|---|---|
| M1 | 6 (مقسم الجهد) |
| RX | PIN D2 (Pullup 4،7kΩ وجهد الفوز) |
| تكساس | دبوس D3 (سحب 4،7KΩ) |
| aux | 5 (إدخال) |
| VCC | 3.3V |
| GND | GND |
لقد صنعت مجموعة من العديد من البنائين ، لأنه يمكن أن يكون لدينا المزيد من الخيارات والمواقف التي يجب إدارتها.
LoRa_E32 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);يتم إنشاء المجموعة الأولى من المنشئ لتفويض إدارة المسكنات وغيرها من المسامير للمكتبة.
rxPin و txPin هو رقم التعريف الشخصي للاتصال بـ UART وهو إلزامي .
auxPin هو رقم دبوس يتحقق من العملية ونقلها وحالة الاستلام (سنشرح بشكل أفضل بعد ذلك) ، وهذا التعريف الشخصي ليس إلزاميًا ، إذا لم تقم بتعيينه ، فأنا أطبق تأخيرًا للسماح للعملية بإكمال نفسها (مع الكمون).
m0pin و m1Pin هما دبابيس لتغيير وضع التشغيل (انظر الجزء العلوي من الجدول) ، أعتقد أن هذه المسامير في "الإنتاج" ستتصل عالية أو منخفضة مباشرة ، ولكن للاختبار ستتم إدارتها من قبل المكتبة.
bpsRate هو boudrate من بروديزريال عادة ما يكون 9600 (معدل الباود الوحيد في وضع البرمجيات/السكون)
مثال بسيط هو
# include " LoRa_E32.h "
LoRa_E32 e32ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E32 e32ttl100(2, 3, 5, 6, 7); // RX, TXيمكننا استخدام برامج برمجية مباشرة مع مُنشئ آخر
LoRa_E32 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);مثال العلوي مع هذا المُنشئ يمكن أن يكون كذلك.
# include < SoftwareSerial.h >
# include " LoRa_E32.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E32 e32ttl100 (mySerial);
// LoRa_E32 e32ttl100(&mySerial, 5, 7, 6);المجموعة الأخيرة من المنشئ هي السماح باستخدام Hardwareserial بدلاً من البرامج.
LoRa_E32 (SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);يتم استخدام أمر البداية لبدء تشغيل المسلسل والدبابيس في وضع الإدخال والإخراج.
void begin ();في التنفيذ
// Startup all pins and UART
e32ttl100.begin();هناك مجموعة من الطرق لإدارة التكوين والحصول على معلومات عن الجهاز.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);
ResponseStatus resetModule ();لتبسيط إدارة الاستجابة أقوم بإنشاء مجموعة من الحاوية ، بالنسبة لي بشكل مفيد للغاية لإدارة الأخطاء وإرجاع البيانات العامة.
هذه حاوية حالة ولديها نقطة إدخال بسيطة ، مع هذا يمكنك الحصول على رمز الحالة ووصف رمز الحالة
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if Successالرمز
E32_SUCCESS = 1 ,
ERR_E32_UNKNOWN,
ERR_E32_NOT_SUPPORT,
ERR_E32_NOT_IMPLEMENT,
ERR_E32_NOT_INITIAL,
ERR_E32_INVALID_PARAM,
ERR_E32_DATA_SIZE_NOT_MATCH,
ERR_E32_BUF_TOO_SMALL,
ERR_E32_TIMEOUT,
ERR_E32_HARDWARE,
ERR_E32_HEAD_NOT_RECOGNIZEDيتم إنشاء هذه الحاوية لإدارة استجابة السلسلة ولديها نقطة دخول 2.
data مع السلسلة التي تم إرجاعها من الرسالة status مثيل لـ RepsonseStatus .
ResponseContainer rs = e32ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);هذه هي الحاوية "الأكثر تعقيدًا" ، وأنا أستخدم هذا لإدارة الهيكل ، ولديها نفس نقطة الدخول للمسؤولية ، لكن البيانات مؤشر باطل لإدارة بنية معقدة.
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);الطريقة الأولى هي GetConfiguration ، يمكنك استخدامها لإعادة بيع جميع البيانات المخزنة على الجهاز.
ResponseStructContainer getConfiguration ();هنا مثال الاستخدام.
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);
Serial.println(configuration.SPED.getUARTBaudRate());تحتوي هيكل التكوين على جميع بيانات الإعدادات ، وأضيف سلسلة من الوظائف للحصول على كل وصف للبيانات الفردية.
configuration.ADDL = 0x0 ; // First part of address
configuration.ADDH = 0x1 ; // Second part of address
configuration.CHAN = 0x19 ; // Channel
configuration.OPTION.fec = FEC_0_OFF; // Forward error correction switch
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmission mode
configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up management
configuration.OPTION.transmissionPower = POWER_17; // dBm transmission power
configuration.OPTION.wirelessWakeupTime = WAKE_UP_1250; // Wait time for wake up
configuration.SPED.airDataRate = AIR_DATA_RATE_011_48; // Air data rate
configuration.SPED.uartBaudRate = UART_BPS_115200; // Communication baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bitلديك وظيفة مكافئة للحصول على كل الوصف:
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());بنفس الطريقة التي تريد تكوين تكوين تكوين ، لذلك أعتقد أن الطريقة الأفضل لإدارة التكوين هي استرداد السلطة الحالية ، وتطبيق التغيير الوحيد الذي تحتاجه وتعيينه مرة أخرى.
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 = 0x0 ;
configuration.ADDH = 0x1 ;
configuration.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;
// 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);المعلمة جميعها تدار كلها ثابتة:
| addh | بايت العنوان العالي للوحدة (الافتراضي 00H) | 00H-FFH |
|---|---|---|
| addl | بايت العنوان المنخفض للوحدة (الافتراضي 00H) | 00H-FFH |
| تسري | معلومات حول معدل التكافؤ في معدل البيانات ومعدل بيانات الهواء | تشان |
| قناة الاتصال (410M + Chan*1M) ، الافتراضي 17H (433 ميجا هرتز) ، صالح فقط لجهاز 433 ميجا هرتز | 00H-1FH |
|---|
خيار
نوع الإرسال ، وإعدادات السحب ، ووقت الاستيقاظ ، و FEC ، طاقة الإرسال
بت التكافؤ في UART: _ يمكن أن يكون وضع _Uart مختلفًا بين أطراف الاتصالات
| 7 | 6 | | --- | --- | --- | --- | --- | | 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 مختلفًا بين أطراف الاتصالات ، ولا علاقة لمعايير الإرسال اللاسلكي ولن تؤثر على ميزات الإرسال / الاستقبال اللاسلكي.
| 5 | 43 | TTL Uart Baud Rate (BPS) | قيمة ثابتة |
|---|---|---|---|
| 0 | 0 | 0 | 1200 |
| 0 | 0 | 1 | 2400 |
| 0 | 1 | 0 | 4800 |
| 0 | 1 | 1 | 9600 (افتراضي) |
| 1 | 0 | 0 | 19200 |
| 1 | 0 | 1 | 38400 |
| 1 | 1 | 0 | 57600 |
| 1 | 1 | 1 | 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 | 19.2k (نفسه إلى 101) | Air_data_rate_110_192 |
| 1 | 1 | 1 | 19.2k (نفسه إلى 101) | Air_data_rate_111_192 |
وضع النقل: في وضع الإرسال الثابت ، يمكن استخدام بايت الثلاثة الأولى من إطار بيانات كل مستخدم كعنوان وقناة عالية/منخفضة. تقوم الوحدة بتغيير عنوانها وقناةها عند الإرسال. وسوف يعود إلى الإعداد الأصلي بعد إكمال العملية.
| 7 | بت تمكين الإرسال الثابت (يشبه Modbus) | قيمة ثابتة |
|---|---|---|
| 0 | وضع النقل شفاف | ft_transparent_transmission |
| 1 | وضع الإرسال الثابت | ft_fixed_transmission |
وضع محرك الأقراص IO: يتم استخدام هذا البت إلى المقاوم السحب الداخلي للوحدة النمطية. كما أنه يزيد من القدرة على التكيف للمستوى في حالة الصرف المفتوح. ولكن في بعض الحالات ، قد تحتاج إلى سحب خارجي
المقاوم.
| 6 | وضع محرك IO (افتراضي 1) | قيمة ثابتة |
|---|---|---|
| 1 | مخرجات TXD و AUX Push-Pull ، مدخلات سحب RXD | io_d_mode_push_pulls_pull_ups |
| 0 | مخرجات TXD 、 AUX Open-Collector ، مدخلات RXD المفتوحة المفتوحة | io_d_mode_open_collector |
وقت الاستيقاظ اللاسلكي: تعمل وحدة الإرسال والاستقبال في الوضع 0 ، الذي يكون وقت تأخيره غير صالح ويمكن أن يكون قيمة تعسفية ، يمكن أن يعمل جهاز الإرسال في الوضع 1 في نقل رمز الديباجة للوقت المقابل بشكل مستمر ، عندما يعمل المستقبِل في الوضع 2 ، يعني الوقت وقت فاصل المراقبة (الاستيقاظ اللاسلكي). يمكن أن تكون فقط البيانات من جهاز الإرسال الذي يعمل في الوضع 1
تلقى.
| 5 | 4 | 3 | وقت الاستيقاظ اللاسلكي | قيمة ثابتة |
|---|---|---|---|---|
| 0 | 0 | 0 | 250ms (افتراضي) | wake_up_250 |
| 0 | 0 | 1 | 500 مللي ثانية | wake_up_500 |
| 0 | 1 | 0 | 750ms | wake_up_750 |
| 0 | 1 | 1 | 1000ms | wake_up_1000 |
| 1 | 0 | 0 | 1250ms | wake_up_1250 |
| 1 | 0 | 1 | 1500ms | wake_up_1500 |
| 1 | 1 | 0 | 1750ms | wake_up_1750 |
| 1 | 1 | 1 | 2000ms | wake_up_2000 |
FEC: بعد إيقاف تشغيل FEC ، يزداد معدل نقل البيانات الفعلي بينما تنخفض قدرة مضاد التداخل. كما أن مسافة الإرسال قصيرة نسبيًا ، يجب على كلا من طرفي الاتصال الحفاظ على نفس الصفحات المتعلقة بتشغيل FEC أو إيقاف التشغيل.
| 2 | مفتاح FEC | قيمة ثابتة |
|---|---|---|
| 0 | إيقاف تشغيل FEC | FEC_0_OFF |
| 1 | قم بتشغيل FEC (افتراضي) | FEC_1_ON |
قوة الإرسال
يمكنك تغيير هذه المجموعة الثابتة عن طريق تطبيق تعريف مثل ذلك:
# define E32_TTL_100 // default value without set ينطبق على E32-TTL-100 ، E32-TTL-100S1 ، E32-T100S2.
يجب أن تتأكد الطاقة الخارجية من قدرة الإخراج الحالي بأكثر من 250mA وضمان تموج مزود الطاقة في حدود 100mV.
لا ينصح بنقل الطاقة المنخفض بسبب انخفاض إمدادات الطاقة
كفاءة.
# define E32_TTL_100 // default value without set| 1 | 0 | طاقة الإرسال (تقريب) | قيمة ثابتة |
|---|---|---|---|
| 0 | 0 | 20DBM (افتراضي) | power_20 |
| 0 | 1 | 17dbm | Power_17 |
| 1 | 0 | 14DBM | Power_14 |
| 1 | 1 | 10dbm | power_10 |
ينطبق على E32-TTL-500。
يجب أن تتأكد الطاقة الخارجية من قدرة الإخراج الحالي على أكثر من 700 مللي أمبير وضمان تموج مزود الطاقة في حدود 100mV.
لا ينصح بنقل الطاقة المنخفض بسبب انخفاض كفاءة إمدادات الطاقة.
# define E32_TTL_500| 1 | 0 | طاقة الإرسال (تقريب) | قيمة ثابتة |
|---|---|---|---|
| 0 | 0 | 27 ديسيبل (افتراضي) | Power_27 |
| 0 | 1 | 24DBM | power_24 |
| 1 | 0 | 21 ديسيبل | Power_21 |
| 1 | 1 | 18DBM | Power_18 |
ينطبق على E32-TTL-1W ، E32 (433T30S) ، E32 (868T30S) ، E32 (915T30S)
يجب أن تتأكد الطاقة الخارجية من قدرة الإخراج الحالي بأكثر من 1A وضمان تموج مزود الطاقة في حدود 100mV.
لا ينصح بنقل الطاقة المنخفض بسبب انخفاض إمدادات الطاقة
كفاءة.
# define E32_TTL_1W| 1 | 0 | طاقة الإرسال (تقريب) | قيمة ثابتة |
|---|---|---|---|
| 0 | 0 | 30DBM (افتراضي) | Power_30 |
| 0 | 1 | 27 ديسيبل | Power_27 |
| 1 | 0 | 24DBM | power_24 |
| 1 | 1 | 21 ديسيبل | Power_21 |
يمكنك تكوين تردد القناة OLSO مع هذا تحديد:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915أولاً ، يجب أن نقدم طريقة بسيطة ولكنها مفيدة للتحقق مما إذا كان هناك شيء ما في المخزن المؤقت
int available ();إنها ببساطة إرجاع عدد البايتات التي لديك في الدفق الحالي.
يتم استخدام وضع الإرسال العادي/الشفاف لإرسال الرسائل إلى جميع الأجهزة بنفس العنوان والقناة.
Lora E32 سيناريوهات إرسال ، خطوط هي قنوات
هناك الكثير من الطرق لإرسال/تلقي رسالة ، سنشرح بالتفصيل:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();الطريقة الأولى هي sendMessage ويستخدم لإرسال سلسلة إلى جهاز في الوضع العادي .
ResponseStatus rs = e32ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());الجهاز الآخر ببساطة على الحلقة
if (e32ttl.available() > 1 ){
ResponseContainer rs = e32ttl. 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 = 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);إذا كنت ترغب في قراءة الجزء الأول من الرسالة لإدارة المزيد من أنواع 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 = e32ttl.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 = e32ttl.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 = e32ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e32ttl.sendFixedMessage(0, 0, 0x17, "Ciao");الإرسال الثابت لديه المزيد من السيناريوهات
Lora E32 سيناريوهات إرسال ، خطوط هي قنوات
إذا أرسلت إلى جهاز معين (سيناريوهات ثابتة الإرسال الثابتة) ، فيجب عليك إضافة ADDL و ADDH و Chan لتحديده مباشرة.
ResponseStatus rs = e32ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );إذا كنت تريد إرسال رسالة إلى جميع الجهاز في قناة محددة ، فيمكنك استخدام هذه الطريقة.
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " ); إذا كنت ترغب في تلقي جميع رسائل البث في الشبكة ، فيجب عليك تعيين ADDH و ADDL باستخدام BROADCAST_ADDRESS .
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 = BROADCAST_ADDRESS;
configuration.ADDH = BROADCAST_ADDRESS;
// 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);