WIP
حالة المشروع:
الفكرة الرئيسية هي أن تكون قادرًا على استخدام درع Semtech Lora SX1272MB2DAS على لوحة Nucleo STM32WB55. لسوء الحظ ، فإن الكود المتاح من قبل ST (I-Cube-Lrwan) لهذا الدرع متاح فقط لعدد قليل من ألواح النواة (L053RG ، L073RZ ، L152RE و L476RG).
تتمثل الأفكار المشتقة في الزواج من Lora و Ble ، في الوقت الحاضر ، يمكن الوصول إلى العديد من كائنات إنترنت الأشياء لأسباب مختلفة (الإعدادات ، Provisonning ، Fuota ، ...) ولكن في الغالب لأنها متوافقة مع الهواتف الذكية. لا يوجد لدى STM32WL Diroie ولا يحتوي STM32WB Diroie على إمكانات Lora.
حسنًا ، أتيحت لي الفرصة لإنشاء زوج مع SX1272 و WB55 والسماح بمزيج من رقاقة لمشروع IoT المرن. ضع في اعتبارك أن WB55 Derie لا يقتصر على BLE. يمكن للبرامج الثابتة Coprocessor التعامل مع بروتوكولات Sideway 2.4 جيجا هرتز مثل Zigbee و Openthread. لذا فإن مزيج الاتصالات طويلة المدى وقصيرة المدى للاهتمام أمر مثير للاهتمام.
هذا المشروع هو مجرد منفذ من الرموز والمكتبات الحالية ولكن قد يوفر وقت الإعداد لبعض المطورين لأن هناك بعض المشكلات الفنية التي يجب حلها.
مع Lora 2.4 جيجا هرتز القادمة ، يعتبر هذا العمل الانتقالي. سيجمع SX1280 بين التواصل القصير والطويل في شريحة واحدة. قد ترغب في إلقاء نظرة فاحصة.
هذا أمر سهل الحضور. إن Semtech SX1272MB2XAS Lora MBED SHIELD عبارة عن درع متوافق مع ARDUINO ، ولوحات النيوكليو الموصل المقابل. الموجز الفني:
كما ذكرنا STM32WB55 Serie هو الهدف هنا و P-Nucleo-WB55RG هي لوحة لطيفة للعب معها. الموجز الفني:
بمجرد توصيله (لا يوجد تفكير) ، إليك الكائن الناتج. 

لا تنس أبدًا توصيل الهوائي قبل تشغيل اللوحات. قد تلحق الضرر بإخراج مكبر الصوت RF (على الرغم من أنها قوة منخفضة إلى حد ما). بالطبع ، شراء اثنين من كل منهما ضروري بعض الشيء لبينج بونغ.
| طَرد | إصدار |
|---|---|
| STM32Cubeide | 1.7 |
| STM32CUBEMX | 6.3.0 |
| FW_WB | 1.12.1 |
| i-cube-lrwan | 2.0 |
يتم تغطية الجزء الرئيسي من الكود بواسطة ST و Semtech Sublicensing. تحقق من الاتفاقات المعنية للاستخدام السليم:
| عنصر | حقوق الطبع والنشر | رخصة |
|---|---|---|
| مصدر التطبيق الأصلي | stmicroelectronic | اتفاقية ترخيص ST SLA0044 |
| LoRawan® Stacks | Semtech | BSD Reviseded مرخصة لقطع غيار Semtech |
| Cortex®-M CMSIs | ARM LTD | BSD-3-bine أو Apache ترخيص 2 |
بيئة التطوير المفضلة لدي هي Linux لكن أدوات ST متاحة لنظام التشغيل Mac و Windows أيضًا. أول اثنين أسهل في الإعداد ، وعادة ما لا توجد مشاكل أو مشاكل السائق. حسنًا ، تعرف Tech Savvy الحقيقية ذلك بالفعل.
على الرغم من أنني لست معجبًا كبيرًا بـ IDES ، إلا أن STM32Cudeide Works OK و ST Plugins ساعدت (MX ، تنزيل توسعات البرامج ، ...). يوفر STMICRO حزمة توسيع البرامج لبعض شلالات لورا. كما هو مرتبط أعلاه ، فإن I-Cube-Lrwan يحتوي على مثال على مشاريع ومكتبات مثل برامج تشغيل SX1272 ذات المستوى المنخفض (من خلال SPI) ومكدس Lorawan (1.0.3 متوافق).
يمكن أن يكون المشروع مفتوحًا بسهولة في STM32Cudeide بدون تبعيات. كل الرمز لا توجد حاجة لتثبيت WB أو Lorawan Firmare من ST. افتح المشروع وقم بإنشائه (تم اختباره على Linux و MacOS). ومع ذلك ، فأنت بحاجة إلى برامج BLE Stack مثبتة ل CPU2. هنا ، تم وميض STM32WB5X_BLE_STACK_FULL_FW.BIN . يتم توفير كل البرامج الثابتة في المشاريع/STM32WB_COPRO_WIRELY_BINARISES/STM32WB5X من حزمة البرامج الثابتة STM32CUBEWB وكذلك كيفية برمجة لوحات لهذا. يجب القيام به مرة واحدة .
التجربة بأكملها تحتاج إلى بعض الأدوات الإضافية. لقد استخدمت Dongle Mighty NRF52840 USB مع NRF Connect لسطح المكتب 3.7.0 (متوفر على Linux و MAC و Windows) من أشباه الموصلات الشمالية لاختبار اتصال BLE. أعلم أن الهواتف الذكية يمكنها القيام بذلك ، فأنا أستخدم LightBlue على iOS أو Android ، ولكن عندما تعبث عن uuids أو أسماء الأجهزة ، تميل الأنظمة الأساسية إلى أن تضيع في بياناتها المخزنة مؤقتًا ، لذلك أود معرفة ما يجري مع أدوات التطوير مثل أدوات الشمال.
بالنسبة لجزء Lorawan ، يعد TTN رائعًا واخترت شراء بوابة LoRawan غير مكلفة ، وهي TTIG (أرخص من قبعات Rak for Raspberry PI) للاختبارات المحلية. تم ترميز البوابة لخدمات TTN ، ولكن يجب أن تكون هناك طريقة للاتصال بـ LNS الخاصة بك.
كانت تلك هي الخطوة الأولى. جعل الأشياء تعمل واخترت مثال انتقال RF منخفض المستوى لذلك. كان نقل رمز ST/Semtech مسألة التعامل مع إعادة تكوين WB55 إلى:
رسم خرائط دبوس بين لوحة Nucleo WB55 ودرع SX1272MB2DAS:
| SX1272MB2DAS | P-nucleo-STM32WB55 | اسم دبوس موصل Arduino |
|---|---|---|
| DiO0 | PC6 | D2 |
| DIO1 | PA10 | D3 |
| DiO2 | PC10 | D4 |
| DIO3 | PA15 | D5 |
| NSS | PA4 | D10 |
| SCLK | PA5 | D13 |
| ميسو | PA6 | D12 |
| موسي | PA7 | D11 |
| إعادة ضبط | PC0 | A0 |
لذلك لا شيء غير متوافق في البداية. SPI1 PIN Set Matchs و NSS و RESET دبابيس على ما يرام أيضا. ولكن هنا يأتي أول هيكوب مع خطوط IRQ. يستخدم PC6 خط Exti6 IRQ (Exti9_5_irqn) ، هذا جيد ، لكن PA10 و PC10 و PA15 يشتركان في نفس سطر Exti IRQ ، وهو exti15_10_irqn.
لذلك تم تعديل تعريف واجهة الراديو لمطابقة لوحة Nucleo-WB55 (SX1272MB2DAS_CONF.H). وتم تعديل معالجات IRQ للتحقق من حالات GPIO (DIOX) قبل استدعاء معالجات SX1272 IRQ المقابلة (راجع ملف المصدر STM32WBXX_IT.C)
RTC لديه مصدر ساعة على LSE.
تم تعديل تخطيط ملف المشروع الأصلي أيضًا قليلاً. تم تكامل الملفات الأصلية على مشروع تم إنشاؤه MX (SX1272.IOC) للحفاظ على إمكانية تغيير المشروع. ومع ذلك ، يجب أن تؤخذ بعض الحذر كرمز متضارب ربما تم إنشاؤه.
برمجة لوحين مع هذا الرمز يعمل ، وكما هو متوقع ، فإن اللوحة الأولى التي تتلقى استجابة Pong لرسالة ping تصبح سيدًا يصبح الآخر عبداً . لقد جعلت حالة LED تعكس هذا (كما هو مخطط لها سابقًا في الكود الأصلي). أحدهما يميل إلى اللون الأحمر حيث يكون للآخر LED الأخضر وميض بعد وقت قصير: الفيديو.
رمز BLE هو واحد MX تم إنشاؤه بالكامل. إن وجود واحد يعمل على الفور لم يكن واضحًا حيث يجب تعيين العديد من الأشياء بشكل صحيح في مشروع MX (يمكن أن يكون مقالًا منفصلًا). أقوم بإعداد مشروع اختبار BLE بشكل منفصل لهذا الغرض ، بمجرد عمله ، قمت بدمج الكود في مشروع Lora لجعل الجريين جنبًا إلى جنب.
وبالتالي فإن برنامج اختبار BLE هو مجرد رمز محيطي (مستشعر معدل ضربات القلب). يعتمد على إطار عمل مختلف تمامًا يسمى خادم Timer Server (HW_TS). لا تستند مكتبة Semtech Lora إلى هذه المكتبة ولكن على الأداة المساعدة STM32_Timer ، نفسها بناءً على برنامج تشغيل HAL RTC. لقد قمت بإزالة مكتبة الأداة المساعدة ومحول RTC بحيث يعتمد المشروع بأكمله على HW_TS فقط. تعتمد مكتبة Lora فعليًا على واجهة برمجة تطبيقات وسيطة (Timer.h) والتي كان من السهل إعادة كتابة حتى يتم استخدام HW_TS بدلاً من ذلك. يعتمد تطبيق Ping Pong من ناحية أخرى على مكتبة المرافق السابقة. جعلت بعض التغييرات التي تم إجراؤها على هذا الجزء رمز كامل يعتمد على HW_TS فقط.
أحتاج إلى دمج Taskids المحددة بواسطة تطبيق Ping Pong ورمز BLE. لحسن الحظ ، يستخدم الاثنان أداة STM32_Sequencer . بمجرد الانتهاء من ذلك بشكل صحيح ، قمت بنجاح بتطبيق Lora Ping Pong وتطبيق HRS BLE الذي يعمل بشكل متزامن وبشكل عيوب على لوحة STM32WB55.
لقد قمت بتعديل رمز app_ble.c بحيث يعتمد الاسم المعلن (المرئي) على STM32 UDN حتى نتمكن من التمييز بين اللوحات التي تعمل في نفس الوقت.
للحصول على عرض تجريبي مفيد ، كتبت خدمة GATT مخصصة بحيث يمكن استجواب كلا المجالسين عبر BLE حتى تتمكن من معرفة الدور الذي تلعبه عقدة Lora (Master أو Slave) وعدد Ping/Pong المرسل/المستلم. لهذا ، قمت بتكييف رمز BLE قليلاً ، لذا يعكس LED الأزرق حالة اتصال BLE. تتمتع الخدمة المخصصة (التي لا يتم إنشاؤها بواسطة MX ، فوحور فوضوي) ، وخصائصان ، أحدهما يعرف دور العقدة (ماجستير أو عبد بعد مزامنة Pingpong) وآخر هو عداد من إطارات Ping المستلمة (عقدة العبيد) أو إطارات Pong (العقدة الرئيسية). فيما يلي لقطة شاشة NRF متصلة بالوحات المتزامنة: 
لقد تم ذلك ، فضلت قضاء بعض الوقت في تطبيق Lora مختلف قليلاً يتحكم فيه BLE ، وهي الخطوة التالية.
مكدس Lorawan هو واحد من قبل Semtech المقدمة في حزمة التوسع I-Cube-Lrwan. يتوافق 1.0.3 ويتضمن حزمة برامج التصديق إذا كانت هناك حاجة إلى شهادة Lora Alliance للجهاز النهائي.
مرة أخرى ، يعتمد الكود على غلاف RTC مختلف عن مكدس BLE ، لذلك تم تعديله لذلك. تم زيادة عدد أجهزة ضبط الوقت لأن إعداد Timerserver الأولي HW محدود جدًا لتشغيل المكدسين بشكل متزامن (تم تغيير ملف HW_IF.H بعد تعديل IOC).
المثال الأصلي ، عقدة LoRawan End ، يرسل مجموعة كاملة من البيانات ، قمت بتقليل إطار الاختبار بشكل كبير إلى نص بسيط.
تم تعيين الجهاز للانضمام إلى الشبكة باستخدام OTAA ، لذلك هناك حاجة إلى 3 عناصر: Deveui و Joineui و Appkey. Deveui هو معرف فريد لجهاز الأجهزة ومصمم من STM32 "الرقم التسلسلي". يتم استخدام معرف Joineui (أو Appeui) السابق لفصل التطبيق على جانب الخادم. يعد Appkey مهمًا جدًا (مفتاح AES128) الذي يتم الاحتفاظ به سراً للغاية. قام رمز المصدر بتعيينه على قيمة يجب تغييرها للاستخدام النهائي. تتم السرية بواسطة رمز Semtech باستخدام واجهة برمجة تطبيقات عنصر آمن ، في حالتنا ، إنها SE افتراضية ولكن هذه مريحة للغاية إذا كنت تستخدم واحدة فعلية.
يتم ترميز Joineui و Appkey في ملف se-hidentity.
يعطي اختبار مع TTN و TTIG Gateway هذه:

للجزء التعريفي.

بمجرد أن كان لدى اللوحتين رد إيجابي من JoinRequest كل منهما.
تمت كتابة خدمة GATT خاصة لتكشف:
| يصف | وصول | تعليق |
|---|---|---|
| حالة | يقرأ | سواء أكملت joinrequest أم لا |
| deveui | يقرأ | قراءة deveui المحسوبة |
| Joineui | يقرأ | قراءة من joineui/appeui المتشددين |
| بيانات | يكتب | البيانات التي سيتم إرسالها (16 بايت كحد أقصى). الإعدادات الافتراضية إلى "STM32WB55 هنا!" |
| فترة | يكتب | الفترة بالثواني التي يتم فيها إرسال البيانات (الافتراضيات إلى 10 ثوان) |
| RSSI | يقرأ | تم تحديثه عند استلام رسالة الوصلة الهابطة |
| SNR | يقرأ | تم تحديثه عند استلام رسالة الوصلة الهابطة |
ملاحظة: لا تعبث مع الفترة ، هناك قيود على دورة العمل بنسبة 1 ٪. مع الإعدادات الافتراضية ، ترسل الوحدة 15 بايت كل 10 ثوان. في SF7BW125 يمكن القيام بذلك في أدنى فترة ~ 7 ثوان.
هنا توضيح للخصائص المكشوفة عند توصيلها بها:

يتبع