- शुरू करने से पहले याद रखने योग्य बातें
- अवयव आवश्यक
- सर्किट आरेख
- ईमेल भेजने के लिए SMTP2GO सर्वर की स्थापना
- प्रोग्रामिंग AVR माइक्रोकंट्रोलर Atmega16 और ESP8266
- ईमेल भेजने के लिए ATmega16 प्रोग्रामिंग
- प्रोग्रामिंग ESP8266 NodeMCU
Atmega16 एक कम लागत वाला 8 बिट माइक्रोकंट्रोलर है और यह माइक्रोकंट्रोलर्स के पिछले संस्करण की तुलना में GPIO की अधिक संख्या के साथ आता है। इसमें UART, USART, SPI और I2C जैसे सभी आमतौर पर उपयोग किए जाने वाले संचार प्रोटोकॉल हैं। इसके व्यापक सामुदायिक समर्थन और सादगी के कारण रोबोटिक्स, ऑटोमोबाइल और ऑटोमेशन उद्योगों में इसके व्यापक अनुप्रयोग हैं।
Atmega16 किसी भी वायरलेस संचार प्रोटोकॉल जैसे वाई-फाई और ब्लूटूथ का समर्थन नहीं करता है जो IoT जैसे डोमेन में अपने आवेदन क्षेत्रों को सीमित करता है। इस सीमा को पार करने के लिए अन्य नियंत्रकों को बाधित किया जा सकता है जिनके पास वायरलेस प्रोटोकॉल हैं। नियंत्रक की संख्या है जो वायरलेस प्रोटोकॉल का समर्थन करता है जैसे कि व्यापक रूप से इस्तेमाल किए जाने वाले ESP8266,
आज हम Atmega16 को ESP8266 NodeMCU के साथ इंटरफेस करेंगे ताकि इसे इंटरनेट के माध्यम से वायरलेस तरीके से संवाद किया जा सके। ESP8266 NodeMCU व्यापक रूप से समुदाय समर्थन और आसानी से उपलब्ध पुस्तकालयों के साथ वाईफाई मॉड्यूल का उपयोग किया जाता है। इसके अलावा ESP8266 NodeMCU आसानी से Arduino IDE के साथ प्रोग्राम करने योग्य है। ESP8266 को किसी भी माइक्रोकंट्रोलर के साथ जोड़ा जा सकता है:
इस ट्यूटोरियल में, ESP8266 NodeMCU मॉड्यूल और Atmega16 का उपयोग करके ईमेल भेजा जाएगा । निर्देश Atmega16 द्वारा दिया जाएगा और जब ESP8266 निर्देश प्राप्त करता है, तो यह चयनित ईमेल प्राप्तकर्ता को एक ईमेल भेजेगा। ATmega16 और ESP8266 NodeMCU UART सीरियल संचार पर संवाद करेंगे। यद्यपि किसी भी संचार प्रोटोकॉल का उपयोग ATmega16 और ESP8266 NodeMCU जैसे SPI, I2C या UART को इंटरफेस करने के लिए किया जा सकता है।
शुरू करने से पहले याद रखने योग्य बातें
ध्यान दें कि इस परियोजना में इस्तेमाल किया गया Atmega16 माइक्रोकंट्रोलर 5V तर्क स्तर पर काम करता है जबकि ESP8266 NodeMCU 3.3V तर्क स्तर पर काम करता है । दोनों माइक्रोकंट्रोलर्स के तर्क स्तर अलग-अलग हैं जो Atmega16 और ESP8266 NodeMCU के बीच कुछ गलतफहमी पैदा कर सकते हैं या उचित तर्क स्तर बनाए नहीं रखने पर डेटा हानि भी हो सकती है।
हालाँकि, दोनों माइक्रोकंट्रोलर के डेटशीट से गुजरने के बाद, हमने पाया कि हम बिना किसी तर्क स्तर के बदलाव के इंटरफ़ेस कर सकते हैं, क्योंकि ESP8266 NodeMCU के सभी पिन वोल्टेज स्तर से 6V तक सहनशील हैं। तो यह 5V तर्क स्तर के साथ आगे बढ़ना ठीक है। इसके अलावा, Atmega16 की डेटशीट में स्पष्ट रूप से कहा गया है कि 2V से ऊपर का वोल्टेज स्तर तर्क स्तर '1' माना जाता है और ESP8266 NodeMCU 3.3 V पर चलता है, इसका मतलब है कि अगर ESP8266 NodeMCU 3.3V प्रसारित करता है तो Atmega16 इसे तर्क स्तर '1' के रूप में ले सकता है। तो तर्क स्तर शिफ्टिंग का उपयोग किए बिना संचार संभव होगा। यद्यपि आप 5 से 3.3V तक तर्क स्तर के शिफ्टर का उपयोग करने के लिए स्वतंत्र हैं।
यहां सभी ईएसपी 8266 संबंधित परियोजनाओं की जांच करें।
अवयव आवश्यक
- ESP8266 NodeMCU मॉड्यूल
- एटमेगा 16 माइक्रोकंट्रोलर आई.सी.
- 16Mhz क्रिस्टल थरथरानवाला
- दो 100nF कैपेसिटर
- दो 22pF कैपेसिटर
- बटन दबाओ
- जम्पर तार
- ब्रेड बोर्ड
- USBASP v2.0
- एलईडी (कोई भी रंग)
सर्किट आरेख
ईमेल भेजने के लिए SMTP2GO सर्वर की स्थापना
प्रोग्रामिंग शुरू करने से पहले हमें ESP8266 के माध्यम से मेल भेजने के लिए एक SMTP सर्वर की आवश्यकता होती है। बहुत सारे एसएमटीपी सर्वर ऑनलाइन उपलब्ध हैं। यहां, smtp2go.com को SMTP सर्वर के रूप में उपयोग किया जाएगा ।
इसलिए कोड लिखने से पहले, SMTP उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होगी। इन दो क्रेडेंशियल को प्राप्त करने के लिए नीचे दिए गए चरणों का पालन करें, जो ईमेल भेजने में सफलतापूर्वक एसएमटीपी सर्वर स्थापित करने को कवर करेंगे।
चरण 1: - एक मुफ्त खाते के साथ रजिस्टर करने के लिए "SMTP2GO फ्री आज़माएं" पर क्लिक करें।
चरण 2: - एक विंडो पॉप अप होगी, जहां आपको नाम, ईमेल आईडी और पासवर्ड जैसे कुछ क्रेडेंशियल दर्ज करने की आवश्यकता है।
चरण 3: - साइन अप करने के बाद, आपको दर्ज ईमेल पर एक सक्रियण अनुरोध प्राप्त होगा। ईमेल में सत्यापित लिंक से अपने खाते को सक्रिय करें और फिर अपनी ईमेल आईडी और पासवर्ड का उपयोग करके लॉगिन करें।
स्टेप 4: - लॉग इन करते ही आपको अपना SMTP यूजरनेम और SMTP पासवर्ड मिल जाएगा। याद रखें या आगे के उपयोग के लिए अपने नोटपैड पर कॉपी करें। इसके बाद this फिनिश’पर क्लिक करें।
स्टेप 5: - अब लेफ्ट एक्सेस बार पर, “Settings” पर और फिर “Users” पर क्लिक करें। यहां, आप SMTP सर्वर और PORT नंबर से संबंधित जानकारी देख सकते हैं। यह आमतौर पर इस प्रकार है:
उपयोगकर्ता नाम और पासवर्ड एनकोड करें
अब हमें AS64II कैरेक्टर सेट के साथ बेस 64 एनकोडेड फॉर्मेट में यूजरनेम और पासवर्ड बदलना होगा। बेस 64 एन्कोडेड प्रारूप में ईमेल और पासवर्ड को परिवर्तित करने के लिए BASE64ENCODE (https://www.base64encode.org/) नामक वेबसाइट का उपयोग करें। आगे उपयोग के लिए एन्कोडेड उपयोगकर्ता नाम और पासवर्ड की प्रतिलिपि बनाएँ:
इन चरणों को पूरा करने के बाद ESP8266 NodeMCU और Atmega16 IC की प्रोग्रामिंग के लिए आगे बढ़ें।
प्रोग्रामिंग AVR माइक्रोकंट्रोलर Atmega16 और ESP8266
प्रोग्रामिंग में दो प्रोग्राम शामिल होंगे, एक Atmega16 निर्देशों के प्रेषक के रूप में कार्य करने के लिए और दूसरा ESP8266 NodeMCU निर्देशों के रिसीवर के रूप में कार्य करने के लिए। इस ट्यूटोरियल के अंत में दोनों प्रोग्राम दिए गए हैं । Arduino IDE का उपयोग ESP8266 और USBasp प्रोग्रामर को जलाने के लिए और Atmel Studio का उपयोग Atmega16 को जलाने के लिए किया जाता है।
एक पुश बटन और एलईडी Atmega16 के साथ हस्तक्षेप किया जाता है ताकि जब हम पुश बटन दबाएं तो Atmega16 NodeMCU को निर्देश भेजेगा और NodeMCU तदनुसार ईमेल भेजेगा। एलईडी डेटा ट्रांसमिशन की स्थिति दिखाएगा। तो चलिए Atmega16 और फिर ESP8266 NodeMCU प्रोग्रामिंग शुरू करते हैं।
ईमेल भेजने के लिए ATmega16 प्रोग्रामिंग
ऑपरेटिंग आवृत्ति को परिभाषित करने और आवश्यक सभी पुस्तकालयों सहित शुरू करें। उपयोग की गई लाइब्रेरी Atmel Studio Package के साथ आती है।
#define F_CPU 16000000UL #include #include
इसके बाद, ESP8266 के साथ संवाद करने के लिए बॉड दर को परिभाषित किया जाना चाहिए । ध्यान दें कि बॉड दर दोनों नियंत्रकों अर्थात Atmega16 और NodeMCU के लिए समान होनी चाहिए। इस ट्यूटोरियल में, बॉड्रेट 9600 है।
#define BAUD_PRESCALE ((( F_CPU / (USART_BAUDRATE * 16UL)) - 1)
दो रजिस्टर UBRRL और UBRRH का उपयोग बॉड दर मूल्यों को लोड करने के लिए किया जाएगा। बॉड दर के निचले 8-बिट्स UBRRL में लोड होंगे और बॉड दर के ऊपरी 8-बिट्स UBRRH में लोड होंगे। सादगी के लिए, UART के आरंभीकरण का कार्य करें जहां बॉड दर को मूल्य से पारित किया जाएगा। UART के आरंभिक कार्य में शामिल होंगे:
- UCSRB रजिस्टर में ट्रांसमिशन और रिसेप्शन बिट्स सेट करना।
- UCSRC रजिस्टर में 8-बिट वर्ण आकार का चयन करना।
- UBRRL और UBRRH रजिस्टर में बॉड दर के निचले और ऊपरी बिट्स लोड हो रहे हैं।
शून्य UART_init (लंबे USART_BAUDRATE) { UCSRB - = (1 << RXEN) - (1 << TXEN); UCSRC - = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRL = BAUD_PRESCALE; UBRRH = (BAUD_PRESCALE >> 8); }
अगला कदम पात्रों को प्रेषित करने के लिए कार्य स्थापित करना होगा । इस कदम में खाली बफ़र के खत्म होने का इंतज़ार करना और फिर यूडीआर रजिस्टर में चार मूल्य लगाना शामिल है। चारु को केवल समारोह में पारित किया जाएगा।
शून्य UART_TxChar (char c) { जबकि (! (UCSRA & 1 <)
पात्रों को स्थानांतरित करने के बजाय, नीचे की तरह तार भेजने के लिए एक फ़ंक्शन बनाएं ।
शून्य UART_sendString (char * str) { अहस्ताक्षरित char s = 0; जबकि (str! = 0) { UART_TxChar (str); s ++; } }
में main () समारोह, फोन UART_init () प्रसारण शुरू करने के लिए। और NodeMCU को TEST स्ट्रिंग भेजकर इको टेस्ट करें ।
UART_init (9600); UART_sendString ("टेस्ट");
एलईडी और पुश बटन के लिए GPIO पिन को कॉन्फ़िगर करना शुरू करें।
DDRA - = (1 << 0); DDRA & = ~ (1 << 1); पोर्टा - = (1 << 1);
यदि पुश बटन दबाया नहीं गया है, तो एलईडी को चालू रखें और यदि पुश बटन दबाया जाता है, तो "SEND" कमांड को NodeMCU पर प्रसारित करना शुरू करें और एलईडी बंद करें।
if (bit_is_clear (PINA, 1)) { PORTA - = (1 << 0); _delay_ms (20); } और { PORTA & = ~ (1 << 0); _delay_ms (50); UART_sendString ("भेजें"); _delay_ms (1200); }
प्रोग्रामिंग ESP8266 NodeMCU
प्रोग्रामिंग NodeMCU में Atmega16 से कमांड का स्वागत और एक SMTP सर्वर का उपयोग करके ईमेल भेजना शामिल है।
सबसे पहले, WIFI लाइब्रेरी को शामिल करें क्योंकि ईमेल भेजने के लिए इंटरनेट का उपयोग किया जाएगा। सफल कनेक्शन के लिए अपने वाईफ़ाई ssid और पासवर्ड को परिभाषित करें । एसएमटीपी सर्वर को भी परिभाषित करें।
#शामिल
में सेटअप () समारोह, सेट बॉड दर वाईफ़ाई और प्रदर्शन करने के लिए आईपी पते के रूप में 9600 ATmega16 बॉड दर के समान और कनेक्ट।
सीरियल.बेगिन (9600); Serial.print ("कनेक्टिंग टू:"); सिरियल.प्रिंट (ssid); WiFi.begin (ssid, पासवर्ड); जबकि (WiFi.status ()! = WL_CONNECTED) { विलंब (500); सीरियल.प्रिंट ("।"); }
में पाश () समारोह, पढ़ा प्राप्त आरएक्स पिन पर बाइट्स और यह स्ट्रिंग रूप में परिवर्तित।
if (Serial.available ()> 0) { जबकि (Serial.available ()> 0 && index1 <6) { देरी (100); inChar = Serial.read (); inData = inChar; index1 ++; inData = '\ 0'; } variable.toUpperCase (); for (बाइट i = 0; मैं <6; i ++) { variable.concat (स्ट्रिंग (inData)); } Serial.print ("वैरिएबल है ="); सीरीयल.प्रिंट (चर); सीरियल.प्रिंट ("इंड्टा इज ="); सिरियल.प्रिंटल (इनडाटा); देरी (20); } स्ट्रिंग स्ट्रिंग = स्ट्रिंग (चर);
यदि प्राप्त करने वाले कमांड का मिलान किया जाता है, तो प्राप्तकर्ता को ईमेलइमेल () फ़ंक्शन पर कॉल करके ईमेल भेजें ।
if (string == "SEND") { sendEmail (); Serial.print ("मेल भेजा गया:"); Serial.println ("प्राप्तकर्ता"); सीरीयल.प्रिंट (""); }
SMTP सर्वर को सेटअप करना बहुत महत्वपूर्ण है और ऐसा किए बिना कोई भी ईमेल नहीं भेजा जा सकता है। यह भी ध्यान दें कि संचार करते समय, दोनों नियंत्रकों के लिए बॉड दर समान सेट करें।
तो यह है कि कैसे ESP8266 को IoT संचार के लिए सक्षम करने के लिए AVR माइक्रोकंट्रोलर के साथ हस्तक्षेप किया जा सकता है । नीचे दिए गए कार्य वीडियो को भी देखें।