آموزش جامع BLE

GATT در BLE: طراحی Service، Characteristic، Descriptor و Notify

ساختار GATT را از Service تا Characteristic و Descriptor یاد بگیرید و تفاوت Read، Write، Notify و Indicate را در یک سنسور واقعی ببینید.

فهرست مطالب
عکس واقعی برد mKIT مبتنی بر nRF51822؛ نمونهٔ قدیمی سخت‌افزار BLE، نه nRF52840 یا Sniffer معرفی‌شده در متن.
عکس واقعی برد mKIT مبتنی بر nRF51822؛ نمونهٔ قدیمی سخت‌افزار BLE، نه nRF52840 یا Sniffer معرفی‌شده در متن. عکس: Ordercrazy؛ منبع Wikimedia Commons؛ CC0. محتوای عکس تغییر نکرده است؛ نسخهٔ نمایشی ویکی‌مدیا استفاده شده است. این عکس مستند اجرای آزمایش LCENJ نیست.
مرحله 9 از ۲۰ مسیر تسلط بر BLE

GATT داده محصول را به ساختاری قابل کشف تبدیل می‌کند. به‌جای ارسال بایت‌های بی‌نام، مشخص می‌کنیم این سرویس محیطی است، این Characteristic دماست و این Descriptor روش فعال‌کردن اعلان را کنترل می‌کند.

Service و Characteristic

Service مجموعه‌ای منطقی از قابلیت‌های مرتبط است و می‌تواند Primary یا Secondary باشد. Characteristic شامل Declaration، Value و احتمالاً Descriptorهاست. Properties می‌گوید چه عملیاتی مجاز است؛ Permission تعیین می‌کند چه سطح دسترسی یا امنیتی لازم است.

Descriptor و CCCD

Descriptor اطلاعات تکمیلی Characteristic را نگه می‌دارد. CCCD با UUID استاندارد 0x2902 به کلاینت اجازه می‌دهد Notify یا Indicate را روشن کند. فقط داشتن Property کافی نیست؛ کلاینت باید CCCD را بنویسد و سرور وضعیت آن را برای هر اتصال نگه دارد.

Read، Write و Write Without Response

Read برای داده‌ای مناسب است که کلاینت هر زمان خواست دریافت کند. Write Request تأیید پروتکلی دارد. Write Without Response برای جریان سریع فرمان‌ها مفید است اما برنامه باید ازدحام بافر و از دست‌رفتن احتمالی را مدیریت کند. برای تنظیم مهم، پاسخ یا تأیید کاربردی طراحی کنید.

Notify در برابر Indicate

Notify پاسخ ATT ندارد و سریع‌تر است، اما تحویل در سطح ATT تضمین نمی‌شود. Indicate تا دریافت Confirmation اجازه ارسال Indication بعدی را نمی‌دهد و مطمئن‌تر ولی کندتر است. وضعیت لحظه‌ای سنسور معمولاً Notify و رخداد حیاتی یا تغییر تنظیمات می‌تواند Indicate باشد.

مدل GATT دماسنج

یک Environmental Service بسازید و دو Characteristic برای دما و رطوبت قرار دهید. هر دو Read و Notify داشته باشند. داده را با واحد ثابت مثلاً صدم درجه در int16 بفرستید و قرارداد Endianness را مستند کنید. Characteristic سوم را برای Interval نمونه‌برداری با Read و Write در نظر بگیرید.

قرارداد دما و CCCD با مقدار دقیق

اگر از سرویس استاندارد Environmental Sensing با UUID=0x181A استفاده می‌کنید، مشخصات Characteristicهای استاندارد را هم رعایت کنید: Temperature با UUID=0x2A6E یک مقدار int16 با واحد ۰٫۰۱ درجه سلسیوس است؛ Humidity با UUID=0x2A6F مقدار uint16 با واحد ۰٫۰۱ درصد رطوبت دارد. برای قالب اختصاصی، UUID اختصاصی و مستندات خودتان را به کار ببرید.

Temperature 25.00 C: C4 09
CCCD enable notify: 01 00
CCCD enable indicate: 02 00
CCCD disable: 00 00

0x2902، UUID نوع Descriptor است، نه Handleی که باید همیشه به آن بنویسید. Handle واقعی CCCD را Discover کنید. دریافت Indication Confirmation تأیید سطح ATT است و به معنی اجرای فیزیکی فرمان یا صحت اندازه‌گیری سنسور نیست؛ برای فرمان مهم پاسخ کاربردی و وضعیت واقعی لازم است.

شناسه‌های تخصیص‌یافته رسمی Bluetooth SIG

پرسش و پاسخ مقاله

سوال فنی خود را مطرح کنید

پرسش‌ها و پاسخ‌ها پس از بررسی مدیر منتشر می‌شوند. نویسنده، پیش‌نویس در انتظار بررسی را می‌بیند.

هنوز پرسش تاییدشده‌ای برای این مقاله ثبت نشده است.