مقدمة
في هذه المقالة ، سأخبرك بكيفية توصيل مقياس الجرعات AtomTag عبر وحدة بلوتوث Bluegiga BLED112 بـ Raspberry PI من أجل نقل نتائج القياس إلى خدمة People People .AtomTag - مقياس جرعات Bluetooth منخفض الطاقة للهاتف الذكي والكمبيوتر اللوحي مع عداد جيجر SBM-20. سيرسل الجهاز إلى الخادم: معدل الجرعة والخطأ الإحصائي وشحن البطارية. في نهاية المقال ، سنرى كيف ترتبط قراءات مقياس الجرعات بأحداث الطقس.(narodmon.ru) — SaaS ( , ) (, , ., , , ), - () .
Generic Attribute Profile (GATT)
يدعم مقياس الجرعات AtomTag ملف تعريف GATT. في مصطلحات Bluetooth ، ملف التعريف عبارة عن مجموعة من الميزات أو الإمكانات المتاحة لجهاز Bluetooth معين.يحدد ملف تعريف GATT الهيكل الهرمي لتخزين البيانات. يظهر الهيكل في الشكل:
الخدمة عبارة عن حاوية تحتوي على عدة سمات تسمى الخصائص. جميع الخدمات لها معرفات فريدة UUID و HANDLE. على سبيل المثال ، يحتوي جهاز قياس الجرعات على خدمتين:1. خدمة للمستخدم ، والتي تحتوي على خصائص قراءة نتائج القياس وتسجيل إعدادات المستخدم (إعدادات إنذار الصوت).2.خدمة تحتوي على خصائص تخزين إعدادات المصنع: معاملات المعايرة ، واسم الجهاز ، وما إلى ذلك.مميزة - تتكون من:1. القيم (عادة لا تزيد عن 20 بايت).2. الواصف - هنا يتم وصف الغرض من الخاصية ، ونوع البيانات المخزنة ، وكذلك إعدادات الخاصية.3. معرف فريد UUID والمقبض.البيانات التي نهتم بها: يتم تخزين عدد النبضات المسجلة وشحن البطارية في الخصائص بالضبط.بليد 112
الوحدة النمطية هي جهاز USB-CDC ، والذي تم تعريفه في النظام على أنه / dev / ttyACM0 ولا يتطلب تثبيت أي برامج تشغيل على Raspbian Jessie Lite مع إصدار kernel 4.4. يتم أيضًا تبادل البيانات مع الوحدة النمطية كما هو الحال مع المنفذ التسلسلي. بروتوكول التبادل ثنائي. لن نكتب المحلل اللغوي لأنفسنا ، لأنه هناك الكثير من الأوامر لهذه الوحدة وأخذ SDK في C من الشركة المصنعة. سيكون رابط SDK في نهاية المقالة.برمجيات التوت بي
سنحتاج إلى الملفات التالية من SDK:1. cmd_defs.c ، cmd_defs.h2. apitypes.h3. commands.c4. uart.c ، uart.cواجهة برمجة التطبيقات تستند إلى رد الاتصال. أعلن الملف commands.c تطبيقات كعب الروتين لردود الفعل غير المستخدمة. يحدد SDK نوعين من الرسائل التي يمكن أن تأتي من الوحدة: الحدث ونتائج العملية. في برنامجنا ، سوف نتلقى بيانات من مقياس الجرعات باستخدام التنبيهات التي يتم إرسالها بواسطة مقياس الجرعات كل ثانيتين عندما تتغير خصائص القياس. ونتيجة لذلك ، كل ثانيتين سيأتي حدث من الوحدة وسيتم استدعاء رد الاتصال المقابل.دعونا نحلل الخوارزمية لربط وتبادل البيانات باستخدام مقياس الجرعات:1. يفتح المنفذ /dev/ttyACM0
2.نقوم بإعادة تشغيل وحدة Bluetooth باستخدام الوظيفة api ble_cmd_system_reset();
3. الاتصال بالجهاز على عنوانه باستخدام ble_cmd_gap_connect_direct()
4. طلب قائمة بخدمات الجهاز ونطاقات القيم التي تتضمن HANDLs للخصائص في هذه الخدمات ble_cmd_attclient_read_by_group_type()
5. بعد الحدث ، ble_evt_attclient_procedure_completed
اطلب قائمة بالخصائص باستخدام ble_cmd_attclient_find_information().
6. في الحدث ، ble_evt_attclient_find_information_found
تذكر مقابض خصائص القياس ووصيف توصيف خصائص العميل (CCCD).7. في حالة ble_evt_attclient_procedure_completed
تشغيل التنبيهات. في الفقرة السابقة ، أدركنا التعامل مع CCCD ويمكن قراءتها أو كتابتها. لتمكين الإشعارات ، تحتاج إلى تعيين علامة "تم تمكين الإشعارات" في واصف CCCD باستخدام الوظيفةble_cmd_attclient_attribute_write()
. بعد فصل الجهاز ، تتم إعادة تعيين قيمة هذا المقبض.8. الآن ، عند تغيير قيم خصائص الجهاز ، سيتم رفع حدث ble_evt_attclient_attribute_value(const struct ble_msg_attclient_attribute_value_evt_t *msg)
. يمكنك تمييز خاصية واحدة عن الأخرى من خلال المعلمة: تحديد بنية قيمة خاصية القياس:msg->atthandle.
typedef struct __attribute__((__packed__)){
uint8 status_flags;
float dose;
float doserate_search;
uint16 pulses_last2sec;
uint8 battery;
uint8 temperature;
} atomtag_measurement_t;
atomtag_measurement_t measurement_char;
بما أن ترتيب البايت في قيمة خاصية القياس ليس إلا القليل ، فإنه يكفي نسخ كل هذه البايتات في هيكل معبأ:memcpy((uint8 *)&measurement_char, msg->value.data, msg->value.len);
سيتم حساب معدل الجرعة على مدى فترة 6 دقائق. لن نرسل شهادات إلى خادم narodmon.ru أكثر من مرة كل 6 دقائق. بالإضافة إلى معدل الجرعة ، سوف نرسل شحن البطارية وخطأ إحصائي. تتم جميع العمليات الحسابية في رد الاتصال ble_evt_attclient_attribute_value()
في الملف. main.c.
يتم إرسال القراءات إلى المنفذ 8283 narodmon.ru باستخدام بروتوكول tcp. لم يتم التحقق من استجابة الخادم. بروتوكول النص:#00:00:00:00:00:00\n
#R1#10.5#err = 10%, batt = 100%\n
##
يأتي أولاً عنوان MAC الخاص بالجهاز (6 بايت). في المصدر ، يتم إدخال عنوان MAC على سبيل المثال ، لا تنس تغييره! وعلاوة على ذلك، حيث 10.5 - معدل الجرعة في السيد / ساعة، ويخطئ - الخطأ الإحصائيلتجميع كل هذا بمساعدة من دول مجلس التعاون الخليجي:gcc -std=gnu99 -lm main.c cmd_def.c commands.c uart.c web.c -o narodmon-bin
لكي يبدأ البرنامج تلقائيًا بعد تحميل نظام التشغيل ، أضفت الأسطر التالية قبل الخروج 0 إلى الملف rc.local:cd /
./home/pi/narodmon/narodmon-bin /dev/ttyACM0 5c:31:3e:da:e8:9c
5c: 31: 3e: da: e8: 9c - عنوان جهاز Bluetooth ، والذي يمكن العثور عليه إذا قمت بتشغيل هذا البرنامج باستخدام معلمة المسح:./narodmon-bin /dev/ttyACM0 scan
النتائج
بعد يومين من تشغيل الجهاز ، ظهرت أشياء مثيرة للاهتمام على الرسوم البيانية. هنا يمكنك أن ترى كيف تغير معدل الجرعة أثناء تساقط الثلوج. 11 نوفمبر عند الساعة 17: 00 ... 18: 00 ساعة ، توقف المطر المتجمد وبدأ الثلج يتساقط. مع زيادة سمك الغطاء الثلجي ، انخفض متوسط معدل الجرعة. يتم تركيب مقياس الجرعات على ارتفاع 2 متر من الأرض.ويفسر الانخفاض في معدل الجرعة حقيقة أن طبقة الثلج تحمي جزئياً إشعاع غاما الطبيعي على سطح الأرض. أيضا ، تمنع طبقة الثلج وصول غاز الرادون إلى السطح ، ويمكن الكشف عن منتجات ابنته بواسطة جهاز قياس الجرعات التقليدي.الآن يمكننا تقدير سمك الثلج :) في تلك الأيام ، سقط حوالي 8-10 سم من الثلج. يمارس التصوير الجوي في العالم لتقييم سمك الثلج في المناطق التي تقع فيها محطات الطاقة الكهرومائية ، من أجل فهم نوع الفيضانات المتوقعة في الربيع. يتم استخدام مقاييس طيف غاما فقط مع كاشفات التلألؤ بسبب حساسيتها الكبيرة.لوحظت صورة مماثلة على مقاييس الجرعات الأخرى لخدمة المراقبة الشعبية ، على الرغم من أنها لا تقدم جميعها بيانات كثيرًا وليس من الواضح ما هي الخوارزميات لحساب معدل الجرعة المستخدمة هناك.يمكن تعديل البرنامج بإضافة مخزن مؤقت يتم حفظ قراءات قياس الجرعات فيه عندما لا يكون هناك اتصال بالإنترنت. تتيح لك واجهة برمجة تطبيقات مراقبة الأشخاص إرسال قراءات بأثر رجعي. يجدر أيضًا توصيل التوت pi بمصدر طاقة غير منقطع. على الرغم من بساطة التصميم ، كان من الممكن الحصول على وقت تشغيل لمدة ثلاثين يومًا تقريبًا. يمكن الاطلاع على مقياس الجرعات على خريطة المراقبة الوطنية هنا. من فضلك لا ركلة - أنا جديد على لينكس.
المراجع
1. مقياس الجرعات AtomTag2. وثائق SDK و Bluegiga BLED1123. خدمة مراقبة الأشخاص4. بلوتوث LE ، المواصفات5. كود المصدر
لبرنامج Raspberry PI6. مراقبة الأشخاص تطبيق Android للرصد