I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

دليلك الشامل لربط تطبيقات فلاتر (Flutter) بأجهزة إنترنت الأشياء (IoT) عن طريق البلوتوث منخفض الطاقة (BLE)

معرفات الأقسام: 3 دليلك الشامل لربط تطبيقات فلاتر (Flutter) بأجهزة إنترنت الأشياء (IoT) عن طريق البلوتوث منخفض الطاقة (BLE) أهلاً بيك يا بشمهندس في عالم الهاردو

دليلك الشامل لربط تطبيقات فلاتر (Flutter) بأجهزة إنترنت الأشياء (IoT) عن طريق البلوتوث منخفض الطاقة (BLE)
Reading Count: 4

معرفات الأقسام: 3

دليلك الشامل لربط تطبيقات فلاتر (Flutter) بأجهزة إنترنت الأشياء (IoT) عن طريق البلوتوث منخفض الطاقة (BLE)

أهلاً بيك يا بشمهندس في عالم الهاردوير والـ IoT! لو بتكتب تطبيق فلاتر وجايلك عميل أو عندك فكرة برودكت بتطلب إن الموبايل يتكلم مع جهاز هاردوير زي ساعة أذكار، جهاز طبي، أو حتى لمبة ذكية، غالباً أول حاجة بتفكر فيها هي: "يا ترى هربط الموبايل بالجهاز ده إزاي؟".

الموضوع في الأول ممكن يحسسك برهبة، خصوصاً لما تدخل في تفاصيل البلوتوث والـ Bytes والـ Characteristics، وتحس إنك تايه بين الموبايل والهاردوير. بس متقلقش، في المقال ده هناخد بايدك خطوة بخطوة ونسهل الدنيا، ونعرف إزاي نبحث عن الأجهزة، نتصل بيها، ونستقبل البيانات بكل سهولة باستخدام فلاتر (Flutter).

يعني ايه بلوتوث منخفض الطاقة (Bluetooth Low Energy - BLE) وليه بنستخدمه؟

الـ BLE هو نسخة موفرة جداً للطاقة من البلوتوث العادي (Classic Bluetooth). الأجهزة الذكية زي أجهزة إنترنت الأشياء (IoT Devices) بتشتغل ببطاريات صغيرة، وعشان البطارية دي تعيش شهور أو سنين، مينفعش نستخدم البلوتوث العادي لأنه بياكل السحب. هنا بيجي دور الـ BLE.

في عالم الـ BLE، عندنا مصطلحات أساسية لازم نكون فاهمينها كويس:

  • الـ Central: وده غالباً بيبقى الموبايل بتاعك (تطبيق الفلاتر) اللي بيطلب البيانات ويبحث عن الأجهزة.
  • الـ Peripheral: وده جهاز الهاردوير (زي المستشعر أو الإسكوتر) اللي بيذيع (Broadcast) بياناته.
  • الـ Services & Characteristics: الخدمات والخصائص. تخيل إن جهاز الهاردوير ده عبارة عن شركة، والـ Service هي القسم (قسم الحرارة مثلاً)، والـ Characteristic هو الموظف جوه القسم اللي بيديك الرقم الفعلي للحرارة.

تجهيز المشروع وإضافة الحزم المطلوبة (Dependencies)

أول خطوة عملية هي إننا نظبط ملف pubspec.yaml ونضيف الحزمة الأشهر والأقوى للتعامل مع البلوتوث في فلاتر وهي flutter_blue_plus. الحزمة دي بتسهل عليك البحث والاتصال وقراءة البيانات بشكل كبير جداً.

افتح ملف pubspec.yaml عندك في المشروع، واكتب السطر ده تحت الـ dependencies:


dependencies:
  flutter:
    sdk: flutter
  flutter_blue_plus: ^1.31.6

طبعاً متنساش تضبط صلاحيات البلوتوث (Bluetooth Permissions) في ملفات الأندرويد AndroidManifest.xml وملف الآيفون Info.plist، لأن الموبايل مش هيسمح للتطبيق يبحث عن أجهزة قريبة غير لما المستخدم يوافق على الصلاحيات دي.

الخطوة الأولى: البحث عن الأجهزة القريبة (Scanning for Devices)

عشان تبحث عن أجهزة الهاردوير اللي حواليك، محتاج تشغل الـ Scanner وتستمع للنتائج اللي بتطلع. العملية دي بتبحث عن الأجهزة اللي بتعمل Broadcast لإشارات البلوتوث في نطاق المترات القريبة.

تعال نشوف مثال كود بسيط بيوضح إزاي نبدأ عملية البحث (Scan):


import 'package:flutter_blue_plus/flutter_blue_plus.dart';

void startScanning() async {
  // التأكد من إن البلوتوث شغال على الموبايل
  if (await FlutterBluePlus.isSupported == false) {
    print("البلوتوث غير مدعوم على الجهاز ده");
    return;
  }

  // بدء البحث عن الأجهزة لمدة 4 ثواني
  FlutterBluePlus.startScan(timeout: const Duration(seconds: 4));

  // الاستماع للأجهزة اللي تم اكتشافها
  FlutterBluePlus.scanResults.listen((results) {
    for (ScanResult r in results) {
      print('لقينا جهاز اسمو: ${r.device.platformName} وجهاز ID: ${r.device.remoteId}');
    }
  });
}

الخطوة الثانية: الاتصال بالجهاز المستهدف (Connecting to a Bluetooth Device)

بعد ما المستخدم يضغط على اسم الجهاز بتاعه من القائمة اللي ظهرت في التطبيق، الخطوة اللي بعدها هي إننا نعمل اتصال (Connection) بالجهاز ده. الاتصال بيتم باستخدام الـ BluetoothDevice اللي جبناه من نتائج البحث.

الكود ده بيوضح إزاي نتصل بجهاز معين:


Future<void> connectToDevice(BluetoothDevice device) async {
  try {
    // الاتصال بالجهاز
    await device.connect();
    print("تم الاتصال بنجاح بـ ${device.platformName}");
    
    // بعد الاتصال، بنبدأ ندور على الخدمات (Services) المتاحة جوه الجهاز
    discoverServices(device);
    
  } catch (e) {
    print("حصل خطأ أثناء الاتصال: $e");
  }
}

الخطوة الثالثة: استقبال البيانات وقراءة الإشارات (Discovering Services & Reading Data)

دي أحلى وأهم خطوة، بعد ما عملنا اتصال، لازم نسأل الجهاز عن الخدمات والخصائص اللي عنده عشان نقدر نقرا منها البيانات أو نكتب عليها (مثلاً نبعت أمر يفتح الموتور).

شوف معايا إزاي بنعمل Discover للـ Services وندور على Characteristic معينة:


void discoverServices(BluetoothDevice device) async {
  List<BluetoothService> services = await device.discoverServices();
  
  for (BluetoothService service in services) {
    for (BluetoothCharacteristic characteristic in service.characteristics) {
      
      // لو الـ Characteristic دي بتدعم القراءة (Read)
      if (characteristic.properties.read) {
        List<int> value = await characteristic.read();
        print("قيمة البيانات المستقبلة: $value");
      }
      
      // لو محتاجين نسمع التغييرات لحظياً (Notifications)
      if (characteristic.properties.notify) {
        await characteristic.setNotifyValue(true);
        characteristic.lastValueStream.listen((value) {
          print("بيانات جديدة وصلت من الهاردوير: $value");
        });
      }
      
    }
  }
}

نصيحة من أخ (Conclusion)

مجال ربط الموبايل بالهاردوير والـ IoT هو واحد من أمتع مجالات البرمجة، لأنه بيخليك تحس إن الكود بتاعك بيتحكم في حاجات ملموسة في الواقع الحقيقي. نصيحتي ليك وأنت شغال في الموضوع ده: "طول بالك على الديباجنج (Debugging)". في العادة، المشاكل مش بتكون في كود الفلاتر، المشاكل بتكون يا إما في صلاحيات الموبايل، أو إن جهاز الهاردوير نفسه محتاج إعادة تشغيل أو الـ UUIDs مش متطابقة.

افهم كويس البروتوكول اللي ماشي بيه الهاردوير (Device Protocol) واتفق مع مهندس الهاردوير على شكل الـ Bytes اللي متبادلة، وصدقني بعدها الدنيا هتكون سموذ وبسيطة جداً. بالتوفيق يا بشمهندس، ومستني تشوف تطبيقاتك الذكية بتملى السوق!


Share

Related posts

Aug 02, 2026 • 2 min read
Reading Count: 2
عنوان تلقائي

يا هلا بيك يا صاحبي في عالم البرمجة! لو إنت مطور فلاتر (Flutter Developer) وبتشتغل باستمتاع عشان تبن...

Aug 02, 2026 • 2 min read
Reading Count: 3
ازاي تبني موقع سريع جداً بربط نظام إدارة محتوى مرن Headless CMS مع إطار عمل فيو دجى إس (Vue.js)

ازاي تبني موقع سريع جداً بربط نظام إدارة محتوى مرن Headless CMS مع إطار عمل فيو دجى إس (Vue.js) أهلا...

Aug 01, 2026 • 2 min read
Reading Count: 5
ازاي تبني نظام Authentication متكامل واحترافي في نكست جي إس (Nuxt 3) باستخدام NuxtAuth

ازاي تبني نظام Authentication متكامل واحترافي في نكست جي إس (Nuxt 3) باستخدام NuxtAuth أهلاً بيك يا...