विषयसूची:

NODEMCU Lua ESP8266 रीयल टाइम क्लॉक (RTC) और EEPROM के साथ: 7 कदम
NODEMCU Lua ESP8266 रीयल टाइम क्लॉक (RTC) और EEPROM के साथ: 7 कदम

वीडियो: NODEMCU Lua ESP8266 रीयल टाइम क्लॉक (RTC) और EEPROM के साथ: 7 कदम

वीडियो: NODEMCU Lua ESP8266 रीयल टाइम क्लॉक (RTC) और EEPROM के साथ: 7 कदम
वीडियो: Real time Clock Using Esp8266 2024, जुलाई
Anonim
वास्तविक समय घड़ी (RTC) और EEPROM के साथ NODEMCU Lua ESP8266
वास्तविक समय घड़ी (RTC) और EEPROM के साथ NODEMCU Lua ESP8266

यदि आप डेटा लॉग रखना चाहते हैं तो सही समय प्राप्त करना आवश्यक है। इंटरनेट पर स्रोतों से समय निकालने के कई तरीके हैं।

आप पूछ सकते हैं कि अपने लिए समय निकालने के लिए ESP8266 का उपयोग क्यों न करें? ठीक है आप कर सकते हैं, इसकी अपनी आंतरिक आरटीसी (रीयल टाइम क्लॉक) है, लेकिन ईएसपी 8266 में 3 अलग-अलग ऑपरेटिंग घड़ी आवृत्तियां हैं - 52 मेगाहर्ट्ज जब यह बूट होता है, नियमित ऑपरेशन के दौरान 80 मेगाहर्ट्ज, और 160 मेगाहट्र्ज अगर बढ़ाया जाता है। यदि आपको अधिक सटीक समय की आवश्यकता है, विशेष रूप से लंबी अवधि में, तो एक बाहरी आरटीसी एक समाधान प्रदान कर सकता है। इन मॉड्यूल्स में पावर लॉस की स्थिति में बैटरी बैकअप भी होता है। एक आरटीसी बहुत सटीक नहीं है क्योंकि यह सेट होने के बाद से बीत चुके समय की गणना करता है और हालांकि यह अधिकांश अनुप्रयोगों के लिए कर सकता है, यह महत्वपूर्ण समय रखने के लिए पर्याप्त नहीं हो सकता है। एक एसएनटीपी टाइम सर्वर से सटीक समय प्राप्त करना संभव है जिससे यदि आवश्यक हो तो नियमित अंतराल पर आरटीसी को अपडेट किया जा सकता है।

DS1307 टाइनी RTC I2C मॉड्यूल (ऊपर) इन वस्तुओं का एक उदाहरण है और इसे eBay और अन्य आपूर्तिकर्ताओं पर £2 से कम में खरीदा जा सकता है। DS1302 और DS3231 जैसे अन्य भी हैं जो एक समान तरीके से काम करते हैं और 99p से ऊपर की ओर खर्च होते हैं।

DS1307 मॉड्यूल I2C इंटरफ़ेस का उपयोग करता है और ESP-01 के लिए इसे इस प्रकार जोड़ा जाना चाहिए:

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

एसडीए और एससीएल को बड़े ईएसपी8266 पर किसी भी आई/ओ पिन से जोड़ा जा सकता है (तदनुसार कोड बदलें)। इस मॉड्यूल पर केवल बाएं हाथ के पिन को जोड़ने की आवश्यकता है।

चरण 1: Google समय

गूगल टाइम
गूगल टाइम

Google से समय निकालने और कुछ इस तरह दिखने के कई उदाहरण हैं। जब आप GoogleTime.lua प्रोग्राम चलाते हैं तो आपको इस तरह का परिणाम मिलता है:

dofile("GoogleTime.lua")> समय: शुक्र, 15 दिसंबर 2017 11:19:45 GMT

इस पद्धति के साथ समस्या यह है कि आपको स्ट्रिंग प्रारूप में समय मिलता है और आपको स्ट्रिंग को घंटों, मिनट, सेकंड आदि के लिए अलग-अलग बिट्स में विभाजित करना पड़ता है। आरटीसी समय को एक विशेष प्रारूप यानी यूनिक्स टाइम स्टैम्प में स्वीकार करता है। आम आदमी के शब्दों में यह सेकंड की संख्या है जो गुरुवार 1 जनवरी 1970 से वर्तमान दिन और समय तक बीत चुकी है। UNIX युग (1970/01/01 00:00:00) का उपयोग अधिकांश कंप्यूटर ऑपरेटिंग सिस्टम द्वारा किया जाता है और बीता हुआ समय एक हस्ताक्षरित 32 बिट संख्या के रूप में संग्रहीत किया जाता है। इसका मतलब है कि यह सिस्टम 19 जनवरी 2038 तक काम करेगा जब इस तरह से स्टोर करने के लिए संख्या बहुत बड़ी हो जाएगी। एक समाधान संख्या को 64 बिट्स के रूप में संग्रहीत करना है, लेकिन अभी के लिए 32 बिट विधि पर्याप्त होगी।

आंतरिक आरटीसी पर 2015 जुलाई 9, 18:29:49 का समय निर्धारित करने के लिए आप कोड की इस पंक्ति का उपयोग करेंगे:

rtctime.set(१४३६४३०५८९, ०)

2 पैरामीटर सेकंड और माइक्रो सेकंड हैं।

आप NodeMCU Documentation को पढ़कर अधिक जानकारी प्राप्त कर सकते हैं।

चरण 2: एसएनटीपी टाइम सर्वर

एसएनटीपी टाइम सर्वर
एसएनटीपी टाइम सर्वर

इंटरनेट पर कई स्रोतों से सरल नेटवर्क टाइम प्रोटोकॉल (एसएनटीपी) प्रदान किया जाता है, और दुनिया भर के कई देशों में यह सेवा है।

प्रोग्राम, SNTPTime2.lua आंतरिक RTC पर समय निर्धारित करता है। जब आप अपना ESP8266 फ्लैश करते हैं तो आपको अपने निर्माण में rtctime और sntp मॉड्यूल की आवश्यकता होती है। प्रोग्राम सर्वर से सेकंड और माइक्रो सेकेंड में समय प्राप्त करता है और आंतरिक आरटीसी को rtctime.set(sec, usec) के साथ सेट करता है।

कार्यक्रम तब विभिन्न स्वरूपों में दिनांक और समय प्रदर्शित करता है।

दुनिया भर में कई 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

Google इन पतों पर टाइम सर्वर भी प्रदान करता है:

216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12

आपको उस देश से समय प्राप्त करने के लिए याद रखना होगा जिसमें आप हैं या आपको इसे विभिन्न विश्व समय क्षेत्रों के लिए संशोधित करना पड़ सकता है। साथ ही कुछ देशों में डेलाइट सेविंग टाइम होता है, इसलिए आपको इससे भी निपटना पड़ सकता है।

चरण 3: आरटीसी मॉड्यूल से समय निकालना

आरटीसी मॉड्यूल से समय प्राप्त करना
आरटीसी मॉड्यूल से समय प्राप्त करना

कार्यक्रम GetRTCTime.lua आंतरिक आरटीसी से समय पढ़ता है।

पहला भाग समय को पढ़ता है और इसे सेकंड और माइक्रोसेकंड में प्रदर्शित करता है।

दूसरा भाग इसे अधिक मानव पठनीय प्रारूप में परिवर्तित करता है।

कॉल करते समय tm = rtctime.epoch2cal(rtctime.get()) यह लौटाता है:

  • वर्ष - 1970 ~ 2038
  • चालू वर्ष में सोम - माह 1 ~ 12
  • चालू माह में दिन - दिन १ ~ ३१
  • घंटा
  • मिनट
  • सेकंड
  • चालू वर्ष में दिन - दिन १ ~ ३६६
  • वर्तमान सप्ताह में दिन - दिन १ ~ ७ (रविवार १ है)

प्रत्येक आइटम तक पहुँचा जा सकता है tm["day"], tm["year"]…

आप NodeMCU Documentation को पढ़कर अधिक जानकारी प्राप्त कर सकते हैं।

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 कमांड का उपयोग करके एक्सेस किया जाता है। हालांकि, ध्यान में रखना कुछ है, आरटीसी रजिस्टरों में डेटा बीसीडी प्रारूप (आधार 16) में संग्रहीत किया जाता है, इसलिए आपके कार्यक्रमों को इससे निपटना होगा। आरटीसी में समय और तारीख को 7 रजिस्टरों में रखा जाता है। आंतरिक आरटीसी पर, आरटीसीटाइम मॉड्यूल द्वारा बीसीडी रूपांतरणों का ध्यान रखा जाता है।

SetExtRTC.lua डेटा को BCD में कनवर्ट करता है और समय निर्धारित करता है।

ReadExtRTC.lua समय डेटा पढ़ता है और इसे प्रिंट करता है। नोट: डेटा हेक्साडेसिमल में मुद्रित किया जाता है।

मैंने प्रदर्शन को स्वरूपित करने में बहुत समय नहीं लगाया है क्योंकि आपके अपने विचार हो सकते हैं कि आप तिथि और समय के साथ क्या करना चाहते हैं। यह अपने सरलतम रूप में मूल इंजन है, ताकि आप चाहें तो इसे और विकसित कर सकें।

चरण 6: डेटा लॉगिंग

डेटा प्रविष्ट कराना
डेटा प्रविष्ट कराना

यदि आप आरटीसी मॉड्यूल को करीब से देखते हैं, तो आप देखेंगे कि उनके पास AT24C32 EEPROM IC या उनके समान निर्मित है, या आप ऊपर दिए गए 24C256 बोर्ड का उपयोग कर सकते हैं। इनमें से अधिकांश EEPROM IC में ऊपर के समान पिन आउट होते हैं। वे विभिन्न मात्रा में भंडारण के साथ आते हैं, लेकिन वे सभी एक ही तरह से एक्सेस किए जाते हैं। चूंकि AT24C32 पहले से ही बोर्ड पर टांका लगाया गया है, इसे सीधे बाहरी RTC के I2C से उपयोग किया जा सकता है।

यदि आपके पास केवल 24C256 IC या समान है, तो आप इसे ब्रेड बोर्ड में सेट कर सकते हैं, A1, A2 और A3 को Gnd, Vcc से 3.3V और SDA और SCL को I2C से कनेक्ट कर सकते हैं, WP को तैरते हुए छोड़ा जा सकता है। कुछ EEPROM IC केवल 5V पर काम करते हैं, इसलिए पहले संबंधित डेटा शीट की जांच करें।

ByteWR.lua EEPROM की मेमोरी लोकेशन 0x00 में 1 बाइट डेटा लिखता है और इसे वापस पढ़ता है।

Desiderata.lua प्रसिद्ध पाठ से EEPROM तक कुछ पंक्तियाँ लिखता है।

eeRead.lua EEPROM से डेटा पढ़ता है और उसका प्रिंट आउट लेता है।

नोट: इन कार्यक्रमों को अन्य EEPROM बोर्डों के साथ भी काम करना चाहिए।

चरण 7: निष्कर्ष

मैंने यह दिखाने की कोशिश की है कि डेटा लॉगिंग के लिए RTC और EEPROM कैसे काम करता है। यह आपके लिए आगे विकास करने के लिए सिर्फ एक शुरुआत है। आप विभिन्न उपकरणों को I2C बस से जोड़ सकते हैं जैसे कि प्रकाश सेंसर, बैरोमीटर का दबाव सेंसर, तापमान और आर्द्रता सेंसर और EEPROM पर डेटा रिकॉर्ड कर सकते हैं।

सिफारिश की: