- مجموعة أدوات تطوير nRF52:
- استوديو Segger المدمج
- DHT11 مع nRF52DK
- كيف تعمل مع Bluetooth Low Energy (BLE)؟
- مخطط الخصائص / الخدمة BLE
- شرح برنامج nRF52 BLE
- اختبار برنامجنا باستخدام nRF Connect
مع أجهزة اللياقة البدنية والساعات الذكية والأجهزة الأخرى التي يمكن ارتداؤها تزداد شعبية استخدام Bluetooth 5 / Bluetooth Low Energyيتم اعتماد معايير الاتصال على نطاق واسع. يساعدنا BLE على تبادل البيانات على مسافة قصيرة مع القليل من الطاقة ، وهو أمر بالغ الأهمية للأجهزة التي تعمل بالبطاريات مثل الأجهزة القابلة للارتداء. كما أنها تساعدنا في إنشاء شبكات لاسلكية تعمل بتقنية BLE ، وتأتي هذه الميزة في متناول اليد لأجهزة التشغيل الآلي للمنزل حيث يتعين على العديد من الأجهزة الاتصال ببعضها البعض في بيئة مغلقة. لقد استخدمنا بالفعل BLE مع Raspberry Pi و BLE مع ESP32 لأداء بعض وظائف BLE الأساسية. يقوم المهندسون بتجربة BLE لتصميم أجهزة لاسلكية محمولة يمكن تشغيلها لفترة طويلة على بطاريات صغيرة ، وهناك مجموعات تطوير متعددة متاحة للعمل مع BLE. في مراجعتنا الأخيرة لـ Arduino Nano 33 ، لاحظنا أيضًا أن اللوحة بها nRF52840 مع إمكانيات BLE.
في هذا البرنامج التعليمي ، سوف نستكشف لوحة تطوير مثيرة وشائعة أخرى تسمى nRF52 DK لقياس درجة الحرارة والرطوبة باستخدام BLE. بشكل افتراضي ، تدعم ملفات تعريف استشعار البيئة BLE نطاقًا واسعًا من المعلمات البيئية ولكن هذا البرنامج التعليمي يقتصر فقط على قيم درجة الحرارة والرطوبة. يتصل هذا الحل بهاتف ذكي عبر تقنية Bluetooth منخفضة الطاقة ويوفر تحديثًا متكررًا فيما يتعلق بالمعايير البيئية مثل درجة الحرارة والرطوبة. سنستخدم مستشعر DHT1 وسيتم قياس درجة الحرارة بدقة 0.01 درجة مئوية وسيتم قياس الرطوبة بدقة 0.01 بالمائة.
مجموعة أدوات تطوير nRF52:
nRF52DK عبارة عن نظام أساسي كامل للنماذج الأولية لتقنية Bluetooth منخفضة الطاقة وتطبيق إنترنت الأشياء اللاسلكي بسرعة 2.4 جيجاهرتز. تدعم مجموعة أدوات التطوير العديد من سلاسل أدوات Nordic القياسية مثل بيئات التطوير المتكاملة المفتوحة المصدر ودول مجلس التعاون الخليجي والتجارية مثل Keil و IAR و Segger Embedded Studio وما إلى ذلك. كما توفر Nordic مجموعة تطوير برامج كاملة لـ nRF52 ، والتي تتضمن دعمًا كاملاً لـ nRF52DK.
nRF52DK مدعوم بمتحكم دقيق nRF52832 ARM Cortex-M4F ، والذي تم دمج 512 كيلو بايت من ذاكرة فلاش و 64 كيلو بايت من SRAM. يحتوي nRF52DK على مصحح أخطاء Segger J-Link On Board المتكامل ، والذي يوفر تصحيحًا أسهل وأسرع بدون أجهزة تصحيح أخطاء خارجية / إضافية. يتضمن أيضًا موصل Arduino Uno Rev3 المتوافق، والذي يدعم التفاعل بين المدخلات التناظرية والرقمية مع المعالج الدقيق ويتضمن أيضًا بروتوكولات الاتصال القياسية مثل I2C (Inter-Integrated Circuit) و SPI (Serial Peripheral Interface) و UART (جهاز استقبال وجهاز إرسال غير متزامن عالمي). تم تصميم مجموعة التطوير هذه بهوائي مدمج ثنائي الفينيل متعدد الكلور يوفر اتصالاً لاسلكيًا قصير المدى باستخدام تقنية Bluetooth منخفضة الطاقة للاتصال بالهواتف الذكية وأجهزة الكمبيوتر المحمولة والأجهزة اللوحية.
استوديو Segger المدمج
لبرمجة لوحة التطوير ، سوف نستخدم Segger Embedded Studio مع nRF52. Segger Embedded Studio عبارة عن بيئة تطوير متكاملة (IDE) قوية C / C ++ تستهدف بشكل خاص تطوير الأنظمة المدمجة. يوفر هذا حلاً شاملاً شاملاً يحتوي على كل ما يلزم لبرمجة C المضمنة وتطويرها وتصحيح الأخطاء. يتضمن ذلك سير العمل الكامل لبرمجة الأنظمة المضمنة وتطويرها ، ويتميز بإدارة المشروع والمحرر ومصحح الأخطاء الذي يدعم أجهزة ARM Cortex. هذا IDE القوي والسهل الاستخدام مجاني تمامًا لعملاء بلدان الشمال الأوروبي مع ترخيص كامل دون أي قيود على حجم الكود يمكن تنزيل IDE من الرابط أدناه ،
قم بتنزيل Segger Embedded Studio
DHT11 مع nRF52DK
DHT11 هو مستشعر درجة الحرارة والرطوبة كامل الميزات مع مكون قياس الرطوبة من النوع المقاوم ومكون قياس درجة الحرارة من نوع NTC. إنه يوفر جودة ممتازة واستجابة أسرع وفعالية من حيث التكلفة. بشكل افتراضي ، تتم معايرة جميع مستشعرات DHT11 في المختبر مما يؤدي إلى الدقة والموثوقية القصوى. يتصل باستخدام نظام الواجهة التسلسلية أحادية السلك والمواصفات الأخرى موضحة أدناه
مواصفات DHT11:
- نطاق الرطوبة: 20-90٪ RH
- نطاق درجة الحرارة: 0-50 درجة مئوية
- دقة الرطوبة: ± 5 % ر
- دقة درجة الحرارة: ± 2 ℃
مخطط توقيت DHT11:
قراءة البيانات من مستشعر DHT11 بسيطة نسبيًا باستخدام مخطط التوقيت الموضح أعلاه. الإجراء مشابه لأي وحدة تحكم وقد استخدمنا هذا المستشعر بالفعل مع منصات تطوير أخرى مثل
- مستشعر DHT11 مع Raspberry Pi
- مستشعر DHT11 مع PIC16F877A
- مستشعر DHT11 مع STM32F103C8
- مستشعر DHT11 مع NodeMCU
لتوصيل مستشعر درجة الحرارة والرطوبة DHT11 مع مجموعة تطوير nRF52 ، اتبع مخطط الاتصال الوارد أدناه.
أنا أستخدم وحدة موصل لتوصيل المستشعر بلوحتي ، لذا يبدو إعدادي النهائي هكذا
مخطط التدفق للتواصل مع DHT11:
يوضح الرسم البياني أدناه التدفق المنطقي للبرنامج الذي سنستخدمه للتواصل بين nRF52DK و DHT11
تنسيق البيانات:
كيف تعمل مع Bluetooth Low Energy (BLE)؟
لفهم كيفية استخدام ميزة BLE ، يتعين علينا فهم بعض المصطلحات الأساسية الموضحة أدناه ، كما يمكنك قراءة مقالة ESP32 BLE لمعرفة المزيد عن BLE
ملف تعريف الوصول العام (GAP)
عام وصول الملف يحمل المسؤولية الكاملة إنشاء اتصال للاتصال بين BLE الطرفية و المركزية الأجهزة. يوفر GAP أيضًا إجراءات متنوعة بما في ذلك فحص / اكتشاف الجهاز ، وإنشاء اتصال طبقة الارتباط ، وإنهاء الارتباط ، ومصافحة ميزات الأمان ، وتكوين الجهاز الكامل. يعمل GAP في حالات الجهاز التالية
دول جاب |
وصف |
تعليق |
الحالة الأولية للجهاز عند إعادة التعيين |
المعلن |
الإعلان عن الجهاز بالبيانات التي تساعد في مسح البادئ |
الماسح الضوئي |
يستقبل ويرسل طلب المسح للمعلن |
البادئ |
يرسل طلب اتصال لإنشاء ارتباط |
العبد / السيد |
عند الاتصال ، الجهاز باعتباره تابعًا إذا كان المعلن ، يتقن إذا كان البادئ |
طبقة ملف تعريف السمات العامة (GATT)
تعتبر GATT اختصارًا لـ Generic Attribute Profile Layer ، وهي مسؤولة عن اتصال البيانات بين جهازي BLE (المحيطي والمركزي). يتميز اتصال البيانات في شكل خصائص ، تقوم بتوصيل البيانات وتخزينها. يلعب جهاز BLE دورين مختلفين لاتصالات الجهاز الواردة أدناه ،
- يحتوي خادم GATT على معلومات الخصائص التي سيتم استخدامها للقراءة والكتابة. في برنامجنا التعليمي ، حساس DHT11 و dev. المجموعة هي خادم الجات الخاص بنا.
- يقرأ عميل GATT البيانات ويكتبها من / إلى خادم الجات. الهاتف الذكي هو عميل GATT الذي يقرأ ويكتب البيانات في لوحة أجهزة الاستشعار الخاصة بنا.
بلوتوث SIG
Bluetooth Special Interest Group (SIG) هي منظمة المعايير التي تراقب تطوير معايير Bluetooth وترخيص تقنيات Bluetooth. لا تنتج مجموعة SIG أو تبيع أي منتجات Bluetooth. يحدد مواصفات Bluetooth وتوحيدها. وهي تحدد المعرف الفريد لملف تعريف الطاقة المنخفض الخاص بـ Bluetooth والخصائص ذات الصلة. يمكن العثور على مواصفات ملف تعريف GATT على الرابط أدناه
مواصفات ملف تعريف GATT
استنادًا إلى مواصفات اتفاقية الجات الواردة في الرابط أعلاه ، قمنا بجمع المعرفات الفريدة المطلوبة لمشروعنا والتي تم جدولتها أدناه.
الملف الشخصي / الخصائص |
UUID |
GAP (وصول عام) |
0x1800 |
الجات (السمة العامة) |
0x1801 |
الاستشعار عن البيئة (ESS) |
0x181A |
درجة الحرارة |
0x2A6E |
رطوبة |
0x2A6F |
مخطط الخصائص / الخدمة BLE
UUIDs BLE
UUID |
قيمة 16 بت |
UUID 128 بت |
خدمة ESS |
0x181A |
0000181A-0000-0000-0000-00000000000 |
Temp Char |
0x2A6E |
00002A6E-0000-0000-0000-00000000000 |
الرطوبة شار |
0x2A6F |
00002A6F-0000-0000-0000-00000000000 |
خصائص درجة الحرارة
خاصية |
وصف |
وحدة |
درجة مئوية بدقة 0.01 درجة |
شكل |
sint16 |
UUID |
0x2A6E |
الأس العشري |
2 |
اقرأ |
إلزامي |
خصائص الرطوبة
خاصية |
وصف |
وحدة |
النسبة المئوية بدقة 0.01 بالمائة |
شكل |
uint16 |
UUID |
0x2A6F |
الأس العشري |
2 |
اقرأ |
إلزامي |
شرح برنامج nRF52 BLE
ونحن سوف تستخدم SDK nRF5 لبرمجة عدة تنمية nRF52 لدينا. nRF5 SDK عبارة عن مجموعة كاملة لتطوير البرامج مدمجة مع العديد من ملفات تعريف Bluetooth منخفضة الطاقة و GATT Serializer ودعم برنامج التشغيل لجميع الأجهزة الطرفية في سلسلة nRF5 SoCs. تساعد SDK المطورين على بناء تطبيقات Bluetooth منخفضة الطاقة كاملة المزايا وموثوقة وآمنة مع سلسلة nRF52 و nRF51 من وحدات التحكم الدقيقة. يمكن تحميل البرنامج كاملاً من هنا شرح الكود كالتالي.
قم بتكوين دبوس بيانات DHT11 كمدخل في nrf52 مع تمكين السحب. يجب أن تكون حالة الدبوس عالية لتأكيد أن nRF52 يوفر PULLUP مناسبًا لدبوس بيانات DHT11
/ * اضبط على الإدخال وتحقق مما إذا تم سحب الإشارة * / Data_SetInput () ؛ DelayUSec (50) ؛ إذا (Data_GetVal () == 0) {return DHT11_NO_PULLUP ؛ }
قم بإنشاء إشارة البدء من متحكم nRF52 وتحقق من إشارة الاستلام.
/ * إرسال إشارة البدء * / Data_SetOutput () ؛ Data_ClrVal () ، DelayMSec (20) ؛ / * إبقاء الإشارة منخفضة لمدة 18 مللي ثانية على الأقل * / Data_SetInput () ؛ DelayUSec (50) ؛ / * تحقق من إشارة الاستلام * / إذا كان (Data_GetVal ()! = 0) {/ * يجب سحب الإشارة منخفضة بواسطة المستشعر * / إرجاع DHT11_NO_ACK_0 ؛ } / * انتظر بحد أقصى 100 لنا للحصول على إشارة ack من المستشعر * / cntr = 18 ؛ بينما (Data_GetVal () == 0) {/ * انتظر حتى ترتفع الإشارة * / DelayUSec (5) ؛ إذا (--cntr == 0) {إرجاع DHT11_NO_ACK_1 ؛ / * يجب رفع إشارة ACK هنا * /}} / * انتظر حتى تنخفض مرة أخرى ، نهاية تسلسل ack * / cntr = 18 ؛ بينما (Data_GetVal ()! = 0) {/ * انتظر حتى تنخفض الإشارة * / DelayUSec (5) ؛ إذا (--cntr == 0) {إرجاع DHT11_NO_ACK_0 ؛ / * يجب أن تنخفض الإشارة إلى الصفر مرة أخرى هنا * /}}
اقرأ الآن 40 بت من البيانات التي تحتوي على 2 بايت من درجة الحرارة و 2 بايت من الرطوبة و 1 بايت من المجموع الاختباري.
/ * اقرأ الآن بيانات 40 بت * / i = 0 ؛ البيانات = 0 ؛ لوب بت = 40 ؛ افعل {cntr = 11 ؛ / * انتظر بحد أقصى 55 لنا * / while (Data_GetVal () == 0) {DelayUSec (5) ؛ إذا (--cntr == 0) {إرجاع DHT11_NO_DATA_0 ؛ }} cntr = 15 ؛ / * انتظر بحد أقصى 75 لنا * / while (Data_GetVal ()! = 0) {DelayUSec (5)؛ إذا (--cntr == 0) {إرجاع DHT11_NO_DATA_1 ؛ }} البيانات << = 1 ؛ / * بت البيانات التالية * / if (cntr <10) {/ * إشارة البيانات عالية> 30 us ==> بت البيانات 1 * / data - = 1 ؛ } if ((loopBits & 0x7) == 1) {/ * next byte * / buffer = data؛ أنا ++ ؛ البيانات = 0 ؛ }} while (- loopBits! = 0) ؛
تحقق من صحة البيانات بمساعدة المجموع الاختباري.
/ * اختبار CRC * / if ((uint8_t) (المخزن المؤقت + المخزن المؤقت + المخزن المؤقت + المخزن المؤقت)! = المخزن المؤقت) {إرجاع DHT11_BAD_CRC ؛ }
معالجة وتخزين درجة الحرارة والرطوبة
/ * تخزين قيم البيانات للمتصل * / الرطوبة = ((int) buffer) * 100 + buffer ؛ درجة الحرارة = ((int) عازلة) * 100 + عازلة ؛
قم بتهيئة خدمة nRF5 SDK Logger. يتميز nRF52 SDK بواجهة تحكم في التسجيل تسمى nrf_log ويستخدم الواجهة الخلفية الافتراضية لتسجيل المعلومات. ستكون الواجهة الخلفية الافتراضية عبارة عن منفذ تسلسلي. نحن هنا تهيئة كل من nrf_log واجهة التحكم و nrf_log الخلفيات الافتراضية كذلك.
ret_code_t err_code = NRF_LOG_INIT (NULL) ، APP_ERROR_CHECK (رمز الخطأ) ، NRF_LOG_DEFAULT_BACKENDS_INIT () ،
يحتوي nRF52 SDK على وظيفة مؤقت التطبيق. تتيح وحدة مؤقت التطبيق إنشاء مثيلات متعددة للمؤقت بناءً على RTC1 الطرفية. هنا نقوم بتهيئة وحدة مؤقت تطبيق nRF5. في هذا الحل ، يتم استخدام مؤقتين للتطبيق والفاصل الزمني لتحديث البيانات.
ret_code_t err_code = app_timer_init () ؛ APP_ERROR_CHECK (رمز الخطأ) ،
يحتوي nRF52 SDK على وحدة إدارة الطاقة كاملة الميزات نظرًا لأن أجهزة BLE تحتاج إلى العمل لعدة أشهر على بطارية خلية Coin. تلعب إدارة الطاقة دورًا حيويًا في تطبيقات BLE. وحدة إدارة الطاقة nRF52 تتعامل تمامًا مع نفس الشيء. هنا نقوم بتهيئة وحدة إدارة الطاقة الخاصة بـ nRF5 SDK
ret_code_t err_code؛ err_code = nrf_pwr_mgmt_init () ، APP_ERROR_CHECK (رمز الخطأ) ،
يحتوي nRF52 SDK على ملف سداسي للبرامج الثابتة لجهاز Nordic Soft Device ، والذي يتميز بمكدس مركزي وطرفي منخفض الطاقة بتقنية Bluetooth. تتضمن مجموعة البروتوكولات المؤهلة للغاية GATT و GAP و ATT و SM و L2CAP و Link Layer. نحن هنا نتبع تسلسل التهيئة ، ذلك المكدس اللاسلكي nRF5 BLE (جهاز Nordic Soft)
ret_code_t err_code؛ err_code = nrf_sdh_enable_request () ، APP_ERROR_CHECK (رمز الخطأ) ، // تكوين مكدس BLE باستخدام الإعدادات الافتراضية. // جلب عنوان بداية التطبيق RAM. uint32_t ram_start = 0 ؛ err_code = nrf_sdh_ble_default_cfg_set (APP_BLE_CONN_CFG_TAG ، & ram_start) ؛ APP_ERROR_CHECK (رمز الخطأ) ، // تمكين مكدس BLE. err_code = nrf_sdh_ble_enable (& ram_start) ؛ APP_ERROR_CHECK (رمز الخطأ) ، // تسجيل معالج لأحداث BLE. NRF_SDH_BLE_OBSERVER (m_ble_observer ، APP_BLE_OBSERVER_PRIO ، ble_evt_handler ، NULL) ،
GAP هي المسؤولة عن فحص / اكتشاف الجهاز ، وإنشاء الارتباط ، وإنهاء الارتباط ، وبدء ميزات الأمان والتكوين. يتميز GAP بمعلمات اتصال رئيسية مثل الفاصل الزمني للاتصال وزمن انتقال الرقيق ومهلة الإشراف وما إلى ذلك. مع تهيئة معلمات اتصال ملف تعريف الوصول العام
ret_code_terr_code ؛ ble_gap_conn_params_tgap_conn_params ؛ ble_gap_conn_sec_mode_t sec_mode ؛ BLE_GAP_CONN_SEC_MODE_SET_OPEN (& sec_mode) ، err_code = sd_ble_gap_device_name_set (& sec_mode، (const uint8_t *) DEVICE_NAME ، strlen (DEVICE_NAME)) ؛ APP_ERROR_CHECK (رمز الخطأ) ، memset (& gap_conn_params، 0، sizeof (gap_conn_params)) ؛ gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL ، gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL ، gap_conn_params.slave_latency = SLAVE_LATENCY ، gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT ، err_code = sd_ble_gap_ppcp_set (& gap_conn_params) ؛ APP_ERROR_CHECK (رمز الخطأ) ،
GATT مسؤولة عن اتصال البيانات بين الأجهزة الطرفية والمركزية لـ BLE. وحدة nRF52 GATT مفيدة للتفاوض وتتبع الحد الأقصى لحجم ATT_MTU. هنا نقوم بتهيئة وحدة السمة العامة nRF52 SDK ،
ret_code_t err_code = nrf_ble_gatt_init (& m_gatt ، NULL) ؛ APP_ERROR_CHECK (رمز الخطأ) ،
تقوم الجات باتصالات البيانات في شكل خدمات وخصائص. هنا نقوم بتهيئة خدمات استشعار البيئة في الجات ، والتي تتضمن تهيئة خصائص مثل درجة الحرارة والرطوبة.
ret_code_terr_code ؛ nrf_ble_qwr_init_t qwr_init = {0} ؛ // تهيئة وحدة الكتابة في قائمة الانتظار. qwr_init.error_handler = nrf_qwr_error_handler ؛ err_code = nrf_ble_qwr_init (& m_qwr، & qwr_init) ؛ APP_ERROR_CHECK (رمز الخطأ) ، m_ess.notif_write_handler = ble_ess_notif_write_handler ؛ err_code = ble_ess_init (& m_ess) ؛ APP_ERROR_CHECK (رمز الخطأ) ،
يلعب الإعلان دورًا حيويًا في بيئة تطبيق BLE. تتضمن الحزم معلومات عن نوع العنوان ونوع الإعلان وبيانات الإعلان والبيانات الخاصة بالشركة المصنعة للجهاز وبيانات استجابة المسح. يتميز nRF52 SDK بوحدة إعلانية. هنا نقوم بتهيئة الوحدة الإعلانية بالمعلمات.
ret_code_terr_code ؛ ble_advdata_t advdata ؛ ble_advdata_t srdata ؛ ble_uuid_t adv_uuids = {{ESS_UUID_SERVICE، BLE_UUID_TYPE_BLE}} ، // بناء وتعيين بيانات الإعلان. memset (& advdata، 0، sizeof (advdata)) ؛ advdata.name_type = BLE_ADVDATA_FULL_NAME ، advdata.include_appearance = صحيح ، advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE ، memset (& srdata، 0، sizeof (srdata)) ؛ srdata.uuids_complete.uuid_cnt = sizeof (adv_uuids) / sizeof (adv_uuids) ؛ srdata.uuids_complete.p_uuids = adv_uuids ؛ err_code = ble_advdata_encode (& advdata ، m_adv_data.adv_data.p_data ، & m_adv_data.adv_data.len) ؛ APP_ERROR_CHECK (رمز الخطأ) ، err_code = ble_advdata_encode (& srdata ، m_adv_data.scan_rsp_data.p_data ، & m_adv_data.scan_rsp_data.len) ؛ APP_ERROR_CHECK (رمز الخطأ) ، ble_gap_adv_params_t adv_params ؛ // تعيين معلمات الإعلان. memset (& adv_params، 0، sizeof (adv_params)) ؛ adv_params.primary_phy = BLE_GAP_PHY_1MBPS ، adv_params.duration = APP_ADV_DURATION ، adv_params.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED ، adv_params.p_peer_addr = NULL ، adv_params.filter_policy = BLE_GAP_ADV_FP_ANY ، adv_params.interval = APP_ADV_INTERVAL ، err_code = sd_ble_gap_adv_set_configure (& m_adv_handle، & m_adv_data، & adv_params) ؛ APP_ERROR_CHECK (رمز الخطأ) ،
سيتم التعامل مع اتصال BLE ومراقبته باستخدام معلمات اتصال مختلفة مثل تأخير تحديث معلمات الاتصال الأول ، والتأخيرات المتتالية التالية ، وعدد التحديثات ، ووظيفة رد اتصال معالج حدث الاتصال ومعالج حدث رد اتصال خطأ الاتصال. هنا نقوم بتهيئة معلمات إنشاء اتصال BLE ومعالج حدث رد الاتصال لأحداث الاتصال وأحداث الخطأ.
ret_code_terr_code ؛ ble_conn_params_init_t cp_init ؛ memset (& cp_init، 0، sizeof (cp_init)) ؛ cp_init.p_conn_params = NULL ، cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY ، cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY ، cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT ، t_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID ، cp_init.disconnect_on_fail = خطأ ، cp_init.evt_handler = on_conn_params_evt ؛ cp_init.error_handler = conn_params_error_handler ؛ err_code = ble_conn_params_init (& cp_init) ؛ APP_ERROR_CHECK (رمز الخطأ) ،
بعد الانتهاء من تهيئة النظام ، نبدأ هنا بالإعلان عن اسم الجهاز BLE ومعلومات القدرة. من هنا ، يمكن رؤية هذا الجهاز المحيطي عبر قائمة مسح الهاتف الذكي Ble.
ret_code_terr_code ؛ err_code = sd_ble_gap_adv_start (m_adv_handle، APP_BLE_CONN_CFG_TAG) ؛ APP_ERROR_CHECK (رمز الخطأ) ،
تعمل الحلقة الرئيسية على مدى ثانيتين ، اقرأ درجة الحرارة والرطوبة والتحديثات إلى جهاز ذكي متصل باستخدام إما القراءة أو الإخطار
لـ (؛؛) { uint16_t temperature، humidity؛ DHTxx_ErrorCode dhtErrCode ؛ idle_state_handle () ، إذا (updtmrexp) { dhtErrCode = DHTxx_Read (& درجة الحرارة ، & الرطوبة) ؛ إذا (dhtErrCode == DHT11_OK) { NRF_LOG_INFO ("درجة الحرارة:٪ d الرطوبة:٪ d \ n" ، درجة الحرارة ، الرطوبة) ؛ إذا (temp_notif_enabled) { ble_ess_notify_temp (m_conn_handle، & m_ess، temperature) ؛ } else { ble_ess_update_temp (& m_ess، temperature) ؛ } إذا (humid_notif_enabled) { ble_ess_notify_humid (m_conn_handle، & m_ess، humidity)؛ } وإلا { ble_ess_update_humid (& m_ess ، الرطوبة) ؛ } } updtmrexp = false ؛ } }
اختبار برنامجنا باستخدام nRF Connect
nRF Connect هي أداة بلوتوث منخفضة الطاقة قوية تسمح بمسح واستكشاف الأجهزة الطرفية التي تدعم BLE. يدعم nRF Connect للجوال مجموعة واسعة من ملفات التعريف القياسية المعتمدة من Bluetooth SIG. يمكننا التحقق من برنامجنا باستخدام هذا ، بعد تثبيت التطبيق يمكننا إقران لوحة nRF52 بهاتفنا عن طريق البحث عن أجهزة BLE على التطبيق. داخل سمة الاستشعار البيئي ، يمكننا ملاحظة تحديث قيم درجة الحرارة والرطوبة كما هو موضح في الصور أدناه.
Hariharan Veerappan هو مستشار مستقل لديه أكثر من 15 عامًا من الخبرة في تطوير المنتجات المدمجة. يقدم خدمات استشارية في تطوير البرامج الثابتة / Linux ، كما أنه يوفر التدريب للشركات والتدريب عبر الإنترنت. يحمل هاريهاران درجة البكالوريوس في الهندسة في تخصص هندسة الإلكترونيات والاتصالات ، من خلال مقالاته ودروسه التعليمية ، يشارك قراء مجلة Circuit Digest خبرته وأفكاره.