সুচিপত্র:

ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল: 8 টি ধাপ
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল: 8 টি ধাপ

ভিডিও: ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল: 8 টি ধাপ

ভিডিও: ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল: 8 টি ধাপ
ভিডিও: ৫০ লাখ টাকার ড্রোনের কি হাল| Dji Drone crash | #travel #shorts #Eat&Travelwithmamun 2024, নভেম্বর
Anonim
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল
ESP32 ব্লুটুথ BLE রিমোট কন্ট্রোল

এই প্রকল্পটি একটি সস্তা ব্লুটুথ BLE জয়স্টিককে ESP32 এর সাথে কিভাবে সংযুক্ত করা যায় তার একটি উদাহরণ। কোডটি ESP32 অ্যাডনের সাথে Arduino IDE Ver 1.8.5 ব্যবহার করে লেখা হয়েছিল। ব্যবহৃত BLE জয়স্টিক হল একটি বাণিজ্যিক ডিভাইস যা আপনি ইন্টারনেটে 20.00 ডলারের কম বা আপনার স্থানীয় 5BELoW স্টোর থেকে 5.00 ডলারে কিনতে পারেন।

আমি এই প্রকল্পের জন্য যে জয়স্টিকটি ব্যবহার করেছি তা হল একটি স্পেকট্রাম ভিআর কন্ট্রোল ব্লুটুথ রিমোট কন্ট্রোলার। এটি ভিআর হেডসেট ব্যবহার করার জন্য একটি জয়স্টিক/মাউস হিসাবে অ্যান্ড্রয়েড এবং আইওএস ট্যাবলেটের সাথে কাজ করে বাজারজাত করা হচ্ছে।

ভিআর কন্ট্রোল ব্লুটুথ রিমোট কন্ট্রোলারের এক্স এবং ওয়াই অক্ষের সাথে একটি একক জয়স্টিক, সামনে দুটি ট্রিগার বোতাম এবং হ্যান্ডেলে ছয়টি বোতাম রয়েছে। দুটি বোতাম পাওয়ার অন/অফ এবং মোড কন্ট্রোলের জন্য। অন্য চারটি বোতাম আপনি যা চান তার জন্য ব্যবহার করা যেতে পারে। এই প্রকল্পটি একটি কঙ্কাল বা কাঠামো যা সমস্ত ব্লুটুথ ইন্টারফেসিং এবং বোতাম এবং জয়স্টিকের ডিকোডিং পরিচালনা করে। আপনাকে যা করতে হবে তা হ'ল ফাংশন কলগুলি যোগ করতে যা আপনি বোতাম এবং জয়স্টিক করতে চান। এই কাঠামোটি ব্যবহার করার জন্য আপনাকে ব্লুটুথ সম্পর্কে কিছু জানার দরকার নেই।

Arduino IDE এবং ESP32 addon ইনস্টল করার জন্য বিস্তারিত নির্দেশাবলী সহ অসংখ্য ওয়েব সাইট রয়েছে। আমি এখানে সেই তথ্যের পুনরাবৃত্তি করার চেষ্টা করব না। এটি গুগল করুন এবং নির্দেশাবলী অনুসরণ করুন।

কাঠামোটি আইওটি শেয়ারিং দ্বারা প্রকাশিত একটি বিএলই ক্লায়েন্ট উদাহরণের একটি অভিযোজন। আপনি এখানে পেতে পারেন। BLE কিভাবে কাজ করে সে সম্পর্কে ধারণা পেতে আপনি এই কোডটি অধ্যয়ন করতে পারেন। এক্সপ্রেসিফের একটি GATT BLE ক্লায়েন্টের জন্য একটি সম্পূর্ণ উদাহরণ রয়েছে এবং অপারেশনটি বিস্তারিতভাবে ব্যাখ্যা করে (Arduino IDE এর জন্য লেখা হয়নি)। এটা আপনি এখানে পাবেন.

এটি একটি BLE টিউটোরিয়াল নয়। কোডটি বিস্তারিতভাবে কীভাবে কাজ করে তা আমি ব্যাখ্যা করব না। আমি জয়স্টিকের কিছু বৈশিষ্ট্য বর্ণনা করতে BLE পরিভাষা ব্যবহার করব। কোডের যে অংশটি আপনার প্রকল্পের জন্য আপনাকে সংশোধন করতে হবে তা বিস্তারিতভাবে ব্যাখ্যা করা হবে যাতে আপনি এটি পরিবর্তন করতে পারেন। সুযোগটি এই নির্দেশযোগ্য সংক্ষিপ্ত এবং জয়স্টিক ব্যবহারে মনোনিবেশ করার জন্য সীমাবদ্ধ।

ধাপ 1: ব্লুটুথ লো এনার্জি (BLE) সম্পর্কে একটু

এটি BLE এর একটি টিউটোরিয়াল হওয়ার উদ্দেশ্যে নয়। যখন আমি এই প্রকল্পটি শুরু করি, তখন আমি BLE এবং ক্লাসিক ব্লুটুথের মধ্যে পার্থক্য জানতাম না। আমি শুধু দেখতে চেয়েছিলাম যে আমি ESP32 এর সাথে কাজ করার জন্য যে জয়স্টিক কিনেছি তা পেতে পারি কিনা। নিম্নলিখিত লেখায় আমি BLE পরিভাষা ব্যবহার করছি কিভাবে BLE কাজ করে তার একটি সরলীকৃত ওভারভিউ দিতে।

BLE একটি ক্লায়েন্ট/সার্ভার আর্কিটেকচার ব্যবহার করে। একটি ডিভাইস হল সার্ভার যা পরিষেবা প্রদান করে। অন্য ডিভাইস হল একজন ক্লায়েন্ট যা সেবা গ্রহন করে। পাওয়ারের প্রয়োজনীয়তা কম রাখার জন্য, BLE শুধুমাত্র ছোট প্যাকেট তথ্য প্রেরণ করে যখন একটি পরিবর্তন ঘটে। জয়স্টিকের ক্ষেত্রে, জয়স্টিক ডিভাইসটি একটি সার্ভার। একটি সার্ভার হিসাবে, এটি নিজেই বিজ্ঞাপন দেয় এবং জিজ্ঞাসা করা হলে এটি প্রদত্ত পরিষেবাগুলির একটি তালিকা প্রেরণ করবে। জয়স্টিক ডিভাইস পাঁচটি সেবার বিজ্ঞাপন দেয়। একমাত্র পরিষেবা যা আমরা আগ্রহী তা হল BLE HID (Human Interface Device) পরিষেবা। একটি বিএলই সার্ভিস এর সাথে যুক্ত বৈশিষ্ট্য হিসাবে পরিচিত। একটি বৈশিষ্ট্য সাধারণত তথ্যের উৎস। জয়স্টিকের HID পরিষেবার দশটি বৈশিষ্ট্য রয়েছে। কিছু বৈশিষ্ট্য নকল এবং উপেক্ষা করা হয়। আমরা শুধুমাত্র BLE রিপোর্ট বৈশিষ্ট্যের প্রতি আগ্রহী যেগুলোতে পড়া এবং বিজ্ঞপ্তি দেওয়ার ক্ষমতা রয়েছে। তিনটি বৈশিষ্ট্য এই প্রয়োজনীয়তাগুলি পূরণ করে এবং জয়স্টিকের অবস্থান এবং বোতামগুলির অবস্থা সম্পর্কে তথ্য সরবরাহ করে। যখন বিজ্ঞপ্তি সক্ষম করা হয়, তখন সংশ্লিষ্ট বৈশিষ্ট্যে কোনো পরিবর্তন ধরা পড়লে সার্ভার ডেটা প্যাকেট পাঠাবে।

কাঠামো যাচাই করে যে সার্ভারটি এটি খুঁজে পেয়েছে তাতে BLE HID পরিষেবা রয়েছে এবং তারপর তিনটি রিপোর্ট বৈশিষ্ট্যের উপর বিজ্ঞপ্তিগুলি সক্ষম করবে যা জয়স্টিক এবং বোতাম অবস্থা তথ্য সরবরাহ করে। তারপরে, যখন একটি বোতাম টিপে বা ছেড়ে দেওয়া হয় বা জয়স্টিকটি সরানো হয়, তখন ESP32 তথ্যগুলির একটি প্যাকেট গ্রহণ করে যা বলে যে নতুন জয়স্টিকের অবস্থান কী এবং/অথবা কিছু বোতামের অবস্থা।

ধাপ 2: স্ক্যানিং এবং সংযোগ নির্দেশক

কাঠামো দুটি LEDS, GREENLED এবং BLUELED সংজ্ঞায়িত করে এবং ESP32 এর GPIO পিনের দুটিতে তাদের নিয়োগ দেয়। ESP32 যখন BLE জয়স্টিক খুঁজছে তখন GREENLED আলোকিত হয়। যখন জয়স্টিক পাওয়া যায় তখন GREENLED বন্ধ হয়ে যায় এবং BLUELED জ্বালানো হয় যাতে বোঝা যায় যে সংযোগ স্থাপন করা হয়েছে এবং আপনি যেতে প্রস্তুত। যদি সংযোগটি নষ্ট হয়ে যায়, BLUELED বন্ধ থাকে, ESP32 পুনরায় সেট করা হয়, GREENLED আলোকিত হয় এবং আবার স্ক্যানিং শুরু হয়। যদি জয়স্টিক ত্রিশ সেকেন্ডের মধ্যে না পাওয়া যায় তাহলে স্ক্যান করা বন্ধ হয়ে যায় এবং GREENLED বন্ধ হয়ে যায়। পাঁচ সেকেন্ড পরে, আবার স্ক্যানিং শুরু হয় এবং GREENLED চালু হয়।

শেষ ফলাফল হল যে ESP32 এটি খুঁজে না পাওয়া পর্যন্ত জয়স্টিকের জন্য স্ক্যান করতে থাকবে। একবার সংযোগ হয়ে গেলে, যদি এটি হারিয়ে যায়, ESP32 নিজেই পুনরায় সেট হবে এবং আবার স্ক্যান করা শুরু করবে। ESP32 পুনরায় সেট করা হয়েছে কারণ স্ক্যানিং পুনরায় চালু করার জন্য ব্লুটুথ স্ট্যাক রিসেট করার জন্য কোন ESP32 SDK ফাংশন নেই।

ধাপ 3: জয়স্টিক এবং বোতাম ইভেন্টগুলি বোঝা।

ESP32- এ একটি কলব্যাক ইভেন্ট সার্ভার থেকে তিনটি বৈশিষ্ট্যের জন্য তিনটি ভিন্ন ডাটা প্যাকেট গ্রহণ করে যা বিজ্ঞপ্তি প্রদানের জন্য সেটআপ করা হয়েছিল। একটি প্যাকেট চার বাইট লম্বা। তিনটি বাইটের মধ্যে X অক্ষের অবস্থান, Y অক্ষের অবস্থান এবং ট্রিগার বোতাম রয়েছে, যা বাইটে কিছুটা ম্যাপ করা আছে। অন্য দুটি প্যাকেটের প্রতিটি দুটি বাইট এবং একটি একক বাইট যা বিট ম্যাপ করা বোতামের অবস্থা রয়েছে। প্রাপ্ত প্যাকেটগুলি ডিকোড করা হয় এবং স্মৃতিতে একটি বাইট অ্যারেতে অনুলিপি করা হয়। জয়স্টিক অক্ষের ডেটা X এবং Y ডেটা বাইটে চলে যায় এবং তিনটি বিট ম্যাপ করা বোতাম বাইটের প্রত্যেকটি সেই বোতামগুলির জন্য উপযুক্ত বাইটে নির্দেশিত হয়।

বিজ্ঞপ্তি দ্বারা প্রাপ্ত ডেটা পরিচালনা করার জন্য একটি ফ্রিআরটিওএস টাস্ক তৈরি করা হয়। জয়স্টিক এবং ট্রিগার বোতামের জন্য একটি কাজ, A & B বোতামের জন্য একটি কাজ এবং C & D বোতামের জন্য একটি কাজ। এই কাজগুলির প্রতিটিতে স্পষ্টভাবে চিহ্নিত এলাকাগুলি রয়েছে যেখানে ইভেন্টের সাথে আপনি যা চান তা করার জন্য আপনার কোড যোগ করা উচিত। টাস্কের মূল অংশে "// ===== আপনার কোড এখানে যোগ করুন =====" মন্তব্যটি দেখুন এবং এর পরে আপনার কোড যোগ করুন। প্রতিটি টাস্কের একটি মন্তব্য রয়েছে যা নির্দেশ করে যে এটি কি জন্য ব্যবহার করা হয়েছে এবং একটি Serial.println () ব্যবহার করে ইভেন্ট সম্পর্কে একটি বার্তা মুদ্রণ করতে।

এখানে A/B বোতাম টাস্ক থেকে একটি উদাহরণ;

void taskButtonAB (void *parameter) {uint8_t বোতাম;

// ===== যদি টাস্কটি একবার শুরু করার প্রয়োজন হয়, তাহলে এটি এখানে রাখুন =====

যখন (সত্য) {// CPU ছেড়ে দিন, নতুন ডেটা vTaskSuspend (NULL) এর জন্য অপেক্ষা করুন; // আমরা শুধু জেগে উঠলাম, নতুন ডেটা পাওয়া যাচ্ছে বোতাম = VrBoxData [VB_BTNAB]; Serial.printf ("A/B বাটন: %02X / n", বোতাম); যদি (বাটন এবং VB_BUTTON_A) {// বাটন A চেপে রাখা হয় বা Serial.println ("Button A") চেপে রাখা হয়; // ===== এখানে আপনার কোড যোগ করুন =====}

যদি (বোতাম এবং VB_BUTTON_B)

{// বাটন B টিপানো হয়েছে বা চেপে রাখা হচ্ছে Serial.println ("Button B");

// ===== এখানে আপনার কোড যোগ করুন =====

}} // for} // taskButtonAB

ধাপ 4: ভিআর বক্স অপারেশন: জয়স্টিক

যদি জয়স্টিককে কেন্দ্রের অবস্থানে রেখে দেওয়া হয়, কোন জয়স্টিক বিজ্ঞপ্তি পাঠানো হয় না। একবার জয়স্টিক কেন্দ্র থেকে সরানো হলে, জয়স্টিক ডেটা এবং ট্রিগার বোতাম ডেটা সহ একটি বিজ্ঞপ্তি বার্তা প্রতি 15mS পাঠানো হয়। যখন জয়স্টিকটি কেন্দ্রে ফেরত পাঠানো হয়, তখন এটি একটি কেন্দ্রে স্থানান্তরিত হয়েছে এমন একটি বিজ্ঞপ্তি পাঠানো হয় না। অন্য কথায়, এটি আপনাকে বলে যে জয়স্টিকটি কেন্দ্র থেকে সরে গেছে, তবে এটি কেন্দ্রে চলে গেছে তা নয়। শেষ ফলাফল হল যে আপনি জয়েস্টিক কেন্দ্রের দিকে এগিয়ে যাচ্ছে তা নির্দেশ করে বার্তা পান, কিন্তু এটি কেন্দ্রে পৌঁছেছে তা নয়। খুবই বিরক্তিকর. দুটি ট্রিগার বোতাম জয়স্টিক ডেটার সাথে অন্তর্ভুক্ত। জয়স্টিকটি কেন্দ্রে ফেরার পরে ট্রিগার বোতামগুলির একটি টিপলে জয়স্টিকের অবস্থান শূন্যে আপডেট হবে। ফ্রেমওয়ার্কটিতে একটি টাইমআউট টাইমার বিল্ট-ইন রয়েছে যা স্বয়ংক্রিয়ভাবে একটি জয়স্টিক বিজ্ঞপ্তি বার্তা সিমুলেট করে অল্প সময়ের পরে সমস্ত জয়স্টিক/ট্রিগার বোতাম বিজ্ঞপ্তি বার্তা আসা বন্ধ হয়ে যায়। টাইমার জয়স্টিক শূন্য সেট করে। জয়স্টিকের প্রতিটি অক্ষে প্রায় +/- 25 এর পরিসীমা থাকে।

ধাপ 5: ভিআর বক্স অপারেশন: ট্রিগার বোতাম

ট্রিগার বোতামগুলি টিপলে একবার বিজ্ঞপ্তি বার্তা প্রেরণ করবে এবং পুনরায় মুক্তি পাওয়ার সময়। চাপা বিজ্ঞপ্তি বার্তাটি টিপানো বোতামটি নির্দেশ করবে। রিলিজ বিজ্ঞপ্তি বার্তাটি নির্দেশ করে যে উভয় বোতামই মুক্তি পেয়েছে।

নিম্ন ট্রিগার বোতামটি ধরে রাখা সার্ভারটিকে উপরের ট্রিগার বোতামটি চাপানো হয়েছে তা সনাক্ত করতে বাধা দেবে। উপরের ট্রিগার বোতামটি ধরে রাখা এবং নিম্ন ট্রিগার বোতাম টিপলে সার্ভার একটি বিজ্ঞপ্তি বার্তা প্রেরণ করে যে নীচের ট্রিগার বোতামটি চাপানো হয়েছে (উপরের ট্রিগার বোতামটি শূন্য হবে!)। নিম্ন ট্রিগার বোতামটি ছেড়ে দিলে সার্ভারটি একটি বিজ্ঞপ্তি পাঠাবে যে উপরের ট্রিগার বোতামটি চাপানো হয়েছে এবং নিম্নের ট্রিগারটি মুক্তি পেয়েছে।

অন্য কথায়, নিম্ন ট্রিগার বোতামটি উপরের ট্রিগার বোতামের উপর প্রভাবশালী এবং যখন উভয়টি চাপানো হয় তখন এটি ওভাররাইড করবে। উভয় বোতাম চাপা পড়ার ক্ষেত্রে আপনাকে কীভাবে পরিচালনা করতে হবে তা নির্ধারণ করতে হবে।

ধাপ 6: ভিআর বক্স অপারেশন: এ/বি বোতাম

A এবং B বোতামগুলি জয়স্টিকের মত কাজ করে এবং চাপলে এবং চেপে ধরলে ক্রমাগত বিজ্ঞপ্তি বার্তা পাঠায়। বাটন রিলিজ হলে মেসেজ বন্ধ হয়ে যায়। A এবং B বোতামগুলি ট্রিগার বোতামের মতো কাজ করে যাতে A বোতামটি B বোতামে আধিপত্য বিস্তার করে যেমন নিম্ন ট্রিগার বোতামটি উপরের ট্রিগার বোতামে আধিপত্য বিস্তার করে।

ধাপ 7: ভিআর বক্স অপারেশন: সি/ডি বোতাম

C এবং D বোতাম টিপলে একবার বিজ্ঞপ্তি বার্তা পাঠায় এবং পুনরায় মুক্তি পেলে। যদি ধরে রাখা হয়, তাহলে আর কোনো বার্তা পাঠানো হয় না যতক্ষণ না সেগুলি মুক্তি পায়। সি বা ডি বোতামের যেকোন একটিকে চেপে ধরলে সার্ভার অন্য বোতামে কার্যকলাপ শনাক্ত করতে বাধা দেবে।

ধাপ 8: উপসংহার

বোতামগুলির ক্রিয়াকলাপটি আমার মতে কিছুটা ভীতু। ফ্রেমওয়ার্ক একটি বোতাম চাপলে আপনার কোডটি কাজ করার জন্য জায়গাগুলি সরবরাহ করে। আপনার যদি বোতাম রিলিজগুলি সনাক্ত করার প্রয়োজন হয় তবে এটি কীভাবে করবেন তা নির্ধারণ করার জন্য এটি আপনার কাছে রেখে দেওয়া হয়েছে।

আপনি প্রতিটি বোতামটি কী করতে চান এবং জয়স্টিকটি কী সরানো উচিত তা নির্ধারণ করা সম্পূর্ণরূপে আপনার উপর নির্ভর করে। আপনি ট্রিগার, এ এবং বি এবং সি এবং ডি বোতামের পার্থক্যগুলি কীভাবে পরিচালনা করবেন তা আপনার উপর নির্ভর করে।

জন্য কোড দেখুন; taskJoyStick (), taskButtonAB (), taskButtonCD () ফাংশন এবং "// ===== এখানে আপনার কোড যোগ করুন =====" মন্তব্য করার পরে আপনার কোড যোগ করুন।

জয়স্টিক (ফরওয়ার্ড, ব্যাকওয়ার্ড, ডান এবং বাম) হ্যান্ডেল করার জন্য আপনার চারটি ফাংশন এবং বিভিন্ন বোতামগুলি পরিচালনা করার জন্য ছয়টি ফাংশন প্রয়োজন হবে। তাদের সব বা শুধু আপনার যা প্রয়োজন তা বাস্তবায়ন করুন। সিদ্ধান্ত আপনার.

আপনি যদি এই কাঠামোটি ব্যবহার করেন। আপনি এটি কী জন্য ব্যবহার করেছেন এবং যদি আপনি এটি ব্যবহার করা সহজ মনে করেন তবে আমি চিৎকার করে বলতে চাই।

এটি কীভাবে কাজ করে সে সম্পর্কে আপনার যদি প্রশ্ন থাকে বা এটি কাজ করতে সাহায্যের প্রয়োজন হয়, আমার সাথে যোগাযোগ করুন।

কোডটি GitHub এ পাওয়া যায় এখানে।

উপভোগ করুন।

প্রস্তাবিত: