
BLE تحت المجهر (24-52 رابط)
تقوم NORDIC بإنتاج بلورات جديدة من سلسلة nRF52 لعدة سنوات. ومع ذلك ، لا يزال الكثيرون يستخدمون عائلة nRF24 الأقدم. سأوضح لك اليوم كيفية تنظيم اتصال ثنائي الاتجاه بينهما على القنوات الإعلانية. بالإضافة إلى ذلك ، باستخدام قدرة بلورة nRF52 لقياس مستوى RSSI ، سنقوم برسمه على رسم بياني.
خيارات الاتصال
عند قراءة منتدى بلدان الشمال حول القدرات اللاسلكية بين العائلات القديمة والجديدة ، رأيت أن هناك احتمالين. هذا هو بروتوكول ESB (انفجار الصدمات المحسّن) وإضافته - بروتوكول Gazell. هذا أمر جيد بالتأكيد ، لكن هناك عدد من الصعوبات. على جانب nRF24 ، هذا ما توجد به المصادر في nRFgo_SDK_2.3.0 فقط للوحدتين nrf24le1 و nrf24lu1 (حزمة nRF24L01 + متحكم دقيق). ومع ذلك ، بين هواة الراديو ، هذه الوحدة بدون وحدة تحكم أكثر انتشارًا.
الشكل 1
من جانب nRF52 ليس كل شيء سلسًا أيضًا. في بروتوكولات SDK و ESB و Gazell يتم تقديمها في شكل وحدات مجمعة جاهزة ، وهي ليست جليد. سنقوم بربطها على أدنى مستوى ، والعمل مع السجلات مباشرة. في الثالثة له المادةلقد وصفت بالفعل كيفية صنع منارة باستخدام nRF51822. سيكون من الممتع أيضًا قراءة هذا المنشور .
أولاً ، بضع كلمات عن النظام الذي سنبنيه. سوف نتلقى وننقل عبر القنوات الإعلانية بتنسيق حزم BLE. سيسمح ذلك باستخدام الهاتف الخلوي وبرنامج NRF Connect ( android و iOS) شاهد عروضنا على الهواء. سيساعدنا هذا كثيرًا وسيسمح لنا بتقسيم المهمة الأصلية إلى مراحل. سيكون لدينا مضيف مع قناة راديو على nRF24L01 وجهاز على m / c nRF52832. علاوة على ذلك ، منذ ذلك الحين nRF24L01 هي مجرد قناة راديو ، ستحتاج إلى وحدة تحكم. سننشئ مشروعين في وقت واحد على م / ج مختلف عن شركة ST. سيبث المضيف حزمة راديو عدة مرات في الثانية. سيستقبلها الجهاز ، ويقيس مستوى RSSI ويرسل حزمة استجابة مرة أخرى ، والتي ستحتوي على قيمتها. بعد تلقي رسالة الإرجاع ، سيقوم المضيف بإخراج بايت واحد بمستوى RSSI إلى منفذ COM. من أجل تتبع بصريا التغير في مستوى الاستقبال، كتبت رسومية صغير البرنامج .
المضيف Nrf24L01 + Stm8L152
لذلك ، لنبدأ بالمضيف على الرابط Nrf24L01 + Stm8L152. لهذه المهمة ، أخذت الوحدة النمطية Nrf24L01 ، التي تم تقديم صورتها أعلاه ، و STM8L-DISCOVERY ، وهي لوحة تصحيح تستند إلى STM8L152C6T6. يوجد أدناه pinout لوحدة nRF24L01.
الصورة 2
Pinout من STM8L-DISCOVERY
#define LED_PORT GPIOC
#define LED_PIN GPIO_Pin_7
#define IRQ_PORT GPIOE
#define IRQ_PIN GPIO_Pin_0
#define CE_PORT GPIOD
#define CE_PIN GPIO_Pin_1
#define SPI_CLK_PORT GPIOE
#define SPI_CLK_PIN GPIO_Pin_4
#define SPI_MISO_PORT GPIOE
#define SPI_MISO_PIN GPIO_Pin_2
#define SPI_MOSI_PORT GPIOE
#define SPI_MOSI_PIN GPIO_Pin_5
#define SPI_CSN_PORT GPIOD
#define SPI_CSN_PIN GPIO_Pin_0
#define LED_PIN GPIO_Pin_7
#define IRQ_PORT GPIOE
#define IRQ_PIN GPIO_Pin_0
#define CE_PORT GPIOD
#define CE_PIN GPIO_Pin_1
#define SPI_CLK_PORT GPIOE
#define SPI_CLK_PIN GPIO_Pin_4
#define SPI_MISO_PORT GPIOE
#define SPI_MISO_PIN GPIO_Pin_2
#define SPI_MOSI_PORT GPIOE
#define SPI_MOSI_PIN GPIO_Pin_5
#define SPI_CSN_PORT GPIOD
#define SPI_CSN_PIN GPIO_Pin_0
الشكل 3
لإخراج البيانات إلى منفذ COM ، تم استخدام محول USB إلى m / s cp2102 متصلاً بأرجل PC2 و PC3. يمكنك الحصول على سائقها هنا. في النهاية ، هذا ما حدث.
الشكل 4
في الوحدة النمطية nRF24L01 ، يمكنك رؤية مكثف إلكتروليت ملحوم بين دبابيس الطاقة. يوصى بضبطه للتشغيل المستقر للوحدة. المشروع الكامل والثابت يمكن العثور هنا و هنا... يمكنك فتحه باستخدام IAR لبيئة تطوير Stm8. نقوم بوميض m / c وتشغيله. سيومض مؤشر LED الأزرق على لوحة STM8L-DISCOVERY مرتين في الثانية ، للإشارة إلى إرسال الحزم. حان الوقت الآن لبدء برنامج NRF Connect ورؤية شيء مثل الصورة الموضحة في الشكل 5 أ. إذا نجحت ، مبروك ، فقد اكتمل النصف الأول من المهام.
الشكل 5 أ ________________________________ الشكل 5 ب _______________________________ الشكل 5 ج ______________________________
المضيف Nrf24L01 + stm32F103
لكي لا نبتعد عن عمل المضيف ، نكرر نفس الشيء مع stm32F103 m / c. للقيام بذلك ، أخذت "حبة زرقاء" مع موصل USB مثبت عليها. هذا جعل من الممكن عدم استخدام محول ، ولكن لإخراج البيانات مباشرة إلى منفذ USB باستخدام برامج التشغيل هذه . لقد وضعت مشروعًا لـ stm32F103 في STM32CubeMx.
Pinout من جانب الحبة الزرقاء
#define SPI_CE_PORT GPIOB
#define SPI_CE_PIN GPIO_PIN_4
#define SPI_IRQ_PORT GPIOB
#define SPI_IRQ_PIN GPIO_PIN_5
#define SPI_MISO_PORT GPIOB
#define SPI_MISO_PIN GPIO_PIN_6
#define SPI_CLK_PORT GPIOB
#define SPI_CLK_PIN GPIO_PIN_7
#define SPI_MOSI_PORT GPIOB
#define SPI_MOSI_PIN GPIO_PIN_8
#define SPI_CSN_PORT GPIOB
#define SPI_CSN_PIN GPIO_PIN_9
#define SPI_CE_PIN GPIO_PIN_4
#define SPI_IRQ_PORT GPIOB
#define SPI_IRQ_PIN GPIO_PIN_5
#define SPI_MISO_PORT GPIOB
#define SPI_MISO_PIN GPIO_PIN_6
#define SPI_CLK_PORT GPIOB
#define SPI_CLK_PIN GPIO_PIN_7
#define SPI_MOSI_PORT GPIOB
#define SPI_MOSI_PIN GPIO_PIN_8
#define SPI_CSN_PORT GPIOB
#define SPI_CSN_PIN GPIO_PIN_9
Fig.6
المشروع ذاته والبرامج الثابتة التي يمكن اتخاذها هنا و هنا . يمكنك فتحه باستخدام IAR لبيئة تطوير Stm32. يمكن استخدام أي مبرمج لبرمجة STM32F103. لقد استخدمت هذا.
الشكل 7 نقوم
بتوصيل مصدر الطاقة ونحاول رؤية الحزم على القنوات الإعلانية. ستكون الصورة هي نفسها كما في الشكل 5 أ. لا شيء يومض في هذه اللوحة ، كل من مصابيح LED تعمل بشكل مستمر. لم أتمكن من إحياء مؤشر LED الأخضر في ساق PC13. تردد الإرسال أعلى من تردده على اللوحة مع stm8L152 وهو 10 هرتز. يمكن تغيير كل هذه المعلمات بسهولة داخل المشاريع.
الجهاز Nrf52832
لذلك ، سنفترض أن الجزء الأول من النظام مع المضيف يعمل لصالحنا. الآن سنقوم بتشغيل الجهاز. ويمكن القيام بذلك على KIT مناسب من NORDIC PCA10040
Fig.8
يمكنك أيضا استخدام أي مجلس مع م / ك nRF52832. سأستخدم لوحة من تصميم قديم. لكن في مجموعة PCA10040 ، راجعت ، يبدأ أيضًا. المشروع والثابتة و هنا و هنا . إنه مبني في بيئة Keil uVision4 باستخدام SDK12.3.0 القديم ، والذي يمكن استخدامه هنا... لكي يتم إنشاء المشروع بدون مشاكل ، يجب وضع مجلده في الدليل nrf52832_workspace_SDK12 \ أمثلة \ محيطي \. الحقيقة هي أن أي مشروع من NORDIC يحتوي على عدد كبير من الروابط ذات الصلة ، لذلك لن يتم جمعها في مكان عشوائي. لفلاش nRF52832 ، يمكنك استخدام برنامج nRFgoStudio أو nRF Connect for Desktop .
عند بدء تشغيل مشروع الجهاز ، أوصي بالقيام بذلك أولاً. لان يعمل الجهاز في وضع الاستماع ولا يرسل حزم راديو على الهواء. سيحدث هذا فقط كاستجابة ، بعد تلقي حزمة من المضيف. لذلك ، يجب عليك أولاً التحقق من أن الجهاز على قيد الحياة. للقيام بذلك ، تحتاج إلى التعليق على وظيفة BleListen () في المشروع ، وعلى العكس من ذلك ، قم بإلغاء التعليق على BleRadioTransaction (). كما هو مبين أدناه.
في هذه الحالة ، سيبدأ الجهاز نفسه في بث حزم الراديو. يمكن رؤيتها على الهاتف. يظهر مثال على الصورة في الشكل 5 ب. إذا كان كل شيء على ما يرام ، فإننا نعيد كل شيء ونقوم بتشغيل كل من الأجهزة المضيفة والجهاز. على الهاتف ، يجب أن نرى كلاهما ، كما في الشكل 5 ج. هذا يعني أن الجهاز رأى رسالة المضيف وأرسل رسالته ردًا. إذا تلقى المضيف بدوره رسالة استجابة بمستوى RSSI ، فإنه يقوم بتعيين هذه القيمة إلى منفذ COM. الآن إذا قمنا بتشغيل برنامج LevelRssi على Windows وحددنا المنفذ الصحيح ، فسنرى كيف يتغير مستوى RSSI مع وضع نسبي مختلف للأجهزة.
خاتمة
كنت قد انتهيت تقريبًا من إعداد المقال عندما خطرت لي فكرة أخرى. قررت استخدام جهاز أكثر شيوعًا كجهاز ، وهو دونجل pca10059 ، استنادًا إلى nRF52840 m / c. ها هي صورته.
الشكل 9
لحسن الحظ ، كان لدي لوحان. بعد إعادة بناء المشروع ، واجهت مشكلة تحميل البرنامج الثابت فيه. كنت أعرف أنني بحاجة للقيام بذلك باستخدام nRF Connect for Desktop، ولكن لم يكتشف على الفور كيفية إدخال الدونجل في وضع DFU (تحديث البرنامج الثابت). هيريس كيفية القيام بذلك. ندخل في وضع DFU مباشرة بعد إعادة التعيين. يجب عليك أولاً توصيل الدونجل بموصل USB ، ثم الضغط على زر إعادة الضبط (الأبعد عن المعالج) ، باستخدام دافع أفقي. يبدأ مؤشر LED الأحمر على الدونجل في الوميض. افتح برنامج nRF Connect وانقر فوق الزر "تثبيت" في قسم المبرمج. عند تنزيل البرنامج المطلوب ، انقر فوق الزر "فتح".
الشكل 10
ستفتح نافذة المبرمج أمامك.
الشكل 11
في أعلى اليسار ، حدد منفذ COM المطلوب. سترى شيئا مثل الصورة التالية.
الشكل 12
على الجانب الأيسر ، سنرى ما يوجد في ذاكرة وحدة التحكم. بالنقر فوق الزر "إضافة ملف HEX" ، يمكنك إضافة ملف لملئه إلى الجانب الأيمن. كانت هناك أيضا بعض المشاكل هنا. الزران "محو الكل" و "محو وكتابة" غير متاحين لنا. الحقيقة هي أن الدونجل لا يحتوي على مبرمج ، لذلك يتم تحميل البرنامج باستخدام أداة تحميل التشغيل. ونصل إليه من خلال قسم MBR. إذا قمنا بمسح هذه الأقسام ، فستكون البرامج الثابتة عبر وضع DFU مستحيلة. من الناحية النظرية ، تحتاج فقط إلى إضافة البرامج الثابتة إلى النصف الأيمن من الشاشة والضغط على الزر "كتابة". يبدو أن كل شيء صحيح ، لكنه لن يعمل. يبدأ برنامجنا عند العنوان صفر في ذاكرة FLASH ، وهذا العنوان مشغول بالفعل بواسطة قسم MBR. يمكن قراءة كيفية التعامل مع هذا في هذا البرنامج التعليمي.... إذا كنت تقرأ لفترة طويلة أم لا ، فسأشرح بالصور باستخدام مثال Keil. هذه صورة لمشروع مع تخصيص ذاكرة متحكم لمشاريع غير مكدسة.
الشكل 13 من
الضروري تحريك مؤشر FLASH-a إلى 0x1000 ، و RAM إلى 0x20000008 وإعادة ترجمة المشروع.
الشكل 14
بعد ذلك ، يمكنك بالفعل استخدام برنامج nRF Connect for Desktop. ربما هذا كل شيء. يمكنك مشاهدة ما فعلته في الفيديو أدناه.
yadi.sk/i/BGQQnga1HeN50A
yadi.sk/i/d8A9pU82kBcTMw
yadi.sk/i/XGac8xwpksVX7g
موظف في مجموعة شركات Caesar Satellite
Pecherskikh Vladimir