Arduino IDE ব্যবহার করে ESP32-এ SPI (সিরিয়াল পেরিফেরাল ইন্টারফেস)

Arduino Ide Byabahara Kare Esp32 E Spi Siriyala Peripherala Intaraphesa



ESP32 বোর্ডের একাধিক যোগাযোগ প্রোটোকলের জন্য সমর্থন রয়েছে। এই প্রোটোকলের মধ্যে রয়েছে সিরিয়াল USART, I2C (IIC) এবং SPI। এই ESP32 বোর্ডগুলির পাশাপাশি WiFi, ডুয়াল ব্লুটুথ, ESP-Now, LoRa এবং আরও অনেক কিছুর মতো ওয়্যারলেস কমিউনিকেশন প্রোটোকল রয়েছে। আজ আমরা ESP32 SPI (সিরিয়াল পেরিফেরাল ইন্টারফেস) প্রোটোকলের উপর ফোকাস করব।

ESP32 এ SPI (সিরিয়াল পেরিফেরাল ইন্টারফেস)

এসপিআই বা সিরিয়াল পেরিফেরাল ইন্টারফেস হল একটি স্বল্প দূরত্বের যোগাযোগ প্রোটোকল যা একাধিক মাইক্রোকন্ট্রোলার ডিভাইস যেমন ESP32 এ ব্যবহৃত হয়। এটি একটি সিঙ্ক্রোনাস কমিউনিকেশন প্রোটোকল যা প্রাথমিকভাবে মাইক্রোকন্ট্রোলাররা এর পেরিফেরালগুলির সাথে যোগাযোগ করতে ব্যবহার করে, যেমন আমরা এই প্রোটোকলটি SPI প্রোটোকল সমর্থন করে এমন ডিভাইসগুলি পড়তে এবং নিয়ন্ত্রণ করতে ব্যবহার করতে পারি।







SPI যোগাযোগ মাস্টার স্লেভ কনফিগারেশন সমর্থন করে সবসময় একটি আছে এক মাস্টার যে একাধিক দাস নিয়ন্ত্রণ করে। এটা সম্পূর্ণ দ্বৈত যোগাযোগ যাতে একই সাথে মাস্টার থেকে স্লেভ এবং স্লেভ থেকে মাস্টারের সাথে ডেটা বিনিময় করা যায়।




ESP32 প্রয়োজনে SPI যোগাযোগ চার ডিভাইসে ডেটা প্রেরণ এবং গ্রহণ করার জন্য বিভিন্ন পিন। নিচে সেই চারটি পিন দেওয়া হল:



  1. SCK: ঘড়ি লাইন সংক্রমণ গতি নির্ধারণ করে
  2. MISO: মাস্টার ইন স্লেভ আউট হল স্লেভ থেকে মাস্টারে ট্রান্সমিশন পিন
  3. ধোঁয়া: মাস্টার আউট স্লেভ ইন হল মাস্টার ডেটা স্লেভের জন্য ট্রান্সমিশন লাইন
  4. এসএস: স্লেভ সিলেক্ট লাইন ESP32 কে একটি নির্দিষ্ট স্লেভ নির্বাচন করতে এবং সেই স্লেভের কাছ থেকে ডেটা প্রেরণ বা গ্রহণ করতে সহায়তা করে

বিঃদ্রঃ: কিছু ডিভাইস যা শুধুমাত্র স্লেভ এবং মাস্টার হিসাবে কাজ করতে পারে না তাদের পিনের নামকরণ ভিন্ন যেমন:





    • MISO দিয়ে প্রতিস্থাপিত হয় এসডিও (সিরিয়াল ডেটা আউট)
    • ধোঁয়া দিয়ে প্রতিস্থাপিত হয় এসডিআই (সিরিয়াল ডেটা ইন)

ESP32 এ SPI পিন

ESP32 বোর্ডের সাথে আসে 4 বিভিন্ন SPI পেরিফেরাল এর মাইক্রোকন্ট্রোলারের সাথে একীভূত।

    • SPI0: শুধুমাত্র অভ্যন্তরীণ মেমরি যোগাযোগের জন্য- বহিরাগত SPI ডিভাইসের সাথে ব্যবহার করা যাবে না
    • SPI1: শুধুমাত্র অভ্যন্তরীণ মেমরি যোগাযোগের জন্য- বহিরাগত SPI ডিভাইসের সাথে ব্যবহার করা যাবে না
    • SPI2: (HSPI) স্বাধীন বাস সংকেত আছে. প্রতিটি বাস উঠতে পারে 3 স্লেভ ডিভাইস
    • SPI3: (VSPI) বাস সিগন্যাল স্বাধীন। প্রতিটি বাস উঠতে পারে 3 স্লেভ ডিভাইস

বেশিরভাগ ESP32 বোর্ডগুলি SPI2 এবং SPI3 উভয়ের জন্য পূর্ব নির্ধারিত SPI পিনের সাথে আসে। যাইহোক, যদি বরাদ্দ না করা হয় তবে আমরা সবসময় কোডে SPI পিন বরাদ্দ করতে পারি। নিম্নলিখিত এসপিআই পিনগুলি বেশিরভাগ ESP32 বোর্ডে পাওয়া যায় যা আগে থেকে নির্ধারিত রয়েছে:



SPI ইন্টারফেস ধোঁয়া MISO SCLK সিএস
ভিএসপিআই GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15



উপরে উল্লিখিত SPI পিনগুলি বোর্ডের প্রকারের উপর নির্ভর করে পরিবর্তিত হতে পারে। এখন আমরা Arduino IDE ব্যবহার করে ESP32 SPI পিন চেক করার জন্য একটি কোড লিখব।

ESP32 ডিফল্ট SPI পিনগুলি কীভাবে সন্ধান করবেন

নিচে লেখা কোডটি ESP32 বোর্ডে ডিফল্ট SPI পিন খুঁজে পেতে সাহায্য করবে। আরডুইনো IDE কানেক্ট ESP32 PC এর সাথে খুলুন, সঠিক পোর্ট নির্বাচন করুন এবং কোড আপলোড করুন। তারপর আউটপুট জন্য অপেক্ষা করুন. এটাই! এটা কত সহজ

ESP32 ডিফল্ট SPI পিন খুঁজে বের করার কোড

নীচে দেওয়া কোডটি সিরিয়াল মনিটরে ESP32 ডিফল্ট SPI পিনগুলি প্রিন্ট করবে।

অকার্যকর সেটআপ ( ) {
সিরিয়াল.শুরু ( 115200 ) ;
সিরিয়াল.প্রিন্ট ( 'MOSI GPIO পিন:' ) ;
Serial.println ( ধোঁয়া ) ;
সিরিয়াল.প্রিন্ট ( 'MISO GPIO পিন:' ) ;
Serial.println ( MISO ) ;
সিরিয়াল.প্রিন্ট ( 'SCK GPIO পিন:' ) ;
Serial.println ( SCK ) ;
সিরিয়াল.প্রিন্ট ( 'SS GPIO পিন:' ) ;
Serial.println ( এসএস ) ;
}
অকার্যকর লুপ ( ) {
}


কোড বড রেট সংজ্ঞায়িত করে শুরু হয় এবং ESP32 SPI কমিউনিকেশন প্রোটোকলের জন্য ডিফল্ট GPIO পিন কল করে চলতে থাকে।

আউটপুট

এখানে আমাদের ক্ষেত্রে সিরিয়াল মনিটর যথাক্রমে MOSI, MISO, SCK এবং SS এর জন্য পিন 23, 19, 18 এবং 5 প্রদর্শন করেছে।

ESP32 এ কাস্টম SPI পিনগুলি কীভাবে ব্যবহার করবেন

ESP32 মাল্টিপ্লেক্সিং বৈশিষ্ট্যগুলির জন্য ধন্যবাদ ESP32 বোর্ডের যেকোনো পিনকে UART, I2C, SPI এবং PWM হিসাবে কনফিগার করা সম্ভব। একজনকে কেবল তাদের কোডে বরাদ্দ করতে হবে। এখন আমরা নতুন SPI পিন সংজ্ঞায়িত করব এবং নিশ্চিত করার জন্য সেগুলিকে সিরিয়াল মনিটরে প্রিন্ট করব।

Arduino IDE এডিটরে নিচের কোডটি টাইপ করুন।

# অন্তর্ভুক্ত করুন
অকার্যকর সেটআপ ( ) {
সিরিয়াল.শুরু ( 115200 ) ;
সিরিয়াল.প্রিন্ট ( 'ডিফল্ট MOSI GPIO পিন: ' ) ;
Serial.println ( ধোঁয়া ) ;
সিরিয়াল.প্রিন্ট ( 'ডিফল্ট MISO GPIO পিন:' ) ;
Serial.println ( MISO ) ;
সিরিয়াল.প্রিন্ট ( 'ডিফল্ট SCK GPIO পিন: ' ) ;
Serial.println ( SCK ) ;
সিরিয়াল.প্রিন্ট ( 'ডিফল্ট SS GPIO পিন:' ) ;
Serial.println ( এসএস ) ;
#SCK 25 সংজ্ঞায়িত করুন
#MISO 32 সংজ্ঞায়িত করুন
#MOSI 26 সংজ্ঞায়িত করুন
# CS 33 সংজ্ঞায়িত করুন
/* লাইব্রেরি_নাম সেন্সর_নাম ( CS, MOSI, MISO, SCK ) ; // নতুন SPI পিন কল করুন */
সিরিয়াল.প্রিন্ট ( 'MOSI নতুন GPIO পিন:' ) ;
Serial.println ( ধোঁয়া ) ;
সিরিয়াল.প্রিন্ট ( 'MISO নতুন GPIO পিন:' ) ;
Serial.println ( MISO ) ;
সিরিয়াল.প্রিন্ট ( 'SCK নতুন GPIO পিন:' ) ;
Serial.println ( SCK ) ;
সিরিয়াল.প্রিন্ট ( 'SS নতুন GPIO পিন:' ) ;
Serial.println ( এসএস ) ;
}
অকার্যকর লুপ ( ) {
}


এখানে উপরের কোডে, আমরা SPI সিরিয়াল লাইব্রেরি অন্তর্ভুক্ত করি তারপর সিরিয়াল মনিটরে ডিফল্ট SPI পিনগুলি প্রিন্ট করি। প্রয়োজন না হলে কোডের এই অংশটি এড়িয়ে যেতে পারে। পরবর্তীতে ডিফাইন ব্যবহার করে আমরা এসপিআই-তে নতুন পিন বরাদ্দ করি এবং সিরিয়াল মনিটরে একে একে প্রিন্ট করি।

আউটপুট

সিরিয়াল মনিটরে প্রদর্শিত আউটপুট ESP32 বোর্ডের জন্য সমস্ত নতুন SPI পিন প্রিন্ট করে।

একাধিক SPI ডিভাইস সহ ESP32

ESP32 এর দুটি SPI বাস রয়েছে এবং প্রতিটি বাস নিয়ন্ত্রণ করতে পারে 3 ডিভাইস যার মানে ESP32 এর SPI ব্যবহার করে মোট 6 টি ডিভাইস নিয়ন্ত্রণ করা যায়। আরও ডিভাইস নিয়ন্ত্রণ করতে, আমরা বিভিন্ন মাল্টিপ্লেক্সিং কৌশল ব্যবহার করতে পারি।

একাধিক স্লেভ ডিভাইস নিয়ন্ত্রণ করার সময় ESP32 তাদের জন্য একটি মাস্টার হিসাবে কাজ করবে তিনটি লাইন MISO, MOSI SCLK তাদের জন্য একই হবে শুধুমাত্র পার্থক্য হল CS ঘড়ির সংকেত লাইন। একটি স্লেভ ডিভাইসে ডেটা পাঠাতে সেই স্লেভ ডিভাইসের CS পিন কম সেট করা উচিত।


আমরা CS-কে LOW-এ সেট করতে চাইলে নিম্নলিখিত সিনট্যাক্স অনুসরণ করা হবে।

ডিজিটাল লিখুন ( সিএস, কম ) ;


ধরুন আমরা অন্য কোনো ডিভাইস থেকে ডেটা পড়তে চাই, তাই আমাদের অবশ্যই প্রথম স্লেভ ডিভাইসের CS পিনটিকে অক্ষম করার জন্য HIGH হিসেবে সেট করতে হবে।

ডিজিটাল লিখুন ( CS_1, উচ্চ ) ; // SLAVE এর CS পিন নিষ্ক্রিয় করুন 1
ডিজিটাল লিখুন ( CS_2, কম ) ; // SLAVE এর CS পিন সক্ষম করুন৷ দুই

উপসংহার

সিরিয়াল পেরিফেরাল ইন্টারফেস হল তারযুক্ত যোগাযোগ প্রোটোকল যা ESP32 মাইক্রোকন্ট্রোলার দ্বারা একাধিক স্লেভ ডিভাইসের মধ্যে ডেটা বিনিময় করার জন্য ব্যবহৃত হয়। ESP32 SPI 3টি স্লেভ ডিভাইস নিয়ন্ত্রণ করার প্রতিটি বাস ক্ষমতার সাথে যোগাযোগের জন্য দুটি ভিন্ন বাস সমর্থন করে। ডিফল্টরূপে, ESP32 এসপিআই পিনের সাথে আসে; যাইহোক, আমরা কোড ব্যবহার করে কাস্টম পিনগুলিকে সংজ্ঞায়িত করতে এবং ব্যবহার করতে পারি।