সুচিপত্র:

IoT তৈরি করা সহজ: ESP-MicroPython-MQTT-ThingSpeak: 12 ধাপ
IoT তৈরি করা সহজ: ESP-MicroPython-MQTT-ThingSpeak: 12 ধাপ

ভিডিও: IoT তৈরি করা সহজ: ESP-MicroPython-MQTT-ThingSpeak: 12 ধাপ

ভিডিও: IoT তৈরি করা সহজ: ESP-MicroPython-MQTT-ThingSpeak: 12 ধাপ
ভিডিও: জীবনযাত্রাকে পাল্টে দিচ্ছে ইন্টারনেট অব থিংস (আইওটি), কীভাবে কাজ করে এটি? | IOT 2024, জুলাই
Anonim
IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak
IoT Made Ease: ESP-MicroPython-MQTT-ThingSpeak

আমার আগের টিউটোরিয়ালে, মাইক্রোপাইথন ইএসপিতে জুপিটার ব্যবহার করে, আমরা শিখেছি কিভাবে ইএসপি ডিভাইসে মাইক্রোপাইথন ইনস্টল এবং চালানো যায়। জুপিটার নোটবুককে আমাদের উন্নয়ন পরিবেশ হিসেবে ব্যবহার করে, আমরা সেন্সর (তাপমাত্রা, আর্দ্রতা এবং উজ্জ্বলতা) থেকে কীভাবে পড়তে হয় তাও শিখেছি, আমরা বেশ কয়েকটি যোগাযোগ প্রোটোকল এবং পদ্ধতি, এনালগ, ডিজিটাল, 1-ওয়্যার এবং আই 2 সি ব্যবহার করি, এটি আমাদের ধরা পড়া শেষটি একটি OLED ডিসপ্লেতে ডেটা।

এখন, একটি MQTT প্রোটোকল ব্যবহার করে এই টিউটোরিয়ালে, আমরা সমস্ত ক্যাপচার করা ডেটা পাব, সেগুলি একটি IoT পরিষেবা, ThingSpeak.com এবং একটি মোবাইল অ্যাপে (Thingsview) পাঠিয়ে দেব, যেখানে আমরা ডেটা দিয়ে লগ ইন করতে এবং খেলতে পারি।

এখানে, আমাদের প্রকল্পের ব্লক ডায়াগ্রাম:

ছবি
ছবি

ধাপ 1: BoM - উপাদান বিল

  1. NodeMCU - US $ 8.39
  2. DHT22 তাপমাত্রা এবং আপেক্ষিক আর্দ্রতা সেন্সর - USD 9.95
  3. DS18B20 জলরোধী তাপমাত্রা সেন্সর - USD 5.95
  4. OLED ডিসপ্লে SSD1366- USD 8.99 (alচ্ছিক)
  5. LDR (1x)
  6. LEDs (1x) (চ্ছিক)
  7. পুশ বোতাম (1x)
  8. প্রতিরোধক 4K7 ওহম (2x)
  9. প্রতিরোধক 10K ওহম (1x)
  10. প্রতিরোধক 220 ওহম (1x)

ধাপ 2: Hw

দ্য এইচডব্লিউ
দ্য এইচডব্লিউ

আমরা এখানে যে Hw ব্যবহার করব তা মূলত টিউটোরিয়ালে ব্যবহৃত হয়: ESP তে মাইক্রোপিথন Jupyter ব্যবহার করে। সমস্ত HW সংযোগের জন্য এটি পড়ুন।

ব্যতিক্রম হল Servo, যে আমরা এই প্রকল্পে ব্যবহার করা হবে না।

উপরে আপনি সম্পূর্ণ HW দেখতে পারেন। সেখানে দেখানো হিসাবে ডিভাইসগুলি সংযুক্ত করুন।

ধাপ 3: মাইক্রোপিথন, REPL, Jupyter

মাইক্রোপাইথন, REPL, Jupyter
মাইক্রোপাইথন, REPL, Jupyter
মাইক্রোপাইথন, REPL, Jupyter
মাইক্রোপাইথন, REPL, Jupyter

আপনার ইএসপি ডিভাইসে একটি মাইক্রোপাইথন ইন্টারপ্রেটার লোড থাকতে হবে। একবার লোড হয়ে গেলে, আপনার উপলভ্য যেকোনো উপায়/আইডিই ব্যবহার করে আপনার ESP প্রোগ্রাম করা উচিত, যেমন:

  • REPL
  • জুপিটার নোটবুক
  • মু
  • ESPCut (শুধুমাত্র উইন্ডোজ)
  • … ইত্যাদি

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

আমি সাধারণত Jupyter নোটবুকে সমস্ত উন্নয়ন করি, এবং একবার আমি চূড়ান্ত কোড পেয়ে গেলে, আমি সেগুলি Geany এ অনুলিপি করি এবং Ampy ব্যবহার করে আমার ESP এ লোড করি।

ধাপ 4: সেন্সর

সেন্সর
সেন্সর

আসুন লাইব্রেরিগুলি ইনস্টল করি, জিপিআইও সংজ্ঞায়িত করি, সমস্ত সেন্সরের জন্য পৃথকভাবে বস্তু, ফাংশন তৈরি করি:

A. ডিএইচটি (তাপমাত্রা এবং আর্দ্রতা)

আসুন DHT লাইব্রেরি ইনস্টল করি এবং একটি বস্তু তৈরি করি:

dht থেকে DHT22 আমদানি করুন

মেশিন আমদানি থেকে পিন dht22 = DHT22 (পিন (12))

এখন, DHT সেন্সর পড়ার জন্য একটি ফাংশন তৈরি করুন:

def readDht ():

dht22.measure () ফেরত dht22.temperature (), dht22.humidity () DHT ফাংশন পরীক্ষা করুন

মুদ্রণ (readDht ())

ফলাফলটি উদাহরণস্বরূপ হওয়া উচিত:

(17.7, 43.4)

B. DS18B20 (বাহ্যিক তাপমাত্রা)

আসুন লাইব্রেরিগুলি ইনস্টল করি এবং একটি বস্তু তৈরি করি:

onewire, ds18x20 আমদানি করুন

আমদানির সময় # 1-ওয়্যার ডিভাইসটি কোন পিনের সাথে সংযুক্ত হবে তা নির্ধারণ করুন ==> পিন 2 (D4) dat = Pin (2) # onewire অবজেক্ট তৈরি করুন ds = ds18x20. DS18X20 (onewire. OneWire (dat)) বুতে ডিভাইসের জন্য স্ক্যান করুন

সেন্সর = ds.scan ()

মুদ্রণ ('পাওয়া ডিভাইস:', সেন্সর)

মুদ্রিত ফলাফলটি সত্যিই গুরুত্বপূর্ণ নয়, আমাদের যা লাগবে তা হল প্রথম সনাক্ত করা সেন্সর: সেন্সর [0]। এবং এখন, আমরা সেন্সর ডেটা পড়ার জন্য একটি ফাংশন তৈরি করতে পারি:

def readDs ():

ds.convert_temp () time.sleep_ms (750) ds.read_temp (সেন্সর [0])

তৈরি ফাংশন ব্যবহার করে সেন্সর পরীক্ষা করা সবসময় গুরুত্বপূর্ণ

মুদ্রণ (readDs ()) যদি আপনি একটি তাপমাত্রা মান পান, আপনার কোড সঠিক

17.5

C. এলডিআর (লুমিনোসিটি)

LDR আমাদের ESP এর এনালগ পিন ব্যবহার করবে (এটি ESP8266 এর ক্ষেত্রে শুধুমাত্র একটি এবং ESP32 এর ক্ষেত্রে বেশ কয়েকটি)।

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

আগের মতোই:

# আমদানি লাইব্রেরি

মেশিন আমদানি থেকে ADC # বস্তুর সংজ্ঞা দিন adc = ADC (0) একটি সাধারণ ফাংশন: adc.read () ADC মান পড়ার জন্য ব্যবহার করা যেতে পারে। কিন্তু মনে রাখবেন যে অভ্যন্তরীণ ADC 0 থেকে 3.23V এর মধ্যে ভোল্টেজকে 0 থেকে 1023 এর মধ্যে পরিবর্তিত করবে। ক্ষেত্রে 900) এবং ন্যূনতম আলো যা আমার ক্ষেত্রে 40। এই মানগুলি থাকলে আমরা 0 থেকে 100% উজ্জ্বলতার মান 40 থেকে 900 পর্যন্ত "মানচিত্র" করতে পারি। তার জন্য, আমরা একটি নতুন ফাংশন তৈরি করব

def readLdr ():

lumPerct = (adc.read ()-40)*(10/86) # শতকরা রূপান্তর ("মানচিত্র") রিটার্ন রাউন্ড (lumPerct)

আপনার মুদ্রণ (readLDR ()) ব্যবহার করে ফাংশনটি পরীক্ষা করা উচিত। ফলাফলটি o এবং 100 এর মধ্যে একটি পূর্ণসংখ্যা হওয়া উচিত।

D. পুশ-বোতাম (ডিজিটাল ইনপুট)

এখানে আমরা একটি ডিজিটাল সেন্সর হিসাবে একটি পুশ-বোতাম ব্যবহার করছি, কিন্তু এটি একটি অ্যাকচুয়েটরের একটি "প্রতিধ্বনি" হতে পারে (একটি পাম্প যা চালু/বন্ধ করা হয়েছিল, উদাহরণস্বরূপ)।

# একটি ইনপুট হিসাবে পিন 13 সংজ্ঞায়িত করুন এবং একটি অভ্যন্তরীণ পুল-আপ প্রতিরোধক সক্রিয় করুন:

button = Pin (13, Pin. IN, Pin. PULL_UP) # বাটন স্টেট পড়ার ফাংশন: def readBut (): return button.value ()

আপনি ফাংশন প্রিন্ট (readBut ()) পড়ার বোতামটি পরীক্ষা করতে পারেন। W/o টিপে ফলাফল "1" হওয়া উচিত। বোতাম টিপে ফলাফল "0" হওয়া উচিত

ধাপ 5: স্থানীয়ভাবে সমস্ত সেন্সর ডেটা ক্যাপচার এবং প্রদর্শন করা

স্থানীয়ভাবে সমস্ত সেন্সর ডেটা ক্যাপচার এবং প্রদর্শন করা
স্থানীয়ভাবে সমস্ত সেন্সর ডেটা ক্যাপচার এবং প্রদর্শন করা

এখন যেহেতু আমরা প্রতিটি সেন্সরের জন্য একটি ফাংশন তৈরি করেছি, আসুন শেষটি তৈরি করি যা তাদের সবগুলি একই সময়ে পড়বে:

def colectData ():

temp, hum, = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () return temp, hum, extTemp, lum, butSts এখন যদি আপনি ব্যবহার করেন

মুদ্রণ (colectData ())

সেন্সর থেকে প্রাপ্ত সমস্ত ডেটা অন্তর্ভুক্ত করে এমন একটি টুপলে পরিণত হবে:

(17.4, 45.2, 17.3125, 103, 1)

আমরা allyচ্ছিকভাবে, স্থানীয় প্রদর্শনে সেই ডেটাগুলি দেখাতে পারি:

# লাইব্রেরি আমদানি করুন এবং অবজেক্ট i2c তৈরি করুন

মেশিন আমদানি থেকে I2C i2c = I2C (scl = Pin (5), sda = Pin (4)) # আমদানি লাইব্রেরি এবং অবজেক্ট ওলেড আমদানি ssd1306 i2c = I2C (scl = Pin (5), sda = Pin (4)) oled তৈরি করুন = ssd1306. SSD1306_I2C (128, 64, i2c, 0x3c) # একটি ফাংশন তৈরি করুন: def displayData (temp, hum, extTemp, lum, butSts): oled.fill (0) oled.text ("Temp:" + str (temp) + "oC", 0, 4) oled.text ("Hum:" + str (hum) + "%", 0, 16) oled.text ("ExtTemp:" + str (extTemp) + "oC", 0, 29) oled.text ("Lumin:" + str (lum) + "%", 0, 43) oled.text ("Button:" + str (butSts), 0, 57) oled.show () # ফাংশন displayData (temp, hum, extTemp, lum, butSts) ব্যবহার করে ডেটা প্রদর্শন করুন

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

সুতরাং, প্রধান ফাংশন হবে:

# সব সেন্সর পড়ার প্রধান কাজ

def main (): # display data with a function led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off ()

সুতরাং, প্রধান () চালানো, আমরা ছবিতে দেখানো হিসাবে OLED- এ প্রদর্শিত সেন্সর ডেটা পাব।

ধাপ 6: ESP স্টার্ট-আপে লোকাল স্টেশন কোড চালানো

ESP স্টার্ট-আপে লোকাল স্টেশন কোড চালানো
ESP স্টার্ট-আপে লোকাল স্টেশন কোড চালানো

আমাদের ইএসপি দ্বারা কার্যকর করার জন্য আমরা একটি একক ফাইলে এতদূর বিকশিত হতে পারি।

আসুন যেকোনো টেক্সট এডিটর খুলি এবং এটিতে সমস্ত কোড অতীত করুন:

# সাধারণ লাইব্রেরি আমদানি করুন

মেশিন আমদানি থেকে পিন আমদানির সময় # পিন 0 নির্ধারণ করুন আউটপুট নেতৃত্বে = পিন (0, Pin. OUT) # DHT থেকে dht আমদানি DHT22 dht22 = DHT22 (পিন (12)) () ফেরত dht22.temperature (), dht22.humidity () # DS18B20 আমদানি onewire, ds18x20 # সংজ্ঞায়িত করুন যে কোন পিনটি 1-ওয়্যার ডিভাইস সংযুক্ত হবে ==> পিন 2 (D4) dat = Pin (2) # ওয়ানওয়াইয়ার তৈরি করুন অবজেক্ট ds = ds18x20. DS18X20 (onewire. OneWire (dat)) # বাস সেন্সরের ডিভাইসের স্ক্যান = ds.scan () # DS18B20 def readDs (): ds.convert_temp () time.sleep_ms (750) return বৃত্তাকার (ds.read_temp (সেন্সর [0]), 1) # LDR মেশিন আমদানি থেকে ADC # বস্তুর সংজ্ঞা দিন adc = ADC (0) # কার্যকারিতা পড়ার জন্য আলোকসজ্জা def readLdr (): lumPerct = (adc.read ()-40) *(10/86) # শতাংশে রূপান্তর ("মানচিত্র") রিটার্ন রাউন্ড (lumPerct) # একটি ইনপুট হিসাবে পিন 13 সংজ্ঞায়িত করুন এবং একটি অভ্যন্তরীণ পুল-আপ প্রতিরোধক সক্রিয় করুন: বোতাম = পিন (13, Pin. IN, Pin. PULL_UP) # বাটন স্টেট পড়ার ফাংশন: def readBut (): return button.value () # সব ডাটা পড়ার ফাংশন: ডিফ কোল ctData (): temp, hum, = readDht () extTemp = readDs () lum = readLdr () butSts = readBut () return temp, hum, extTemp, lum, butSts # import library and create object i2c from machine import I2C i2c = I2C (scl = Pin (5), sda = Pin (4)) # আমদানি লাইব্রেরি তৈরি করুন এবং বস্তু তৈরী করুন আমদানি ssd1306 i2c = I2C (scl = Pin (5), sda = Pin (4)) oled = ssd1306, 64, i2c, 0x3c) # একটি ফাংশন তৈরি করুন: def displayData (temp, hum, extTemp, lum, butSts): oled.fill (0) oled.text ("Temp:" + str (temp) + "oC", 0, 4) oled.text ("Hum:" + str (hum) + "%", 0, 16) oled.text ("ExtTemp:" + str (extTemp) + "oC", 0, 29) oled। টেক্সট ("Lumin:" + str (lum) + "%", 0, 43) oled.text ("Button:" + str (butSts), 0, 57) oled.show () # সকল সেন্সর পড়ার প্রধান কাজ def main (): # display data with a function led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () ''- ----- প্রধান ফাংশন চালান -------- '' প্রধান ()

এটি সংরক্ষণ করুন, উদাহরণস্বরূপ localData.py হিসাবে।

এই কোডটি সরাসরি আপনার টার্মিনালে চালানোর জন্য আপনার Ampy প্রয়োজন হবে।

প্রথমত, টার্মিনালে আসুন আমরা আমাদের সিরিয়াল পোর্ট Ampy কে অবহিত করি:

AMPY_PORT =/dev/tty. SLAB_USBtoUART রপ্তানি করুন

এখন, আমরা আমাদের ESP রুট ডিরেক্টরিতে থাকা ফাইলগুলি দেখতে পারি:

ampy ls

প্রতিক্রিয়া হিসাবে, আমরা boot.py পাব, এটিই প্রথম ফাইল যা সিস্টেমে চলবে।

এখন, আসুন আমাদের পাইথন স্ক্রিপ্ট LocalData.py কে /main.py হিসাবে লোড করতে Ampy ব্যবহার করি, তাই স্ক্রিপ্টটি বুটের পরেই চলবে:

ampy put localData.py /main /py

যদি আমরা এখন amp ls কমান্ড ব্যবহার করি, তাহলে আপনি ESP এর ভিতরে 2 টি ফাইল দেখতে পাবেন: boot.py এবং main.py

আপনার ইএসপি রিসেট করলে, প্রোগ্রামটি localData.py স্বয়ংক্রিয়ভাবে চালিত হবে, সেন্সর ডেটা প্রদর্শন করবে।

উপরের টার্মিনাল প্রিন্ট স্ক্রিন দেখায় আমরা কি করেছি।

উপরের কোড দিয়ে, ডিসপ্লে শুধুমাত্র একবার দেখানো হবে, কিন্তু আমরা main () ফাংশনে একটি লুপ সংজ্ঞায়িত করতে পারি, যা প্রতিটি নির্ধারিত সময়ের ব্যবধানে (PUB_TIME_SEC) ডেটা দেখাবে এবং উদাহরণস্বরূপ, যতক্ষণ না আমরা বোতাম টিপছি:

বাটন না চাপানো পর্যন্ত # লুপ ডেটা পাচ্ছে

while button.value (): led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () time.sleep (PUB_TIME_SEC)

PUB_TIME_SEC ভেরিয়েবলটি আপনার নমুনা চাওয়ার সময় ঘোষণা করতে হবে।

আমাদের কোড আরও উন্নত করার জন্য, এটা জানানো ভাল যে আমরা লুপ থেকে বেরিয়ে যাব, এর জন্য আমরা 2 টি নতুন সাধারণ ফাংশন সংজ্ঞায়িত করব, একটি ডিসপ্লে ক্লিয়ার করার জন্য এবং আরেকটি নির্দিষ্ট সময়ে LED ঝলকানোর জন্য।

# পরিষ্কার প্রদর্শন:

def displayClear (): oled.fill (0) oled.show () # একটি ব্লিঙ্ক ফাংশন তৈরি করুন def blinkLed (num): i for range (0, num): led.on () sleep (0.5) led.off () ঘুম (0.5)

সুতরাং, আমরা এখন, আমাদের প্রধান () ফাংশনটি পুনরায় লিখতে পারি:

যখন button.value ():

led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () time.sleep (PUB_TIME_SEC) blinkLed (3) displayClear ()

চূড়ান্ত কোডটি আমার GitHub: localData.py থেকে ডাউনলোড করা যেতে পারে এবং জুপাইটার নোটবুকটি সম্পূর্ণ কোডের বিকাশের জন্য ব্যবহৃত হয়: জুপিটার লোকাল ডেটা ডেভেলপমেন্ট।

ধাপ 7: স্থানীয় ওয়াইফাইতে ইএসপি সংযোগ করা

ESP স্থানীয় ওয়াইফাই এর সাথে সংযুক্ত করা হচ্ছে
ESP স্থানীয় ওয়াইফাই এর সাথে সংযুক্ত করা হচ্ছে

নেটওয়ার্ক মডিউলটি ওয়াইফাই সংযোগ কনফিগার করতে ব্যবহৃত হয়। দুটি ওয়াইফাই ইন্টারফেস রয়েছে, একটি স্টেশনের জন্য (যখন ESP8266 রাউটারের সাথে সংযুক্ত হয়) এবং একটি অ্যাক্সেস পয়েন্টের জন্য (অন্যান্য ডিভাইসের জন্য ESP8266 এর সাথে সংযোগ স্থাপনের জন্য)। এখানে, আমাদের ESP স্থানীয় নেটওয়ার্কের সাথে সংযুক্ত হবে। আসুন লাইব্রেরিতে কল করি এবং আমাদের নেটওয়ার্ক শংসাপত্রগুলি সংজ্ঞায়িত করি:

আমদানি নেটওয়ার্ক

WiFi_SSID = "আপনার SSID" WiFi_PASS = "আপনার পাসওয়ার্ড"

নীচের ফাংশনটি আপনার স্থানীয় নেটওয়ার্কের সাথে ESP সংযোগ করতে ব্যবহার করা যেতে পারে:

def do_connect ():

wlan = network। মুদ্রণ ('নেটওয়ার্ক কনফিগ:', wlan.ifconfig ())

ফাংশনটি চালানো, আপনি ফলস্বরূপ আইপি ঠিকানা পেতে পারেন:

do_connect ()

ফলাফল হবে:

নেটওয়ার্ক কনফিগ: ('10.0.1.2 ',' 255.255.255.0 ', '10.0.1.1', '10.0.1.1 ')

আমার ক্ষেত্রে, 10.0.1.2, ইএসপি আইপি ঠিকানা।

ধাপ 8: থিংসস্পিক

The ThingSpeak
The ThingSpeak

এই মুহুর্তে, আমরা শিখেছি কীভাবে সমস্ত সেন্সর থেকে ডেটা ক্যাপচার করতে হয়, সেগুলি আমাদের OLED- এ প্রদর্শন করে। এখন, সেই আইওটি প্ল্যাটফর্ম, থিংসস্পিক -এ সেই ডেটাগুলি কীভাবে পাঠানো যায় তা দেখার সময় এসেছে।

চল শুরু করি!

প্রথমে আপনার ThinkSpeak.com এ একটি অ্যাকাউন্ট থাকতে হবে। পরবর্তী, একটি চ্যানেল তৈরি করতে নির্দেশাবলী অনুসরণ করুন এবং আপনার চ্যানেল আইডি এবং API কী লিখুন।

উপরে আপনি 5 টি ক্ষেত্র দেখতে পাবেন যা আমাদের চ্যানেলে ব্যবহার করা হবে।

ধাপ 9: MQTT প্রোটোকল এবং ThingSpeak সংযোগ

MQTT প্রোটোকল এবং থিংসস্পিক সংযোগ
MQTT প্রোটোকল এবং থিংসস্পিক সংযোগ

MQTT হল একটি পাবলিশ/সাবস্ক্রাইব আর্কিটেকচার যা মূলত ব্যান্ডউইথ এবং পাওয়ার-সীমাবদ্ধ ডিভাইসগুলিকে ওয়্যারলেস নেটওয়ার্কের সাথে সংযুক্ত করার জন্য তৈরি করা হয়েছে। এটি একটি সহজ এবং লাইটওয়েট প্রোটোকল যা টিসিপি/আইপি সকেট বা ওয়েবসকেটের উপর চলে। MQTT ওভার ওয়েবসকেটস SSL দিয়ে সুরক্ষিত করা যায়। পাবলিশ/সাবস্ক্রাইব আর্কিটেকচার সার্ভারকে ক্রমাগত পোল করার প্রয়োজন ছাড়াই ক্লায়েন্ট ডিভাইসে বার্তাগুলিকে ধাক্কা দিতে সক্ষম করে।

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

ThingSpeak ™ এর URL Mqtt.thingspeak.com এবং পোর্ট 1883 এ MQTT ব্রোকার রয়েছে। থিংস্পিক ব্রোকার MQTT প্রকাশ এবং MQTT সাবস্ক্রাইব উভয়ই সমর্থন করে।

আমাদের ক্ষেত্রে, আমরা ব্যবহার করব: MQTT Publish

ছবি
ছবি

চিত্রটি বিষয় কাঠামোর বর্ণনা দেয়। লেখার API কী প্রকাশ করার জন্য প্রয়োজন। দালাল CONNACK এর সাথে একটি সঠিক সংযোগ অনুরোধ স্বীকার করে।

MQTT প্রোটোকলটি মাইক্রোপিথন বাইনারিতে একটি অন্তর্নির্মিত লাইব্রেরিতে সমর্থিত-এই প্রোটোকলটি আপনার ESP8266 থেকে WIFI- এর মাধ্যমে একটি বিনামূল্যে ক্লাউড ডাটাবেসে ডেটা পাঠাতে ব্যবহার করা যেতে পারে।

আসুন umqtt.simple লাইব্রেরি ব্যবহার করি:

umqtt.simple আমদানি MQTTClient থেকে

এবং আমাদের সার্ভার আইডি জেনে, আমাদের MQTT ক্লায়েন্ট অবজেক্ট তৈরি করা সম্ভব:

সার্ভার = "mqtt.thingspeak.com"

ক্লায়েন্ট = MQTTC ক্লায়েন্ট ("umqtt_client", সার্ভার)

এখন, আপনার থিংসস্পিক শংসাপত্রগুলি হাতে রয়েছে:

CHANNEL_ID = "আপনার চ্যানেল আইডি"

WRITE_API_KEY = "আপনার মূল এখানে"

আসুন আমাদের MQTT "টপিক" তৈরি করি:

বিষয় = "চ্যানেল/" + CHANNEL_ID + "/প্রকাশ/" + WRITE_API_KEY

আসুন আমাদের ডেটা থিংসস্পিক আইওটি পরিষেবাতে পাঠানো যাক, তৈরি ফাংশন ব্যবহার করে এবং নির্দিষ্ট ডেটা ভেরিয়েবলের সাথে এর প্রতিক্রিয়া যুক্ত করুন:

temp, hum, extTemp, lum, butSts = colectData ()

আপডেট করা সেই ভেরিয়েবলগুলির সাথে, আমরা আমাদের "এমকিউটিটি পেলোড" তৈরি করতে পারি:

payload = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+str (lum)+"& field5 ="+str (butSts)

এবং এটাই! আমরা থিন্সস্পিকে ডেটা পাঠাতে প্রস্তুত, কেবল নীচের কোডের 3 লাইন ব্যবহার করে:

client.connect ()

client.publish (বিষয়, পেলোড) client.disconnect ()

এখন, যদি আপনি আপনার চ্যানেলের পৃষ্ঠায় যান (উপরে আমার হিসাবে) আপনি দেখতে পাবেন যে 5 টি ক্ষেত্রের প্রতিটিতে আপনার সেন্সর সম্পর্কিত ডেটা থাকবে।

ধাপ 10: সেন্সর ডেটা লগার

সেন্সর ডেটা লগার
সেন্সর ডেটা লগার

এখন, আমরা জানি যে কোডের মাত্র কয়েকটি লাইনের সাহায্যে একটি IoT পরিষেবাতে ডেটা আপলোড করা সম্ভব, আসুন একটি নিয়মিত ব্যবধানে এটি স্বয়ংক্রিয়ভাবে করার জন্য একটি লুপ ফাংশন তৈরি করি (যা আমরা স্থানীয় ডেটা দিয়ে করেছি) )।

পূর্বে ঘোষিত একই ভেরিয়েবল (PUB_TIME_SEC) ব্যবহার করে, আমাদের চ্যানেলে লগ ইন করে ধারাবাহিকভাবে ডেটা ক্যাপচার করার একটি সহজ প্রধান কাজ হবে:

যখন সত্য:

temp, hum, extTemp, lum, butSts = colectData () payload = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+ str (lum)+"& field5 ="+str (butSts) client.connect () client.publish (topic, payload) client.disconnect () time.sleep (PUB_TIME_SEC)

মনে রাখবেন যে শুধুমাত্র "পেলোড" আপডেট করতে হবে, একবার "বিষয়" আমাদের চ্যানেলের শংসাপত্রের সাথে সম্পর্কিত এবং পরিবর্তন হবে না।

আপনার থিংসস্পিক চ্যানেল পৃষ্ঠাটি খুঁজছেন, আপনি লক্ষ্য করবেন যে প্রতিটি ক্ষেত্রের ডেটা ক্রমাগত লোড হচ্ছে। আপনি এলডিআর কভার করতে পারেন, টেম্প/হাম সেন্সরে হাত রাখতে পারেন, বোতাম টিপতে পারেন ইত্যাদি এবং ভবিষ্যতে বিশ্লেষণের জন্য চ্যানেল কিভাবে স্বয়ংক্রিয়ভাবে সেই ডেটাগুলিকে "লগ" করবে।

সাধারণত, ডেটা লগিংয়ের জন্য, আমাদের যতটা সম্ভব কম শক্তি ব্যবহার করার চেষ্টা করা উচিত, তাই, আমরা স্থানীয়ভাবে LED বা ডিসপ্লে ব্যবহার করব না। এছাড়াও, এটি ইএসপি ডিভাইসের সাথে সাধারণ, তাদের "গভীর ঘুমে" রাখুন, যেখানে মাইক্রোপ্রসেসর তার সর্বনিম্ন শক্তির অবস্থায় থাকবে যতক্ষণ না ডেটা ক্যাপচার এবং আইওটি প্ল্যাটফর্মে পাঠানোর সময় আসে।

কিন্তু, একবার এখানে আইডিয়া শেখার পর, আসুন আমরা ডিসপ্লে এবং এলইডি অন্তর্ভুক্ত করি যেমনটা আমরা আগে করেছি। এটি করা, আমাদের "লগার" ফাংশন হবে:

যখন button.value ():

led.on () temp, hum, extTemp, lum, butSts = colectData () displayData (temp, hum, extTemp, lum, butSts) led.off () temp, hum, extTemp, lum, butSts = colectData () payload = "field1 ="+str (temp)+"& field2 ="+str (hum)+"& field3 ="+str (extTemp)+"& field4 ="+str (lum)+"& field5 ="+str (butSts) ক্লায়েন্ট.connect () client.publish (topic, payload) client.disconnect () time.sleep (PUB_TIME_SEC) blinkLed (3) displayClear ()

সম্পূর্ণ মাইক্রোপাইথন স্ক্রিপ্ট এখানে পাওয়া যাবে: dataLoggerTS_EXT.py এবং Jupyter নোটবুক যা উন্নয়নের জন্য ব্যবহৃত হয়েছিল তা এখানেও পাওয়া যাবে: IoT ThingSpeak Data Logger EXT.ipynb।

ESP এ স্ক্রিপ্ট আপলোড করতে, আপনার টার্মিনালে কমান্ডটি ব্যবহার করুন:

ampy put dataLoggerTS.py /main.py

এবং ইএসপি - রিসেট বোতাম টিপুন। আপনার কাছে ESP ডেটা ক্যাপচার করা এবং ThingSpeak.com- এ লগ ইন করা থাকবে যতক্ষণ না নীচে চাপ দেওয়া হয় (LED 3 বার জ্বলজ্বল করার জন্য অপেক্ষা করুন এবং OLED বন্ধ করুন)।

ধাপ 11: থিংভিউ অ্যাপ

থিংভিউ অ্যাপ
থিংভিউ অ্যাপ

লগ করা ডেটা সরাসরি ThingSpeak.com সাইটে অথবা একটি APP এর মাধ্যমে দেখা যাবে, উদাহরণস্বরূপ, ThingsView!

থিংভিউ হল CINETICA দ্বারা তৈরি একটি অ্যাপ, যা আপনাকে আপনার থিংসস্পিক চ্যানেলগুলিকে সহজে উপস্থাপন করতে সক্ষম করে, শুধু চ্যানেল আইডি লিখুন এবং আপনি যেতে প্রস্তুত।

পাবলিক চ্যানেলগুলির জন্য, অ্যাপ্লিকেশনটি আপনার উইন্ডোজ সেটিংসকে সম্মান করবে: রঙ, টাইমস্কেল, চার্টের ধরন এবং ফলাফলের সংখ্যা। বর্তমান সংস্করণ লাইন এবং কলাম চার্ট সমর্থন করে, স্প্লাইন চার্ট লাইন চার্ট হিসাবে প্রদর্শিত হয়।

ব্যক্তিগত চ্যানেলগুলির জন্য, ডেটা ডিফল্ট সেটিংস ব্যবহার করে প্রদর্শিত হবে, কারণ শুধুমাত্র API কী দিয়ে ব্যক্তিগত উইন্ডোজ সেটিংস পড়ার কোন উপায় নেই।

থিংভিউ অ্যাপটি অ্যান্ড্রয়েড এবং আইফোনের জন্য ডাউনলোড করা যেতে পারে।

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

উপসংহার
উপসংহার

বরাবরের মতো, আমি আশা করি এই প্রকল্পটি অন্যদের ইলেকট্রনিক্সের উত্তেজনাপূর্ণ জগতে তাদের পথ খুঁজে পেতে সাহায্য করতে পারে!

বিস্তারিত এবং চূড়ান্ত কোডের জন্য, দয়া করে আমার গিটহাব ডিপোজিটরি দেখুন: IoT_TS_MQTT

আরো প্রকল্পের জন্য, দয়া করে আমার ব্লগে যান: MJRoBot.org

বিশ্বের দক্ষিণ দিক থেকে সালাম!

আমার পরবর্তী নির্দেশনায় দেখা হবে!

ধন্যবাদ, মার্সেলো

প্রস্তাবিত: