সুচিপত্র:

NODEMCU Lua ESP8266 রিয়েল টাইম ক্লক (RTC) এবং EEPROM সহ: 7 টি ধাপ
NODEMCU Lua ESP8266 রিয়েল টাইম ক্লক (RTC) এবং EEPROM সহ: 7 টি ধাপ

ভিডিও: NODEMCU Lua ESP8266 রিয়েল টাইম ক্লক (RTC) এবং EEPROM সহ: 7 টি ধাপ

ভিডিও: NODEMCU Lua ESP8266 রিয়েল টাইম ক্লক (RTC) এবং EEPROM সহ: 7 টি ধাপ
ভিডিও: LDmicro 14: I2C LCD & DS3231 Real-Time Clock (Microcontroller PLC Ladder Programming with LDmicro) 2024, নভেম্বর
Anonim
NODEMCU Lua ESP8266 রিয়েল টাইম ক্লক (RTC) এবং EEPROM সহ
NODEMCU Lua ESP8266 রিয়েল টাইম ক্লক (RTC) এবং EEPROM সহ

আপনি যদি ডেটা লগ রাখতে চান তবে সঠিক সময় পাওয়া অপরিহার্য। ইন্টারনেটে উত্স থেকে সময় পাওয়ার বিভিন্ন উপায় রয়েছে।

আপনি জিজ্ঞাসা করতে পারেন কেন আপনার জন্য সময় রাখার জন্য ESP8266 ব্যবহার করবেন না? আচ্ছা আপনি এটা করতে পারেন, এর নিজস্ব অভ্যন্তরীণ RTC (রিয়েল টাইম ক্লক) আছে, কিন্তু ESP8266 এর 3 টি ভিন্ন অপারেটিং ক্লক ফ্রিকোয়েন্সি আছে - 52MHz যখন এটি বুট হয়, নিয়মিত অপারেশন চলাকালীন 80MHz এবং বুস্ট হলে 160MHz। যদি আপনার আরো সঠিক সময় রাখার প্রয়োজন হয়, বিশেষ করে দীর্ঘ সময়ের জন্য, তাহলে একটি বহিরাগত RTC একটি সমাধান প্রদান করতে পারে। বিদ্যুৎ ক্ষতির ক্ষেত্রে এই মডিউলগুলির ব্যাটারি ব্যাকআপও রয়েছে। একটি RTC ভয়ঙ্করভাবে সঠিক নয় কারণ এটি সেট করার পর থেকে অতিবাহিত সময় গণনা করে এবং যদিও এটি বেশিরভাগ অ্যাপ্লিকেশনের জন্য করতে পারে, এটি সমালোচনামূলক সময় রাখার জন্য যথেষ্ট ভাল নাও হতে পারে। একটি এসএনটিপি টাইম সার্ভার থেকে সঠিক সময় পাওয়া সম্ভব যা থেকে প্রয়োজনে নিয়মিত বিরতিতে আরটিসি আপডেট করা যায়।

DS1307 Tiny RTC I2C মডিউল (উপরে) এই আইটেমগুলির একটি উদাহরণ এবং b 2 এর কম দামে ইবে এবং অন্যান্য সরবরাহকারীদের কাছে কেনা যায়। DS1302 এবং DS3231 এর মতো আরও কিছু আছে যা একইভাবে কাজ করে এবং 99p থেকে উপরের দিকে খরচ হয়।

DS1307 মডিউল একটি I2C ইন্টারফেস ব্যবহার করে এবং একটি ESP-01 এর জন্য সংযুক্ত হওয়া উচিত:

Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4

এসডিএ এবং এসসিএল বড় ইএসপি 8266 এর আই/ও পিনের যেকোনো একটিতে সংযুক্ত হতে পারে (সেই অনুযায়ী কোড পরিবর্তন করুন)। এই মডিউলে কেবল বাম হাতের পিন সংযুক্ত করা দরকার।

ধাপ 1: গুগল সময়

গুগল টাইম
গুগল টাইম

গুগল থেকে সময় পাওয়ার এবং এরকম কিছু দেখার অনেক উদাহরণ রয়েছে। যখন আপনি GoogleTime.lua প্রোগ্রাম চালান তখন আপনি এইরকম একটি ফলাফল পাবেন:

dofile ("GoogleTime.lua")> সময়: শুক্র, 15 ডিসেম্বর 2017 11:19:45 GMT

এই পদ্ধতিতে সমস্যা হল যে আপনি স্ট্রিং ফরম্যাটে সময় পান এবং আপনাকে স্ট্রিংটিকে তার পৃথক বিটে ঘণ্টা, মিনিট, সেকেন্ড ইত্যাদিতে বিভক্ত করতে হবে। সাধারণ মানুষের ভাষায় এটি সেকেন্ডের সংখ্যা যা ১ লা জানুয়ারী বৃহস্পতিবার থেকে বর্তমান দিন এবং সময় পর্যন্ত অতিবাহিত হয়েছে। UNIX Epoch (1970/01/01 00:00:00) বেশিরভাগ কম্পিউটার অপারেটিং সিস্টেম দ্বারা ব্যবহৃত হয় এবং অতিবাহিত সময় একটি স্বাক্ষরিত 32 বিট সংখ্যা হিসাবে সংরক্ষণ করা হয়। এর মানে হল যে এই সিস্টেমটি 1938 সালের 2038 পর্যন্ত কাজ করবে যখন সংখ্যাটি এইভাবে সঞ্চয় করার জন্য অনেক বড় হয়ে যাবে। একটি সমাধান হল সংখ্যাটি 64 বিট হিসাবে সংরক্ষণ করা, তবে আপাতত 32 বিট পদ্ধতিটি যথেষ্ট।

অভ্যন্তরীণ আরটিসিতে 2015 জুলাই 9, 18:29:49 সময় নির্ধারণ করতে আপনি এই লাইন কোডটি ব্যবহার করবেন:

rtctime.set (1436430589, 0)

2 প্যারামিটারগুলি সেকেন্ড এবং মাইক্রো সেকেন্ড।

আপনি NodeMCU ডকুমেন্টেশন পড়ে আরও তথ্য পেতে পারেন।

ধাপ 2: এসএনটিপি টাইম সার্ভার

এসএনটিপি টাইম সার্ভার
এসএনটিপি টাইম সার্ভার

সিম্পল নেটওয়ার্ক টাইম প্রোটোকল (এসএনটিপি) ইন্টারনেটের অনেক উৎস থেকে প্রদান করা হয়, এবং বিশ্বের অনেক দেশে এই পরিষেবা রয়েছে।

প্রোগ্রাম, SNTPTime2.lua অভ্যন্তরীণ RTC- এ সময় নির্ধারণ করে। আপনি যখন আপনার ESP8266 ফ্ল্যাশ করবেন তখন আপনার বিল্ডে rtctime এবং sntp মডিউল থাকতে হবে। প্রোগ্রামটি সার্ভার থেকে সেকেন্ড এবং মাইক্রো সেকেন্ডে সময় পায় এবং rtctime.set (sec, usec) দিয়ে অভ্যন্তরীণ RTC সেট করে।

প্রোগ্রাম তারপর বিভিন্ন ফরম্যাটে তারিখ এবং সময় প্রদর্শন করে।

সারা বিশ্বে অনেক SNTP সার্ভার আছে এবং কিছু নিম্নরূপ:

  • sntp.sync ({"216.239.35.0"},
  • sntp.sync ({"0.uk.pool.ntp.org", "0.uk.pool.ntp.org"},
  • sntp.sync ({"3.uk.pool.ntp.org", "143.210.16.201"},
  • sntp.sync ({"0.uk.pool.ntp.org", "1.uk.pool.ntp.org", "3.uk.pool.ntp.org"},

কোডের উপরের সমস্ত লাইন SNTPTime2.lua প্রোগ্রামে প্রতিস্থাপিত হতে পারে।

নীচের ঠিকানায় আরও SNTP সার্ভার রয়েছে যা আবার প্রোগ্রামে ব্যবহার করা যেতে পারে।

93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com

গুগল এই ঠিকানায় সময় সার্ভার প্রদান করে:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

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

ধাপ 3: আরটিসি মডিউল থেকে সময় পাওয়া

আরটিসি মডিউল থেকে সময় পাওয়া
আরটিসি মডিউল থেকে সময় পাওয়া

GetRTCTime.lua প্রোগ্রামটি অভ্যন্তরীণ RTC থেকে সময় পড়ে।

প্রথম অংশটি সময় পড়ে এবং সেকেন্ড এবং মাইক্রোসেকেন্ডে এটি প্রদর্শন করে।

দ্বিতীয় অংশ এটিকে আরও বেশি মানুষের পাঠযোগ্য বিন্যাসে রূপান্তরিত করে।

tm = rtctime.epoch2cal (rtctime.get ()) কল করার সময় এটি ফিরে আসে:

  • বছর - 1970 ~ 2038
  • সোম - চলতি বছরে 1 ~ 12 মাস
  • দিন - চলতি মাসে 1 ~ 31 দিন
  • ঘন্টা
  • মিনিট
  • সেকেন্ড
  • দিন - চলতি বছরে 1 ~ 366 দিন
  • wday - চলতি সপ্তাহে দিন 1 ~ 7 (রবিবার হল 1)

প্রতিটি আইটেম টিএম ["দিন"], টিএম ["বছর"] হিসাবে অ্যাক্সেস করা যেতে পারে …

আপনি NodeMCU ডকুমেন্টেশন পড়ে আরও তথ্য পেতে পারেন।

DisplaySNTPtime.lua একটি LCD 128 x 64 OLED ডিসপ্লেতে তারিখ এবং সময় দেখানোর একটি আরও বিস্তৃত উপায়, কারণ এটি সহজেই সংযুক্ত এবং এই প্রোগ্রামগুলির সাথে ব্যবহার করা যেতে পারে।

ধাপ 4: আরটিসি ইউজার মেমরি

সময় পালন থেকে একটু ভিন্নতা হল ESP8266 এর অভ্যন্তরীণ RTC এর 128 x 32 বিট মেমরি ঠিকানা রয়েছে যা প্রোগ্রামার অ্যাক্সেস করতে পারে। এগুলি বিশেষভাবে দরকারী কারণ তারা ESP8266 এর গভীর ঘুমের চক্র থেকে বেঁচে থাকতে পারে। তাদের ব্যবহার নিয়ন্ত্রণ করা এবং দুর্ঘটনাক্রমে সেগুলি ওভাররাইট করা হয়নি তা নিশ্চিত করার দায়িত্ব প্রোগ্রামারের।

আমি RTCmem.lua অন্তর্ভুক্ত করেছি, একটি সহজ প্রোগ্রাম যা এর ব্যবহার প্রদর্শন করে। আপনার বিল্ডে আপনার rtcmem মডিউল থাকা দরকার।

ধাপ 5: বাহ্যিক আরটিসি মডিউল

বাহ্যিক আরটিসি মডিউল
বাহ্যিক আরটিসি মডিউল

বহিরাগত RTC মডিউলগুলি I2C ইন্টারফেসের মাধ্যমে ESP8266 এর সাথে সংযোগ স্থাপন করে, যা শুধুমাত্র দুটি I/O পিন ব্যবহার করে এবং তাই ESP-01 এবং অন্যান্য ESP8266 ডিভাইসের সাথে কাজ করে।

RTC মডিউল ঠিকানা 0x68 এবং সাধারণ I2C কমান্ড ব্যবহার করে অ্যাক্সেস করা হয়। যাইহোক, মনে রাখার মতো কিছু আছে, RTC রেজিস্টারে ডেটা BCD ফরম্যাটে (বেস 16) সংরক্ষণ করা হয়, তাই আপনার প্রোগ্রামগুলিকে এটি মোকাবেলা করতে হবে। আরটিসির মধ্যে 7 টি রেজিস্টারে সময় এবং তারিখ সংরক্ষণ করা হয়। অভ্যন্তরীণ RTC- এ, BCD রূপান্তরগুলি rtctime মডিউল দ্বারা যত্ন নেওয়া হয়।

SetExtRTC.lua ডেটাকে বিসিডিতে রূপান্তর করে এবং সময় নির্ধারণ করে।

ReadExtRTC.lua সময়ের তথ্য পড়ে এবং প্রিন্ট করে। দ্রষ্টব্য: ডেটা হেক্সাডেসিমালে মুদ্রিত হয়।

আমি ডিসপ্লে ফরম্যাট করতে অনেক সময় ব্যয় করিনি কারণ তারিখ এবং সময় নিয়ে আপনি কী করতে চান সে সম্পর্কে আপনার নিজস্ব ধারণা থাকতে পারে। এটি সহজতম আকারে মৌলিক ইঞ্জিন, যাতে আপনি চাইলে এটিকে আরও উন্নত করতে পারেন।

ধাপ 6: ডেটা লগিং

তথ্য লগিং
তথ্য লগিং

আপনি যদি আরটিসি মডিউলগুলি ঘনিষ্ঠভাবে দেখেন, আপনি লক্ষ্য করবেন যে তাদের একটি AT24C32 EEPROM IC বা অনুরূপ অন্তর্নির্মিত রয়েছে, অথবা আপনি উপরের হিসাবে একটি 24C256 বোর্ড ব্যবহার করতে পারেন। এই EEPROM IC গুলির অধিকাংশেরই উপরের মতই পিন আউট আছে। তারা বিভিন্ন পরিমাণে স্টোরেজ নিয়ে আসে, কিন্তু সেগুলি সব একইভাবে অ্যাক্সেস করা যায়। যেহেতু AT24C32 ইতিমধ্যেই বোর্ডে বিক্রি করা হয়েছে, এটি সরাসরি বাহ্যিক RTC এর I2C থেকে ব্যবহার করা যেতে পারে।

যদি আপনার শুধুমাত্র একটি 24C256 IC বা অনুরূপ থাকে, আপনি এটি একটি রুটি বোর্ডে সেট করতে পারেন, A1, A2 এবং A3 কে Gnd, Vcc থেকে 3.3V এবং SDA এবং SC থেকে I2C, WP কে ভাসিয়ে রেখে যেতে পারেন। কিছু EEPROM IC শুধুমাত্র 5V এ কাজ করে, তাই প্রথমে প্রাসঙ্গিক ডেটা শীটটি পরীক্ষা করুন।

ByteWR.lua EEPROM- এর 0x00 মেমরির লোকেশনে 1 বাইট ডেটা লিখে তা আবার পড়ে।

Desiderata.lua বিখ্যাত পাঠ্য থেকে EEPROM পর্যন্ত কয়েকটি লাইন লিখেছে।

eeRead.lua EEPROM থেকে তথ্য পড়ে এবং প্রিন্ট করে।

দ্রষ্টব্য: এই প্রোগ্রামগুলি অন্যান্য EEPROM বোর্ডগুলির সাথেও কাজ করা উচিত।

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

আমি দেখানোর চেষ্টা করেছি কিভাবে ডাটা লগ করার জন্য RTC এবং EEPROM কাজ করে। এটি আপনার আরও বিকাশের জন্য একটি স্টার্টার। আপনি I2C বাসে বিভিন্ন ডিভাইস যেমন লাইট সেন্সর, ব্যারোমেট্রিক প্রেসার সেন্সর, তাপমাত্রা এবং আর্দ্রতা সেন্সর সংযুক্ত করতে পারেন এবং EEPROM- এ ডেটা রেকর্ড করতে পারেন।

প্রস্তাবিত: