কম্পিউটার টিউটোরিয়াল

Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

এই পোস্ট মূলত www.jaredwolff.com-এ থেকে

আমি হার মানেছিলাম।

পুরো রাত ব্লুটুথ লো এনার্জি প্রজেক্ট চলে আনার চেষ্টা করলাম। এটি কষ্টদায়ক। এটি হাসপাতাল। আমি হার মানতে তৎপর ছিলাম।

এটি ব্লুটুথ লো এনার্জির আদিম দিনের কথা। সেখান থেকে এখন অনেক সহজ হয়ে গেছে। Particle Mesh Bluetooth Library ব্যতিক্রম নয়।

এই ওয়াকথ্রুতে আমি দেখাব কিভাবে Particle-এর ব্লুটুথ API ব্যবহার করতে হয়। আমরা কিছু LED কনফিগার করব এবং মেশ নেটওয়ার্কের সব ডিভাইসে তাদের পরিবর্তন দেখব। Argon এবং Xenon বোর্ড ব্যবহার করব।

তैयার? চলুন শুরু করি!

P.S. এই পোস্ট বড়। সুন্দর ফরম্যাটেড PDF ডাউনলোড করতে এখানে ক্লিক করুন।

স্টেজ ১: ব্লুটুথ সেটআপ

  1. Particle Workbench ডাউনলোড/ইনস্টল করুন

  2. একটি নতুন প্রজেক্ট তৈরি করুন। উপযুক্ত লোকেশন বেছে নিয়ে নাম দিলাম ble_mesh

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  3. আপনার /src/ ডিরেক্টরিতে যান এবং <your project name>.ino ফাইল খুলুন

  4. তারপর ডিভাইস OS ভার্সন 1.3.0-র চেয়ে বড় হয়েছে কিনা নিশ্চিত করুন

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

কোড লিখুন

আমরা ৩টি ক্যারেকтеристиক সহ একটি সার্ভিস সেটআপ করব। ক্যারেকтеристиকগুলো RGB LED-এর ইন্টেনসিটি সংক্রান্ত। ব্লুটুথ সেটআপ করার পদ্ধতি:

  1. Setup() ফাংশনে আপনার LED-এর অ্যাপ কন্ট্রোল এনাবল করুন

    RGB.control(true);
  2. .ino ফাইলের শীর্ষে UUID-গুলো সেটআপ করুন

    const char* serviceUuid = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E";
    const char* red = "6E400002-B5A3-F393-E0A9-E50E24DCCA9E";
    const char* green = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E";
    const char* blue = "6E400004-B5A3-F393-E0A9-E50E24DCCA9E";

    UUID হলো ইউনিক আইডেন্টিফায়ার বা অ্যাড্রেস। এগুলো ডিভাইসে বিভিন্ন সার্ভিস এবং ক্যারেকтеристиক ডিফারেনশিয়েট করতে ব্যবহৃত হয়।

    উপরের UUID-গুলো পুরনো Particle উদাহরণগুলোতে ব্যবহৃত হয়েছে। নিজের UUID চাইলে OSX কমান্ড লাইনে uuidgen ব্যবহার করুন। অথবা Online GUID Generator এর মতো ওয়েবসাইটে যান।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    উপরের সেটিংস ব্যবহার করে নিজের UUID বানান। জেনারেটেড UUID থেকে সার্ভিস এবং ক্যারেকтеристиক UUID বানান:

    const char* serviceUuid = "b425040**0**-fb4b-4746-b2b0-93f0e61122c6"; //service
    const char* red = "b4250401-fb4b-4746-b2b0-93f0e61122c6"; //red char
    const char* green = "b4250402-fb4b-4746-b2b0-93f0e61122c6"; //green char
    const char* blue = "b4250403-fb4b-4746-b2b0-93f0e61122c6"; //blue char

    এটি করার সঠিক বা ভুল পদ্ধতি নেই। কিন্তু ব্লুটুথ SIG দ্বারা রিজার্ভড UUID ব্যবহার না করায় সাবধান থাকুন। ডাবল চেক করতে চাইলে এখানে এবং এখানে যান।

    ফিলহাল প্রথম সেট UUID ব্যবহার করব।

  3. Setup()-এ আপনার সার্ভিস ইনিশিয়ালাইজ করুন

    // Set the RGB BLE service
    BleUuid rgbService(serviceUuid);

    এটি আপনার সার্ভিস "রেজিস্টার" করার প্রথম ধাপ। নিচে আরো।

  4. Setup()-এ প্রতিটি ক্যারেকтеристиক ইনিশিয়ালাইজ করুন

    BleCharacteristic redCharacteristic("red", BleCharacteristicProperty::WRITE_WO_RSP, red, serviceUuid, onDataReceived, (void*)red);
    BleCharacteristic greenCharacteristic("green", BleCharacteristicProperty::WRITE_WO_RSP, green, serviceUuid, onDataReceived, (void*)green);
    BleCharacteristic blueCharacteristic("blue", BleCharacteristicProperty::WRITE_WO_RSP, blue, serviceUuid, onDataReceived, (void*)blue);

    এই সেটআপে WRITE_WO_RSP প্রপার্টি ব্যবহার করছি। এতে আমরা ডেটা লিখতে পারি এবং কোনো রেসপন্স এক্সপেক্ট করি না।
    UUID-গুলো রেফারেন্স করা হয়েছে পরের দুটি প্যারামিটারে। প্রথমটি ক্যারেকтеристиক UUID। দ্বিতীয়টি সার্ভিস UUID।

    পরবর্তী প্যারামিটার হলো কলব্যাক ফাংশন। এই ক্যারেকтеристиকে ডেটা লিখলে এই ফাংশন ফায়ার হবে।

    শেষ প্যারামিটার হলো কনটেক্সট। এর মানে কী? আমরা তিনটি ক্যারেকтеристиকেই একই কলব্যাক ব্যবহার করছি। deviceOS-এ কনটেক্সট সেট না করলে কোন ক্যারেকтеристиকে লেখা হয়েছে সেটা জানার উপায় নেই। এই কেসে আমরা ইতিমধ্যে উপলব্ধ UUID-গুলো ব্যবহার করব।

  5. ক্যারেকтеристиক ডিফাইন করার hemen পর, সেগুলো যোগ করুন যাতে সেগুলো দেখা যায়:

    // Add the characteristics
    BLE.addCharacteristic(redCharacteristic);
    BLE.addCharacteristic(greenCharacteristic);
    BLE.addCharacteristic(blueCharacteristic);
  6. কলব্যাক ফাংশন সেটআপ করুন।

    // Static function for handling Bluetooth Low Energy callbacks
    static void onDataReceived(const uint8_t* data, size_t len, const BlePeerDevice& peer, void* context) {
    }

    এটি ফাইলের শীর্ষে ( Setup()-এর উপরে) করতে পারেন। পরে এটি ডিফাইন করব।

  7. শেষে, ডিভাইসকে কানেক্টেবল बनाने জন্য অ্যাডভার্টাইজিং সেটআপ করতে হবে। Setup() ফাংশনের শেষে এই কোড রাখুন

    // Advertising data
    BleAdvertisingData advData;
    // Add the RGB LED service
    advData.appendServiceUUID(rgbService);
    // Start advertising!
    BLE.advertise(&advData);

    প্রথমে একটি BleAdvertisingData অবজেক্ট তৈরি করুন। ধাপ ৩ থেকে rgbService যোগ করুন। শেষে অ্যাডভার্টাইজিং শুরু করুন যাতে সার্ভিস এবং ক্যারেকтеристиকগুলো ডিসকভারেবল হয়!

টেস্ট করার সময়

এই সময় আমাদের একটি মিনিমাম ভায়েবল প্রোগ্রাম রেডি। কম্পাইল করে Particle হার্ডওয়্যারে প্রোগ্রাম করুন। এটি যেকোনো Mesh-এনাবলড ডিভাইসের সাথে কাজ করবে। (Xenon, Argon, Boron)

  1. টেস্ট করার আগে, ফাইলের শীর্ষে অস্থায়ীভাবে SYSTEM_MODE(MANUAL); যোগ করুন। এতে ডিভাইস মেশ নেটওয়ার্কে কানেক্ট হবে না। স্টার্টআপে যদি ব্লু ব্লিংক করে, তবে Particle App দিয়ে সেটআপ করে এগিয়ে যান।

  2. 1.3.0-rc.1 ইমেজ ডাউনলোড করুন। Xenon-এর জন্য xenon-system-part1@1.3.0-rc.1.bin। অন্যদের জন্য boron-system-part1@1.3.0-rc.1.bin এবং argon-system-part1@1.3.0-rc.1.bin খুঁজুন। ফাইলগুলো পেজের নিচে Assets-এর অধীনে আছে

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  3. ডিভাইসকে DFU মোডে নিয়ে আনুন। Mode Button ধরে রাখুন এবং মুহূর্তের জন্য Reset Button ক্লিক করুন। Mode Button ধরে রাখুন যতক্ষণ না LED ইয়েলো ব্লিংক করছে।

  4. কমান্ড লাইনে যেন ফাইলটি স্টোর করা ডিরেক্টরিতে চেঞ্জ ডিরেক্টরি করুন। আমার কেসে cd ~/Downloads/

  5. তারপর রান করুন:

    particle flash --usb xenon-system-part1@1.3.0-rc.1.bin

    এটি লেটেস্ট OS Xenon-এ ইনস্টল করবে। একবার হলে এটি দ্রুত ইয়েলো ব্লিংক করতে থাকবে। অন্য Particle Mesh ডিভাইস থাকলে ফাইলনেম চেঞ্জ করুন।

  6. Visual Code-এ Command + Shift + P চাপে কমান্ড মেনু খুলুন। Particle: Compile application (local) সিলেক্ট করুন

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  7. যেকোনো এরর ফিক্স করুন।

  8. তারপর সেই মেনু থেকে Flash application (local) সিলেক্ট করুন

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  9. প্রোগ্রামিং কমপ্লিট হলে, ফোন বের করুন। পছন্দের ব্লুটুথ লো এনার্জি অ্যাপ খুলুন। সেরা গুলো NRF Connect এবং Light Blue Explorer। এই উদাহরণে Light Blue Explorer ব্যবহার করব।

  10. চেক করুন "Xenon-<id>" নামে ডিভাইস অ্যাডভার্টাইজ করছে কিনা। আপনার ডিভাইসের ইউনিক ID দিয়ে <id> রিপ্লেস করুন।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  11. আপনার ডিভাইস খুঁজে বের করে নামটিতে ক্লিক করুন।

  12. সার্ভিস ও ক্যারেকтеристиক UUID-র লিস্ট দেখুন। আমরা যা সেট করলাম সেগুলো আছে কিনা? উদাহরণস্বরূপ, সার্ভিস UUID 6E400001-B5A3-F393-E0A9-E50E24DCCA9E দেখাচ্ছে কিনা?

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    সব কিছু আশা অনুযায়ী হলে, আপনি ভালো পজিশনে আছেন। না হলে আগের ইন্সট্রাকশনগুলো রিভিউ করুন।

স্টেজ ২: ডেটা হ্যান্ডলিং

প্রজেক্টের পরবর্তী স্টেজ হলো রাইট ইভেন্ট প্রসেস করা। onDataReceived ফাংশন আপডেট করব।

কোড লিখুন

  1. প্রথমে একটি স্ট্রাক্ট বানান যা LED-এর স্টেট রাখবে। ফাইলের শীর্ষে করা যাবে।

    // Variables for keeping state
    typedef struct {
      uint8_t red;
      uint8_t green;
      uint8_t blue;
    } led_level_t;
  2. সেকেন্ড হাফ: এই ডেটা টাইপ ব্যবহার করে একটি স্ট্যাটিক ভেরিয়েবল তৈরি করুন

    // Static level tracking
    static led_level_t m_led_level;

    প্রথম দুটি ধাপ আমাদের একটি সিঙ্গল ভেরিয়েবল দিয়ে RGB LED-এর তিনটি ভ্যালু রিপ্রেজেন্ট করতে দেয়।

  3. পরবর্তী, onDataReceive ফাংশনে বেসিক এরর চেক করুন। উদাহরণস্বরূপ শুধু এক বাইট রিসিভ হচ্ছে কিনা নিশ্চিত করুন।

    // We're only looking for one byte
    if( len != 1 ) {
      return;
    }
  4. পরবর্তী, এই ইভেন্ট কোন ক্যারেকтеристиক থেকে এসেছে সেটা বের করুন। context ভেরিয়েবল ব্যবহার করুন।

    // Sets the global level
    if( context == red ) {
      m_led_level.red = data[0];
    } else if ( context == green ) {
      m_led_level.green = data[0];
    } else if ( context == blue ) {
      m_led_level.blue = data[0];
    }

    মনে রাখবেন, এই কেসে context হবে red, green, বা blue UUID স্ট্রিংয়ার পয়েন্টার। আমরা m_led_level সেট করছি যাতে একটা ভ্যালু চেঞ্জ হলেও RGB LED আপডেট করা যায়।

  5. শেষে, সেট হলে RGB অবজেক্টে লিখুন

    // Set RGB color
    RGB.color(m_led_level.red, m_led_level.green, m_led_level.blue);

কোড টেস্ট করুন

আগের মতো প্রসিডিউর ফলো করে ডিভাইস ফ্ল্যাশ করুন।

  1. ডিভাইসকে DFU মোডে নিয়ে আনুন। Mode Button ধরে Reset Button ক্লিক করুন। Mode Button ধরে রাখুন যতক্ষণ না LED ইয়েলো ব্লিংক করছে।

  2. তারপর সেই মেনু থেকে Flash application (local) সিলেক্ট করুন

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  3. প্রোগ্রামিং কমপ্লিট হলে, Light Blue Explorer ব্যবহার করে ডিভাইস কানেক্ট করুন।

  4. রেড LED-র জন্য অ্যাপ্লিকেবল ক্যারেকтеристиকে ট্যাপ করুন।

  5. Write FF। রেড LED অন হওয়া উচিত।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  6. Write 00। রেড LED অফ হওয়া উচিত।

  7. অন্য দুটি ক্যারেকтеристиকেও একই করুন। এখন ব্লুটুথ লো এনার্জির মাধ্যমে RGB LED-র পূর্ণ কন্ট্রোল আছে!

স্টেজ ৩: মেশের মাধ্যমে শেয়ারিং

শেষে, আমরা সফলভাবে BLE মেসেজ রিসিভ করছি, এখন সেগুলো মেশ নেটওয়ার্কে ফরওয়ার্ড করার সময়।

কোড লিখুন

  1. MANUAL মোড রিমুভ করুন। SYSTEM_MODE(MANUAL); কমেন্ট আউট করুন।

  2. ফাইলের শীর্ষে একটি ভেরিয়েবল যোগ করুন পাবলিশ করার সময় ট্র্যাক করার জন্য

    // Tracks when to publish to Mesh
    static bool m_publish;
  3. Setup()-এ ইনিশিয়ালাইজ করুন

    // Set to false at first
    m_publish = false;
  4. onDataReceived কলব্যাকে RGB LED সেট করার পর, এটি true সেট করুন:

    // Set RGB color
    RGB.color(m_led_level.red, m_led_level.green, m_led_level.blue);
    // Set to publish
    m_publish = true;
  5. loop() ফাংশনে একটি কন্ডিশনাল যোগ করুন। এতে LED স্ট্যাটাস মেশ নেটওয়ার্কে পাবলিশ হবে:

    if( m_publish ) {
      // Reset flag
      m_publish = false;
      // Publish to Mesh
      Mesh.publish("red", String::format("%d", m_led_level.red));
      Mesh.publish("green", String::format("%d", m_led_level.green));
      Mesh.publish("blue", String::format("%d", m_led_level.blue));
    }

    Mesh.publish দুটি ইনপুটের জন্যও স্ট্রিং চায়। তাই String::format ব্যবহার করে রেড, গ্রিন, ব্লু ভ্যালু দিয়ে স্ট্রিং বানাচ্ছি।

  6. Setup()-এ একই ভেরিয়েবলগুলো সাবস্ক্রাইব করুন। এভাবে অন্য ডিভাইসও এই ডিভাইসের LED আপডেট করতে পারবে।

    Mesh.subscribe("red", meshHandler);
    Mesh.subscribe("green", meshHandler);
    Mesh.subscribe("blue", meshHandler);
  7. ফাইলের শীর্ষে meshHandler তৈরি করুন

    // Mesh event handler
    static void meshHandler(const char *event, const char *data) {
    }
  8. এই অ্যাপ্লিকেশনে event প্যারামিটার এবং data প্যারামিটার দরকার। সেগুলো ব্যবহার করতে String টাইপে কনভার্ট করতে হবে। বিল্ট-ইন কনভার্সন এবং কম্পেরিজন ফাংশন ব্যবহার করার জন্য। meshHandler ফাংশনে যোগ করুন:

    // Convert to String for useful conversion and comparison functions
    String eventString = String(event);
    String dataString = String(data);
  9. শেষে কিছু কম্পেরিজন। প্রথমে ইভেন্ট নাম मैच করছে কিনা চেক করুন। তারপর dataString-এর ভ্যালু সংশ্লিষ্ট লেড লেভেলে সেট করুন।

    // Determine which event we recieved
    if( eventString.equals("red") ) {
      m_led_level.red = dataString.toInt();
    } else if ( eventString.equals("green") ) {
      m_led_level.green = dataString.toInt();
    } else if ( eventString.equals("blue") ) {
      m_led_level.blue = dataString.toInt();
    } else {
      return;
    }
    // Set RGB color
    RGB.color(m_led_level.red, m_led_level.green, m_led_level.blue);

    শেষে নতুন RGB কালার সেট করুন। অজানা স্টেট হ্যান্ডল করার জন্য else সেকশনে return স্টেটমেন্ট যোগ করলাম। এরর কন্ডিশন ফিল্টার আউট করা সবসময় ভালো প্র্যাকটিস!

কোড টেস্ট করুন

  1. ফোনে Particle App খুলুন

  2. প্রথমে Argon সেটআপ করুন। যদি ব্লু ব্লিংক না করে, মোড বাটন ধরে রাখুন যতক্ষণ না ব্লু ব্লিংক করে।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    নোট: অ্যাপ প্রোগ্রাম করা থাকলে ডিফল্টলি LED অফ থাকবে। মোড বাটন ৫ সেকেন্ড ধরে রাখুন তারপর চালিয়ে যান।

  3. পেয়ারিং প্রসেসের মাধ্যমে যান। অ্যাপ সব ধাপ গাইড করবে। মেশ নেটওয়ার্কের অ্যাডমিন পাসওয়ার্ড মনে রাখতে ভুলবেন না।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  4. Argon-কে লেটেস্ট ফার্মওয়্যার (1.3.0) দিয়ে প্রোগ্রাম করুন (রিমাইন্ডার: স্টেজ ১ - টাইম টু টেস্ট - স্টেপ ২ দেখুন)

  5. দ্রুত ইয়েলো ব্লিংক করার পর, Argon-কে Tinker অ্যাপ দিয়ে প্রোগ্রাম করুন। রিলিজ পেজ থেকে ডাউনলোড করুন।

  6. স olid সায়ান LED (Particle Cloud-এ কানেক্টেড) পাওয়ার পর, অ্যাপ প্রোগ্রাম করুন। ড্রপডাউন মেনু থেকে Cloud Flash অপশন ব্যবহার করুন।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    যা দেখলাম, Particle লোকালি ফ্ল্যাশ করা ডিভাইসকে ক্লাউডে কানেক্ট করার সময় সেফ মোডে ফেলে। আমার সেটআপের কারণে হতে পারে। আপনার কেস ভিন্ন হতে পারে। Cloud Flash ব্যবহার করা 베스트।

    সঠিক deviceOS ভার্সন (1.3.0-rc1), ডিভাইস টাইপ (Argon) এবং ডিভাইস নাম (সেটআপের সময় দেওয়া নাম) সিলেক্ট করুন।

  7. ফোন অ্যাপ দিয়ে Xenon-এ কানেক্ট করুন

  8. ফোন অ্যাপ দিয়ে Xenon-কে আপনার মেশ নেটওয়ার্কে কানেক্ট করুন

  9. Xenon-কে Cloud Flash দিয়ে ফ্ল্যাশ করুন। ফোন অ্যাপ সেটআপের সময় দেওয়া নাম ব্যবহার করুন। ডিভাইস Particle Cloud-এ কানেক্টেড থাকলে বা সেফ মোডে (পার্পল LED) থাকলে প্রোগ্রাম হবে।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  10. কানেক্ট হলে মজার অংশ। Light Blue Explorer খুলুন। Argon বা Xenon-এর সাথে কানেক্ট করুন।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

  11. LED ক্যারেকтеристиকlerden একটি সিলেক্ট করুন এবং ভ্যালু চেঞ্জ করুন।

    Particle-এর ব্লুটুথ API মাস্টার করুন: ধাপে ধাপে গাইড

    সকল ডিভাইসে LED চেঞ্জ হবে!

ফাইনাল কোড

সব পিস একসাথে দিয়ে ফাইনাল কোড। সঠিক জায়গায় রাখা হয়েছে কিনা চেক করতে ব্যবহার করুন!!

/*
 * Project ble_mesh
 * Description: Bluetooth Low Energy + Mesh Example
 * Author: Jared Wolff
 * Date: 7/13/2019
 */
//SYSTEM_MODE(MANUAL);
// UUIDs for service + characteristics
const char* serviceUuid = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E";
const char* red = "6E400002-B5A3-F393-E0A9-E50E24DCCA9E";
const char* green = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E";
const char* blue = "6E400004-B5A3-F393-E0A9-E50E24DCCA9E";
// Set the RGB BLE service
BleUuid rgbService(serviceUuid);
// Variables for keeping state
typedef struct {
  uint8_t red;
  uint8_t green;
  uint8_t blue;
} led_level_t;
// Static level tracking
static led_level_t m_led_level;
// Tracks when to publish to Mesh
static bool m_publish;
// Mesh event handler
static void meshHandler(const char *event, const char *data) {
  // Convert to String for useful conversion and comparison functions
  String eventString = String(event);
  String dataString = String(data);
  // Determine which event we recieved
  if( eventString.equals("red") ) {
    m_led_level.red = dataString.toInt();
  } else if ( eventString.equals("green") ) {
    m_led_level.green = dataString.toInt();
  } else if ( eventString.equals("blue") ) {
    m_led_level.blue = dataString.toInt();
  } else {
    return;
  }
  // Set RGB color
  RGB.color(m_led_level.red, m_led_level.green, m_led_level.blue);
}
// Static function for handling Bluetooth Low Energy callbacks
static void onDataReceived(const uint8_t* data, size_t len, const BlePeerDevice& peer, void* context) {
  // We're only looking for one byte
  if( len != 1 ) {
    return;
  }
  // Sets the global level
  if( context == red ) {
    m_led_level.red = data[0];
  } else if ( context == green ) {
    m_led_level.green = data[0];
  } else if ( context == blue ) {
    m_led_level.blue = data[0];
  }
  // Set RGB color
  RGB.color(m_led_level.red, m_led_level.green, m_led_level.blue);
  // Set to publish
  m_publish = true;
}
// setup() runs once, when the device is first turned on.
void setup() {
  // Enable app control of LED
  RGB.control(true);
  // Init default level
  m_led_level.red = 0;
  m_led_level.green = 0;
  m_led_level.blue = 0;
  // Set to false at first
  m_publish = false;
  // Set the subscription for Mesh updates
  Mesh.subscribe("red",meshHandler);
  Mesh.subscribe("green",meshHandler);
  Mesh.subscribe("blue",meshHandler);
  // Set up characteristics
  BleCharacteristic redCharacteristic("red", BleCharacteristicProperty::WRITE_WO_RSP, red, serviceUuid, onDataReceived, (void*)red);
  BleCharacteristic greenCharacteristic("green", BleCharacteristicProperty::WRITE_WO_RSP, green, serviceUuid, onDataReceived, (void*)green);
  BleCharacteristic blueCharacteristic("blue", BleCharacteristicProperty::WRITE_WO_RSP, blue, serviceUuid, onDataReceived, (void*)blue);
  // Add the characteristics
  BLE.addCharacteristic(redCharacteristic);
  BLE.addCharacteristic(greenCharacteristic);
  BLE.addCharacteristic(blueCharacteristic);
  // Advertising data
  BleAdvertisingData advData;
  // Add the RGB LED service
  advData.appendServiceUUID(rgbService);
  // Start advertising!
  BLE.advertise(&advData);
}
// loop() runs over and over again, as quickly as it can execute.
void loop() {
  // Checks the publish flag,
  // Publishes to a variable called "red" "green" and "blue"
  if( m_publish ) {
    // Reset flag
    m_publish = false;
    // Publish to Mesh
    Mesh.publish("red", String::format("%d", m_led_level.red));
    Mesh.publish("green", String::format("%d", m_led_level.green));
    Mesh.publish("blue", String::format("%d", m_led_level.blue));
  }
}

উপসংহার

এই টিউটোরিয়ালে আপনি শিখেছেন কিভাবে Particle Mesh প্রজেক্টে ব্লুটুথ যোগ করতে হয়। আপনি কল্পনা করতে পারেন সম্ভাবনাগুলো অপরিসীম। উদাহরণস্বরূপ, ইউজার/অ্যাডমিনিস্ট্রেটিভ অ্যাপ্লিকেশন এক্সপেরিয়েন্সে যোগ করা যায়। এখন তা দারুণ। 😊

আপনি আমার আপকামিং বইতে এইরকম আরো কন্টেন্ট পাবেন: The Ultimate Guide to Particle Mesh। আপডেট এবং ইনসাইডার কন্টেন্টের জন্য আমার লিস্টে সাবস্ক্রাইব করুন। প্লাস সব অর্লি সাবস্ক্রাইবাররা রিলিজ হলে ডিসকাউন্ট পাবে! এখানে ক্লিক করুন সাইন আপ করতে।

  1. এয়ারপ্লে (AirPlay) কীভাবে ব্যবহার করবেন

  2. এয়ারপডস (AirPods) অ্যান্ড্রয়েড এবং উইন্ডোজে কীভাবে ব্যবহার করবেন

  3. আইপ্যাড বা আইফোনে মাউস কীভাবে ব্যবহার করবেন?

  4. উইন্ডোজ ১০-এ ব্লুটুথ মাস্টার করুন: সহজ সেটআপ ও ফাইল ট্রান্সফার গাইড