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

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড

গত কয়েক বছরে স্মার্ট হোম ডিভাইসের সংখ্যা ২০১৫ সালে ৩ লাখের নিচে থেকে ২০২০ সালে প্রায় ১.২ বিলিয়ন হয়ে উঠেছে। এবং ২০২১ সালে ১.৫ বিলিয়ন হওয়ার আশা।

তাই সম্ভবত আপনার বাড়িতে অন্তত কিছু স্মার্ট ডিভাইস আছে, যেহেতু ২০২১ সালের মধ্যে প্রতি বাড়িতে গড়ে ৮.৭টি স্মার্ট ডিভাইস থাকবে।

ডেভেলপাররা এই ক্ষেত্রে কিছু সুবিধা পায়, কারণ আমরা নিজেরা স্মার্ট হোম ডিভাইস বানাতে পারি।

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

এই নিবন্ধে আমরা দেখব কিভাবে একটি Raspberry Pi, একটি LCD স্ক্রিন, এবং কিছু লাইন কোড দিয়ে বাইরের আবহাওয়া বা নির্দিষ্ট লোকেশনের আবহাওয়া মনিটর করা যায়।

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড

যেহেতু এটি একটি DIY (Do It Yourself) প্রজেক্ট, তাই কিছু প্রিরেকুইজিট আছে।

প্রিরেকুইজিটস

  • Raspberry Pi 3 (বা উচ্চতর)
  • LCD স্ক্রিন
  • কানেকশন ওয়ায়ার
  • পটেনশিওমিটার (ঐচ্ছিক)
  • ব্রেডবোর্ড (ঐচ্ছিক)

কিভাবে বানাবেন

সব কিছু হাতে পাওয়া যেতে সাথে সাথে শুরু করি। ধাপে ধাপে যাব।

ধাপ I - বেস কনফিগারেশন

প্রথম ধাপ হলো বেসিক সেটআপ এবং সব কম্পোনেন্ট ভেরিফিকেশন।

এই ডেমোতে আমরা ClimaCell Weather API ব্যবহার করবো আবহাওয়ার ডেটা প্রোভাইডার হিসেবে, কারণ এতে আয়ার কোয়ালিটি সহ অনেক ইন্ডিকেটর রয়েছে।

API ব্যবহার করতে তাদের প্ল্যাটফর্মে একাউন্ট খুলে একটি API কী নিতে হবে, যা রিকোয়েস্ট সাইন করার জন্য ব্যবহার করা হবে।

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড
ClimaCell API লিমিট

একাউন্ট খোলা ফ্রি এবং ১০০ ঘন্টা API কলের লিমিট দেয়, যা আমাদের প্রজেক্টের জন্য যথেষ্ট।

API কী পাওয়ার পর হার্ডওয়্যার কনফিগারেশনে যাব এবং LCD স্ক্রিনকে Raspberry Pi-র সাথে কানেক্ট করব। ওয়ায়ার কানেকশন করার সময় Raspberry Pi অফ রাখুন।

Raspberry Pi 3-এর পিন লেয়াউট নিচের ছবিতে দেওয়া আছে।

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড
Raspberry Pi 3 পিনস

LCD এবং ডেভেলপমেন্ট বোর্ডের মধ্যে ওয়ায়ার কানেকশন নিচের মতো:

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড
Raspberry Pi এবং LCD-এর কানেকশন

এই কানেকশন LCD স্ক্রিনকে ফুল ব্রাইটনেস এবং ফুল কনট্রাস্টে রাখবে। ব্রাইটনেস সমস্যা নয়, কিন্তু কনট্রাস্ট সমস্যা—কারণ ক্যারেক্টারগুলো দেখা যাবে না। তাই কমপক্ষে একটি পটেনশিওমিটার লাগবে কনট্রাস্ট সেট করার জন্য।

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড
সাম্যিক

এখন Raspberry Pi অন করুন এবং LCD স্ক্রিন চলে আসতে পারে। ভেরিয়েবল রেজিস্ট্যান্স দিয়ে কনট্রাস্ট কন্ট্রোল করা যাবে।

ধাপ II - প্রজেক্ট কনফিগারেশন

প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসেবে NodeJS ব্যবহার করব। যদি Raspberry-এ NodeJS ইনস্টলড না থাকে, তবে এই নির্দেশনা অনুসরণ করুন।

একটি নতুন ফোল্ডারে npm init -y কমান্ড দিয়ে একটি নতুন npm প্যাকেজ সেটআপ করুন, তারপর npm install lcd node-fetch দিয়ে এই ২টি ডিপেন্ডেন্সি ইনস্টল করুন।

  • lcd — LCD স্ক্রিনের সাথে কমিউনিকেশন জন্য
  • node-fetch — ClimaCell API-তে HTTP রিকোয়েস্ট করার জন্য

আমরা বলেছি API কী দরকার। এটি সরাসরি মেইন কোডে রাখতে পারেন বা config.json ফাইল তৈরি করে সেখানে রাখতে পারেন।

config.json

{ "cc_key": "<your_ClimaCell_API_key>" }

শেষে, প্রজেক্টের মেইন ফাইল তৈরি করে উপরের সব কিছুর ইমপোর্ট করুন।

// * Dependencies
const Lcd = require("lcd");
const fs = require("fs");
const fetch = require("node-fetch");
// * Globals
const { cc_key } = JSON.parse(fs.readFileSync("./config.json"));

ধাপ III - LCD

lcd মডিউল দিয়ে স্ক্রিনে লেখা খুব সহজ। এই লাইব্রেরি ডিভাইসের সাথে কমিউনিকেশনের একটি অ্যাবস্ট্রাকশন লেয়ার হিসেবে কাজ করে, তাই প্রতিটি কমান্ড আলাদাভাবে ম্যানেজ করতে হয় না।

আমাদের LCD স্ক্রিনের পুরো কোড:

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড
RAW

প্রথমে lcd অবজেক্ট তৈরি করে ব্যবহার করা পিনগুলো পাস করুন।

cols এবং rows কীগুলো LCD ডিসপ্লের কলাম এবং রো সংখ্যা বোঝায়। এখানে 16x2 ব্যবহার করা হয়েছে। আপনার LCD যদি ৮ কলাম এবং ১ রো হয়, তবে ১৬ এবং ২ বদলে আপনার মান বসান।

ডিসপ্লে-এ কিছু লিখতে নিচের দুটি মেথড ক্রমাগত ব্যবহার করতে হয়:

  • lcd.setCursor() — লিখা শুরু করার পজিশন সিলেক্ট করুন
  • lcd.print()

এই দুটি ফাংশনকে একটি প্রমিসে র‍্যাপ করা হয়েছে যাতে async/await কীওয়ার্ড ব্যবহার করা যায়।

এখন আপনি এই ফাংশন ব্যবহার করে ডিসপ্লে-এ কিছু প্রিন্ট করতে পারেন। writeToLcd(0,0,'Hello World') দিয়ে প্রথম রোয়ের প্রথম কলাম থেকে "Hello World" প্রিন্ট হবে।

ধাপ IV - আবহাওয়ার ডেটা

পরবর্তী ধাপ হলো আবহাওয়ার ডেটা নিয়ে এসে ডিসপ্লে-এ প্রিন্ট করা।

ClimaCell অনেক আবহাওয়ার ডেটা দেয়, আয়ার কোয়ালিটি, পোলেন, ফায়ার ইত্যাদিও। ডেটা বিশাল, কিন্তু মনে রাখবেন আপনার LCD-তে ১৬ কলাম এবং ২ রো—মাত্র ৩২ ক্যারেক্টার।

আপনি যদি আরও ডেটা দেখাতে চান এবং লিমিট ছোট লাগে, তবে স্ক্রল ইফেক্ট ব্যবহার করতে পারেন।

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড

এই ডেমোতে সিম্পল রাখা হয়েছে এবং LCD-এ নিচের ডেটা প্রিন্ট করা হবে:

  • কারেন্ট ডেট (ঘণ্টা, মিনিট, সেকেন্ড)
  • তাপমাত্রা
  • বৃষ্টিপাত אינтенসিটি
Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড
RAW

ClimaCell-এ নির্দিষ্ট লোকেশনের ডেটা পেতে জিওগ্রাফিক্যাল কোঅর্ডিনেট (ল্যাটিটিউড এবং লองিটিউড) পাঠাতে হয়।

আপনার শহরের কোঅর্ডিনেট পেতে latlong.net-এর মতো ফ্রি টুল ব্যবহার করুন এবং সেগুলো config.json-এ API কী সহ সেভ করুন বা সরাসরি কোডে লিখুন।

এই সময় API কল থেকে রিটার্ন হওয়া ডেটা ফরম্যাট:

{
  lat: 45.658,
  lon: 25.6012,
  temp: { value: 17.56, units: 'C' },
  precipitation: { value: 0.3478, units: 'mm/hr' },
  observation_time: { value: '2020-06-22T16:30:22.941Z' }
}

এই অবজেক্ট থেকে temp এবং precipitation ভ্যালু বের করে প্রথম ও دوم রোয়ে প্রিন্ট করা যায়।

ধাপ V - র‍্যাপ আপ

এখন শুধু আমাদের স্ক্রিপ্টের লজিক লিখে, নতুন ডেটা আসার সাথে সাথে LCD আপডেট করা বাকি।

Node, Raspberry Pi, এবং LCD দিয়ে ওয়েদার স্টেশন বানান: ধাপে ধাপে গাইড
RAW

আবহাওয়ার ডেটা প্রতি ৫ মিনিটে আপডেট হয়। কিন্তু ClimaCell ১০০ API কল/ঘন্টা লিমিট দিয়েছে, তাই আমরা প্রতি মিনিটে আপডেট করতে পারি।

কারেন্ট টাইমের জন্য দুটি অপশন:

  • observation_time প্রোপার্টি ব্যবহার করে ডেটা প্রাপ্তির সময় দেখান, বা
  • রিয়েল ক্লক বানিয়ে কারেন্ট টাইম দেখান।

দ্বিতীয় অপশন বেছে নেওয়া হয়েছে। আপনি যেভাবে ইচ্ছা করুন।

উপরের ডানে টাইম প্রিন্ট করার জন্য সার্টিং কলাম ক্যালকুলেট করতে হয়: total columns - text length। ডেট ৮ ক্যারেক্টার, ১৬ কলাম থাকায় কলাম ৮ থেকে শুরু করতে হবে।

LCD সেটিং অ্যাসিনক্রোনাস, তাই lcd.on() মেথড ব্যবহার করলে LCD ইনিশিয়ালাইজ হয়ে রেডি হলে জানা যায়।

এমবেডেড সিস্টেমের 베스트 প্র্যাকটিস: ব্যবহৃত রিসোর্স ক্লোজ এবং ফ্রি করুন। তাই প্রোগ্রাম বন্ধ হলে LCD বন্ধ করার জন্য SIGINT ইভেন্ট ব্যবহার করা হয়েছে। অন্যান্য ইভেন্ট:

  • SIGUSR1 এবং SIGUSR2 — নোডমন রিস্টার্টের মতো "kill pid" ক্যাচ করতে
  • uncaughtException — আনক্যাচড এক্সেপশন ক্যাচ করতে

ধাপ VI - চিরকাল চালান

স্ক্রিপ্ট সম্পূর্ণ। প্রোগ্রাম রান করাতে পারি। কিন্তু শেষে একটি কাজ বাকি।

আপনি SSH বা HDMI+mOnItOr দিয়ে Raspberry Pi-তে কানেক্টেড থাকবেন। টার্মিনাল বন্ধ করলে প্রোগ্রাম বন্ধ হয়ে যাবে। ডিভাইস অফ করে আবার অন করলে স্ক্রিপ্ট অটো স্টার্ট হবেনা, ম্যানুয়ালি চালাতে হবে।

এই সমস্যা সমাধান করতে pm2-এর মতো প্রসেস ম্যানেজার ব্যবহার করুন।

ধাপগুলো:

  1. sudo npm install pm2 -g — pm2 ইনস্টল করুন
  2. sudo pm2 startup — pm2-এর জন্য স্টার্টআপ স্ক্রিপ্ট বানান
  3. pm2 start index.js — অ্যাপ্লিকেশন শুরু করুন
  4. pm2 save — সার্ভার রিস্টার্ট জুড়ে প্রসেস লিস্ট সংরক্ষণ করুন

এখন বোর্ড রিবুট করলে ডিভাইস রেডি হলে স্ক্রিপ্ট অটোমেটিক্যালি শুরু হবে।

উপসংহার

এখন থেকে আপনি আপনার নতুন ডিভাইস যেভাবে চান কাস্টোমাইজ করতে পারেন। আপনার জন্য এই আবহাওয়ার ডেটা গুরুত্বপূর্ণ হলে (বা ClimaCell-এর অন্য ডেটা: আয়ার পল্যুশন, পোলেন, ফায়ার ইন্ডেক্স, রোড রিস্ক), একটি কাস্টম কেস বানিয়ে Raspberry Pi এবং LCD ডিসপ্লে রাখুন। ব্যাটারি যোগ করে ডিভাইসটি বাড়িতে রাখুন।

Raspberry Pi একটি পারসোনাল কম্পিউটারের মতো, তাই আর্ডুইনো-এর মতো মাইক্রোকন্ট্রোলারের চেয়ে এতে অনেক বেশি কিছু করা যায়। এতে ঘরের অন্যান্য ডিভাইস সহজে কম্বাইন করা যায়।

  1. আইফোন XS, XS Max এবং XR-এ রিচেবিলিটি (Reachability) ব্যবহার করার পদ্ধতি

  2. DDC/CI কী এবং কীভাবে এটি ব্যবহার করবেন

  3. উইন্ডোজ ৮ এবং ১০-এ উইন্ডোজ আপডেট ট্রাবলশুটার ব্যবহার করার পদ্ধতি

  4. ম্যাক টাস্ক ম্যানেজার: এক্টিভিটি মনিটর দক্ষতার সাথে ব্যবহার করুন