Peripheral هو جهاز في معمارية Bluetooth Low Energy يقوم بالإعلان عن خدماته من خلال حزم advertising وينتظر اتصالاً من Central. في نظام IoT البيئي، يكون Peripheral عادةً جهازًا ذا استهلاك محدود للطاقة: مجس درجة حرارة، مصباح ذكي، سوارة لياقة بدنية، منارة (Beacon). تحدد Bluetooth Core Specification 5.4 (2023) بروتوكول الإعلان: يرسل Peripheral بشكل دوري حزم advertising تحتوي على اسم الجهاز، قائمة الخدمات، وبيانات مخصصة، بينما يقوم Central بفحص هذه الحزم ويقرر ما إذا كان سيتصل. بعد إنشاء الاتصال، يعمل Peripheral كخادم GATT، موفرًا خدمات وخصائص للقراءة والكتابة.
النقاط الرئيسية
Peripheral هو جهاز BLE يقوم بتنفيذ خادم GATT ويعلن عن قدراته من خلال قنوات advertising. على عكس Central، الذي يبحث بنشاط عن الأجهزة، فإن Peripheral ينتظر بشكل سلبي الاتصالات. هذا نموذج غير متماثل محسن لكفاءة الطاقة للأجهزة التي تعمل بالبطارية.
يمكن أن يكون Peripheral في عدة أوضاع: advertising (إعلان)، connected (متصل بـ Central)، sleeping (سبات مع تعطيل الإعلان). في وضع advertising، يرسل Peripheral بشكل دوري حزم بيانات قصيرة مع استهلاك حد أدنى من الطاقة. بعد الاتصال، يتحول Peripheral إلى وضع connected، حيث يتبادل البيانات مع Central وفقًا لفاصل الاتصال المتفق عليه.
وفقًا لBluetooth Core Specification 5.4 (2023)، يمكن للجهاز التبديل بشكل ديناميكي بين دوري Peripheral و Central، ولكن في أي لحظة معينة، يكون الدور ثابتًا لاتصال واحد. سيناريو نموذجي: مجس IoT يعمل بشكل مستمر كـ Peripheral، بينما يقوم الهاتف الذكي بإدارة الاتصال كـ Central.
من المهم للمطورين فهم: يحدد Peripheral ما هي الخدمات والخصائص المتاحة ويدير الوصول إليها. تحدد بنية خادم GATT على Peripheral ما البيانات التي يمكن لـ Central قراءتها وما الأوامر التي يمكنه كتابتها.
Advertising هو الآلية التي يعلن من خلالها Peripheral عن وجوده. يرسل Peripheral حزم advertising على ثلاثة قنوات مخصصة (37، 38، 39) بفاصل زمني من 20 مس إلى 10.24 ثانية. تحتوي كل حزمة advertising على معلومات ثابتة وقد تتضمن بيانات اختيارية.
هناك نوعان من حزم advertising: advertising PDU (الحزمة الرئيسية) و scan response PDU (استجابة لطلب Central). تحتوي الحزمة الرئيسية على حقول إجبارية: نوع الحزمة، عنوان المرسل، البيانات. إذا أرسل Central طلب مسح، يرد Peripheral بحزمة إضافية تحتوي على معلومات أكثر اكتمالاً — على سبيل المثال، اسم الجهاز الكامل.
تؤثر معلمات advertising على سرعة الاكتشاف واستهلاك الطاقة. Advertising interval هو الوقت بين إرسالات الحزم. كلما كان الفاصل أقصر، كلما اكتشف Central الجهاز بسرعة أكبر، ولكن يستهلك Peripheral طاقة أكثر. الفاصل الموصى به: 100–1000 مس لمعظم الأجهزة.
| المعلمة | النطاق | التأثير | التوصية |
|---|---|---|---|
| Advertising Interval | 20 ms – 10.24 s | سرعة الاكتشاف، الطاقة | 100–1000 مس للتوازن |
| Advertising Channels | 37, 38, 39 | موثوقية الاكتشاف | القنوات الثلاثة مطلوبة |
| Tx Power | -20 – +10 dBm | المدى، التداخل | 0 dBm داخليًا، +4 dBm خارجيًا |
| Advertising Timeout | 0 – 180 ثانية | مدة الإعلان | 0 (لانهائي) للمنارات |
حزمة الإعلان BLE لها حد أقصى قدره 31 بايت لـ advertising PDU و 31 بايت إضافية لـ scan response. داخل الحزمة، يتم تنظيم البيانات بتنسيق AD Structure (Advertising Data Structure): كل حقل له نوع (1 بايت)، طول (1 بايت)، وقيمة.
أنواع AD الأكثر شيوعًا: Flags (0x01) — أوضاع الاتصال والاكتشاف، Local Name (0x08 أو 0x09) — اسم الجهاز، Service UUID List (0x02–0x07) — قائمة أمراز الخدمات، Manufacturer Specific Data (0xFF) — بيانات الشركة المصنعة. يعد تعبئة البيانات بشكل صحيح في حزمة 31 بايت مهمة مهمة لمطوري الأجهزة المضمنة.
بالنسبة للأجهزة التي تحتاج إلى نقل المزيد من البيانات، extended advertising (BLE 5.0+) يزيد حجم حزمة الإعلان إلى 251 بايت ويضيف أنواعًا جديدة من الحزم. يدعم extended advertising أيضًا قنوات PHY المشفرة لزيادة المدى إلى 1 كم في المناطق المفتوحة.
عند تصميم حزمة إعلان، ضع في الاعتبار: كلما زادت البيانات في حزمة advertising، زادت احتمالية التصادم مع الأجهزة الأخرى. للاكتشاف السريع، يوصى بوضع البيانات الحرجة (Service UUID) فقط في advertising PDU، والبيانات الإضافية في scan response.
خادم GATT على Peripheral يحتوي على جميع الخدمات والخصائص التي يمكن لـ Central اكتشافها والتفاعل معها. بعد الاتصال، يكتشف Central الخدمات، ثم الخصائص، ويتفاعل معها من خلال بروتوكول GATT.
Peripheral كخادم GATT يجب أن يعالج بشكل صحيح طلبات Central: طلبات القراءة، طلبات الكتابة، الإشعارات، والتأكيدات. يمر كل طلب عبر جدول GATT، حيث يتوافق كل سمة (خدمة، خاصية، واصف) مع Handle — عنوان 16 بت.
يحدد مطور Peripheral أصلاحيات الوصول لكل سمة: قراءة فقط، كتابة فقط، قراءة وكتابة، بالتشفير أو بدونه. للبيانات الحساسة (المعلومات الشخصية، المؤشرات الطبية)، يوصى بتمكين متطلبات التشفير من خلال MITM Protection.
CBPeripheralManager هو فئة Core Bluetooth لتنفيذ دور Peripheral في iOS. يدير خادم GATT، ينشر الخدمات والخصائص، ويعالج طلبات Centrals. على عكس CBCentralManager، لا يقوم CBPeripheralManager بالمسح — هو يعلن فقط ويدير الاتصالات.
الخطوات الرئيسية لتنفيذ Peripheral على iOS: تهيئة CBPeripheralManager، إضافة الخدمات عبر add، بدء الإعلان عبر startAdvertising، معالجة طلبات Centrals من خلال المفوض CBPeripheralManagerDelegate.
import CoreBluetooth
class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {
private var peripheralManager: CBPeripheralManager!
func startAdvertising() {
let advertisementData: [String: Any] = [
CBAdvertisementDataLocalNameKey: "BLE Sensor",
CBAdvertisementDataServiceUUIDsKey: [
CBUUID("180F")
]
]
peripheralManager.startAdvertising(advertisementData)
}
func peripheralManagerDidUpdateState(
_ peripheral: CBPeripheralManager
) {
if peripheral.state == .poweredOn {
startAdvertising()
}
}
}
يسمح iOS لـ Peripheral بالعمل في الخلفية مع مفتاح bluetooth-peripheral في Background Modes. في الخلفية، يمكن لـ iOS الإعلان بمجموعة محدودة من البيانات وخدمة الاتصالات. للإعلان الممتد (أكثر من 180 ثانية)، استخدم خيار CBAdvertisementDataWaitForResponseFromCentral لتوفير الطاقة.
Android يوفر BluetoothLeAdvertiser للعمل في دور Peripheral (منذ API 21). تسمح واجهة البرمجة ببدء الإعلان بمعلمات قابلة للتكوين: قوة الإرسال، فاصل الإعلان، بيانات الحزمة. يدعم Android أيضًا extended advertising (BLE 5.0) على الأجهزة المتوافقة.
import android.bluetooth.le.*;
private BluetoothLeAdvertiser advertiser;
public void startPeripheral() {
BluetoothAdapter adapter =
BluetoothAdapter.getDefaultAdapter();
advertiser = adapter.getBluetoothLeAdvertiser();
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(
new ParcelUuid(
UUID.fromString("0000180F-0000-1000-8000-00805F9B34FB")
)
)
.build();
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
.build();
advertiser.startAdvertising(
settings, data, advertiseCallback
);
}
في Android، يعتمد دعم Peripheral على الشركة المصنعة ونسخة نظام التشغيل. لا تدعم جميع الأجهزة BluetoothLeAdvertiser — تحقق عبر adapter.isMultipleAdvertisementSupported(). بدءًا من Android 10، يتطلب دور Peripheral إذن BLUETOOTH_ADVERTISE، بالإضافة إلى طلب وقت التشغيل للتطبيقات ذات target SDK 31+.
كفاءة الطاقة هي ميزة رئيسية لـ BLE، ويلعب Peripheral دورًا رئيسيًا في هذا. يمكن للجهاز العمل على بطارية CR2032 (220 ملي أمبير ساعة) لأكثر من عام بفضل استهلاك الطاقة المحسن. يمضي Peripheral معظم الوقت في وضع السبات مع تعطيل الإعلان، مستيقظًا فقط لإرسال حزمة إعلان أو معالجة طلب من Central.
استهلاك الطاقة لـ Peripheral في الأوضاع المختلفة: وضع السبات (نوم عميق) — 1–5 µA، خامل مع تمكين المؤقت — 10–50 µA، advertising — 5–15 ملي أمبير (أثناء إرسال الحزمة)، connected — 5–10 ملي أمبير (أثناء حدث الاتصال). مع فاصل advertising قدره 1000 مس ومدة الحزمة 4 مس، يبلغ متوسط التيار حوالي 50–100 µA.
وفقًا لTexas Instruments Application Report (SWRA478, 2024)، يقوم تحسين فاصل advertising من 100 مس إلى 1000 مس بخفض متوسط استهلاك الطاقة بنسبة 90%. يتم تحقيق توفير إضافي من خلال slave latency (تخطي أحداث الاتصال)، تقليل Tx Power على المسافات القصيرة، وتعطيل الإعلان بعد الاتصال (connectable advertising).
الأسئلة الشائعة
نعم، من خلال آلية الإشعارات/التأكيدات. على الرغم من أن Central هو دائمًا بادئ الاتصال، بعد الاتصال يمكن لـ Peripheral إرسال البيانات عبر إشعارات GATT دون طلب صريح من Central. للقيام بذلك، يجب على Central الاشتراك مسبقًا عبر CCCD.
مدة الإعلان غير محدودة بالمواصفات، ولكن في الممارسة تكون محدودة بطاقة البطارية. في iOS، يمكن لـ Peripheral الإعلان في الخلفية لمدة لا تتجاوز 180 ثانية لكل جلسة دون إعدادات إضافية. في Android، يمكن للإعلان العمل لفترة غير محدودة، ولكنه يقلل عمر البطارية بشكل كبير.
زد من فاصل advertising (موصى به 500–1000 مس)، استخدم slave latency لتخطي أحداث الاتصال، عطل الإعلان بعد الاتصال واختر أدنى Tx Power كافية لاتصال مستقر على المسافة المطلوبة.
Non-connectable advertising هو وضع حيث يعلن Peripheral ولكنه لا يقبل طلبات الاتصال. يستخدم للمنارات التي تنقل البيانات فقط (على سبيل المثال، معرف المتجر) دون إنشاء اتصال ثنائي الاتجاه. يوفر الطاقة مقارنة بـ connectable advertising.
يمكن ضمان 31 بايت: flags (3 بايتات)، اسم الجهاز (حتى 28 بايتًا بشكل مختصر)، قائمة أمراز الخدمات (2–16 بايتًا لكل UUID)، بيانات الشركة المصنعة (حتى 26 بايتًا). الاستراتيجية المثلى هي وضع أمراز الخدمات في advertising PDU للتصفية، والاسم الكامل في scan response.
الملخص
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.