آموزش جامع BLE

BLE در ESP32: انتخاب NimBLE، ساخت Peripheral و Central و ارسال Notify

پشته NimBLE و Bluedroid را مقایسه کنید و در ESP32 اسکن، اتصال، GATT Server، Read، Write، Notify و مدیریت توان را پیاده کنید.

فهرست مطالب
عکس واقعی برد ESP32 دارای ماژول ESP-WROOM-32؛ نمونهٔ سخت‌افزار سازگار با BLE.
عکس واقعی برد ESP32 دارای ماژول ESP-WROOM-32؛ نمونهٔ سخت‌افزار سازگار با BLE. عکس: Ubahnverleih؛ منبع Wikimedia Commons؛ CC0. محتوای عکس تغییر نکرده است؛ نسخهٔ نمایشی ویکی‌مدیا استفاده شده است. این عکس مستند اجرای آزمایش LCENJ نیست.
مرحله 12 از ۲۰ مسیر تسلط بر BLE

خانواده ESP32 راه سریعی برای تبدیل مفاهیم BLE به پروژه واقعی است. ESP-IDF بسته به مدل تراشه و نسخهٔ SDK، پشته‌های Bluedroid و NimBLE را ارائه می‌دهد. روی ESP32 کلاسیک، Bluedroid از Classic و LE پشتیبانی می‌کند؛ NimBLE مخصوص LE است. انتخاب را بر اساس قابلیت و حافظه انجام دهید.

Bluedroid یا NimBLE؟

روی تراشهٔ دوحالتهٔ ESP32 کلاسیک، برای Bluetooth Classic و LE می‌توان Bluedroid را بررسی کرد؛ انتخاب پشته قابلیت سخت‌افزاری جدیدی به S2، S3 یا C3 اضافه نمی‌کند. برای محصول فقط BLE، NimBLE معمولاً RAM و Flash کمتری می‌خواهد و API مشخصی برای GAP و GATT دارد. پیش از کپی مثال قدیمی، نسخه ESP-IDF و مستند همان نسخه را بررسی کنید.

ساخت Peripheral

کنترلر و Host را راه‌اندازی کنید، GAP callback یا event handler را ثبت کنید، Service و Characteristic بسازید و Advertising را پس از آماده‌شدن GATT شروع کنید. رخداد اتصال، قطع، تغییر MTU و نوشتن CCCD را ثبت کنید. بعد از قطع، Advertising را طبق سیاست محصول دوباره آغاز کنید.

ساخت Central

Central اسکن را با فیلتر UUID یا Manufacturer Data محدود می‌کند، دستگاه را متصل می‌کند، سرویس و Characteristic را Discover می‌کند و در صورت نیاز CCCD را می‌نویسد. آدرس تصادفی و تغییر آدرس باعث می‌شود تکیه بر رشته آدرس برای شناسایی محصول همیشه درست نباشد.

Notify و چند اتصال

قبل از Notify بررسی کنید کلاینت آن را فعال کرده و اتصال هنوز معتبر است. برای چند اتصال، وضعیت CCCD، Handle اتصال، MTU و صف ارسال را جدا نگه دارید. در محصول باتری‌خور، Advertising Interval، Connection Parameter، Light Sleep و زمان نمونه‌برداری را با هم تنظیم و اندازه‌گیری کنید.

منطق ساده دماسنج ESP32-C3

هر یک ثانیه SHT31 را بخوانید، دما را به int16 با مقیاس صدم درجه تبدیل کنید و فقط اگر مقدار تغییر معنادار داشت Notify بفرستید. Characteristic تنظیم Interval را Writeable کنید و مقدار را در NVS ذخیره کنید. خطاهای I2C و قطع اتصال نباید حلقه اصلی را متوقف کنند.

قبل از انتخاب پشته، مدل دقیق ESP32 را مشخص کنید

خانوادهمرز مهم این آموزش
ESP32 کلاسیکBluetooth Classic و LE دارد؛ قابلیت‌های LE جدید را از نام خانواده نتیجه نگیرید.
ESP32-S2رادیوی Bluetooth داخلی ندارد؛ مثال BLE مستقیم روی آن قابل اجرا نیست.
ESP32-S3 و ESP32-C3Bluetooth LE دارند؛ Classic به آن‌ها تعمیم داده نمی‌شود.

انتخاب Bluedroid، قابلیت سخت‌افزاری Classic را به تراشه فاقد آن اضافه نمی‌کند. نسخه SDK، Host، Controller و گزینه‌های build باید با Target یکسان باشند. برای شروع، نمونه رسمی bleprph یا blecent همان نسخه ESP-IDF را از مخزن سازنده بردارید و سپس سرویس خود را اضافه کنید.

در Write تنظیم فاصله نمونه‌برداری، ابتدا طول و محدوده ورودی را کنترل کنید؛ روی اتصال قطع‌شده Notify نفرستید و اشتراک CCCD را برای هر اتصال نگه دارید. نوشتن NVS در هر نمونه سنسور لازم نیست؛ تنظیمات را هنگام تغییر معتبر ذخیره کنید.

نمونه‌های رسمی NimBLE؛ هنگام استفاده commit یا نسخه SDK را ثابت کنید

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

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

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

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