विषयसूची:
- चरण 1: हम किस OLED मॉड्यूल का उपयोग करने जा रहे हैं?
- चरण 2: I2C संक्षेप में
- चरण 3: आवश्यक मॉड्यूल और घटक
- चरण 4: Arduino के लिए OLED डिस्प्ले मॉड्यूल को वायरिंग करना
- चरण 5: प्रदर्शन मॉड्यूल का पता ढूँढना
- चरण 6: OLED मॉड्यूल पर डेटा प्रदर्शित करने के लिए आवश्यक पुस्तकालय स्थापित करना
- चरण 7: प्रदर्शन मॉड्यूल को प्रारंभ करना
- चरण 8: एक साधारण पाठ प्रदर्शित करें
- चरण 9: मूल आकृतियाँ बनाना
- चरण 10: चित्र बनाना
- चरण 11: समस्या निवारण
- चरण 12: आगे क्या करना है?
वीडियो: OLED डिस्प्ले और Arduino के साथ मज़ा: 12 कदम (चित्रों के साथ)
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:19
मुझे पूरा यकीन है कि आपने OLED डिस्प्ले तकनीक के बारे में जरूर सुना होगा। यह अपेक्षाकृत नया है और पुरानी एलसीडी तकनीक की तुलना में बेहतर गुणवत्ता प्रदान करता है। इस ट्यूटोरियल में हम बाजार में उपलब्ध सबसे आम सिंगल कलर OLED डिस्प्ले मॉड्यूल में से एक पर डेटा प्रदर्शित करने के लिए आवश्यक चरणों की समीक्षा करना चाहते हैं। मैं इस मॉड्यूल पर डेटा प्रदर्शित करने के लिए संबंधित एडफ्रूट लाइब्रेरी द्वारा प्रदान की गई कार्यक्षमताओं को समझाने की कोशिश करूंगा।
चरण 1: हम किस OLED मॉड्यूल का उपयोग करने जा रहे हैं?
OLED मॉड्यूल विभिन्न आकारों और विशेषताओं में उपलब्ध हैं। इस ट्यूटोरियल में हम एक मोनो कलर 128x64 OLED मॉड्यूल का उपयोग करने जा रहे हैं। इस प्रकार का मॉड्यूल निम्नलिखित आकारों में उपलब्ध है (जिस क्रम में आप चित्रों पर देखते हैं):
- 128x64
- 128x32
- 96x16
- 64x48
- 64x32
चूंकि ये सभी मॉड्यूल संचार के साधन के रूप में I2C प्रोटोकॉल का समर्थन करते हैं, इन सभी का कोड और वायरिंग बिल्कुल समान है। अंतर केवल इतना है कि आपको अपने कोड पर डिस्प्ले के आकार पर विचार करना होगा ताकि आप जो सामग्री प्रदर्शित करने जा रहे हैं, वह उस पर ठीक से फिट हो जाए।
चरण 2: I2C संक्षेप में
इंटर-एकीकृत सर्किट (IIC) जिसे आमतौर पर I2C (I वर्ग C) कहा जाता है, जिसे फिलिप्स द्वारा 80 के दशक में एक डेटा एक्सचेंज बस के रूप में विकसित किया गया था, जिसका उपयोग किसी डिवाइस के सेंट्रल प्रोसेसिंग यूनिट (CPU) या माइक्रोकंट्रोलर यूनिट (MCU) के बीच डेटा ट्रांसफर करने के लिए किया जाता था। परिधीय चिप्स। यह मूल रूप से टीवी एप्लिकेशन के लिए लक्षित था। इसकी सादगी के कारण, यह इतना लोकप्रिय हो गया कि कुछ समय बाद यह सीपीयू और एमसीयू और परिधीय उपकरणों के लिए डेटा ट्रांसफर के प्राथमिक तंत्रों में से एक बन गया, जो एक ही पीसीबी बोर्ड का आवश्यक हिस्सा नहीं हैं और तार के माध्यम से इससे जुड़े हैं (जैसे सेंसर, प्रदर्शन मॉड्यूल, आदि)।
I2C में दो तार से बनी एक संचार बस होती है जो एक मास्टर और कई दास उपकरणों के बीच द्विदिश डेटा हस्तांतरण का समर्थन करती है। आमतौर पर मास्टर नोड बस को नियंत्रित करने का प्रभारी होता है - जो वास्तव में सीरियल क्लॉक लाइन (SCL) पर एक सिंक्रोनाइज़ेशन सिग्नल उत्पन्न करके किया जाता है। यह एक संकेत है जो स्थानांतरण के दौरान मास्टर द्वारा लगातार भेजा जाएगा और बस से जुड़े अन्य सभी नोड्स अपने संचार को सिंक करने और बस की गति का पता लगाने के लिए इसका उपयोग करेंगे। डेटा को मास्टर और स्लेव के बीच सीरियल डेटा (SDA) लाइन के माध्यम से स्थानांतरित किया जाता है। ट्रांसमिशन स्पीड 3.4 एमबीपीएस तक हो सकती है। सभी डिवाइस जो I2C के माध्यम से डेटा ट्रांसफर करना चाहते हैं, उनका एक अनूठा पता होना चाहिए और डिवाइस के कार्य के आधार पर ट्रांसमीटर या रिसीवर के रूप में काम कर सकते हैं। उदाहरण के लिए OLED डिस्प्ले मॉड्यूल एक रिसीवर होता है जो कुछ डेटा को स्वीकार करता है और उन्हें प्रदर्शित करता है, जबकि एक तापमान सेंसर एक ट्रांसीवर होता है जो I2C बस के माध्यम से कैप्चर किया गया तापमान भेजता है। आम तौर पर एक मास्टर डिवाइस वह उपकरण होता है जो बस में डेटा ट्रांसफर शुरू करता है और ट्रांसफर की अनुमति देने के लिए क्लॉक सिग्नल उत्पन्न करता है। उस स्थानांतरण के दौरान, इस मास्टर द्वारा संबोधित किसी भी उपकरण को दास माना जाता है और उस डेटा को पढ़ता है।
जब कोई नोड कुछ डेटा भेजना चाहता है, तो डेटा का पहला बाइट रिसीवर का पता होना चाहिए और फिर वास्तविक डेटा बाद में आता है। इसका मतलब यह है कि I2C (जैसे I2C OLED डिस्प्ले मॉड्यूल) का उपयोग करके किसी आउटपुट डिवाइस को डेटा भेजने के लिए हमें पहले उसका I2C पता ढूंढना चाहिए और अगले चरणों में हम पहले यही करेंगे।
यदि आप I2C बस के बारे में विवरण और सिद्धांतों के बारे में अधिक जानना चाहते हैं, तो आप निम्नलिखित संदर्भों का उपयोग कर सकते हैं:
www.i2c-bus.org
learn.sparkfun.com/tutorials/i2c
चरण 3: आवश्यक मॉड्यूल और घटक
यहां आप उन घटकों की सूची पा सकते हैं जिनकी आपको इस ट्यूटोरियल को पूरा करने के लिए आवश्यकता होगी:
ईबे लिंक:
- 1 x Arduino Uno:
- 1 x OLED मॉड्यूल 128x64:
- 4 एक्स ड्यूपॉन्ट केबल:
- 1 एक्स मिनी सोल्डरलेस ब्रेडबोर्ड:
Amazon.com लिंक:
- 1 x Arduino Uno:
- 1 x OLED मॉड्यूल 128x64:
- 4 एक्स ड्यूपॉन्ट केबल:
- 1 एक्स मिनी सोल्डरलेस ब्रेडबोर्ड:
चरण 4: Arduino के लिए OLED डिस्प्ले मॉड्यूल को वायरिंग करना
I2C सक्षम उपकरणों के बारे में एक महत्वपूर्ण नोट यह है कि जिस तरह से आपको उन्हें Arduino से कनेक्ट करना चाहिए, वे सभी समान हैं। ऐसा इसलिए है क्योंकि Arduino अपना I2C संचार केवल विशिष्ट पिनों पर चलाता है। इस ट्यूटोरियल में मैं Arduino Uno का उपयोग कर रहा हूँ। Arduino Uno पिन A5 को SCK और A4 को SDA के रूप में उपयोग करता है। इसलिए हम OLED डिस्प्ले मॉड्यूल को Arduino Uno से जोड़ सकते हैं जैसा कि योजनाबद्ध दृश्य में दिखाया गया है। जैसा कि आप मेरे OLED डिस्प्ले मॉड्यूल से लिए गए चित्र में देख सकते हैं, VCC और GND के लिए कनेक्टर योजनाबद्ध दृश्य से भिन्न हैं। यह सुनिश्चित करने के लिए कि आप इसे सही तरीके से कनेक्ट कर रहे हैं, अपने मॉड्यूल पर पिन के लेबल की जांच करना याद रखें।
हमें केवल 4 पिनों की आवश्यकता है जिन्हें नीचे के रूप में जोड़ा जाना चाहिए:
Arduino VCC -> OLED मॉड्यूल VCC
Arduino GND -> OLED मॉड्यूल GND
Arduino 4 -> OLED मॉड्यूल SDA
Arduino 5 -> OLED मॉड्यूल SCK
चरण 5: प्रदर्शन मॉड्यूल का पता ढूँढना
I2C सक्षम डिवाइस से कनेक्ट करने के पहले चरण के रूप में, आपके पास मॉड्यूल का पता होना चाहिए। ऐसा करने के लिए, मॉड्यूल को अपने Arduino पर वायर करने के बाद, आपको बस संलग्न कोड को अपने Arduino पर अपलोड करना चाहिए। इस कोड में वायर लाइब्रेरी शामिल है जो कि Arduino IDE के साथ शामिल एक लाइब्रेरी है जो I2C संचार को संभालती है। यह कनेक्टेड I2C उपकरणों को स्कैन करने का प्रयास करता है और सीरियल पोर्ट के माध्यम से उनका पता आपके कंप्यूटर पर भेजता है। तो आप Arduino IDE में सीरियल मॉनिटर टूल के जरिए इसके आउटपुट को एक्सेस कर सकते हैं। मूल संस्करण Arduino Playground पर उपलब्ध है)। इसके अलावा आप इसे मेरे ऑनलाइन Arduino Editor में अधिक पठनीय तरीके से देख सकते हैं। इस कोड के चलने के दौरान स्क्रीन पर कुछ भी प्रदर्शित होने की अपेक्षा न करें।
जैसा कि आप चित्र पर देख सकते हैं, मेरा मॉड्यूल 0x3C को संबोधित करने के लिए बाध्य है। आम तौर पर एक विशिष्ट उत्पाद लाइन में सभी उपकरणों (उदाहरण के लिए सभी 128x64 OLED मॉड्यूल) का एक ही पता होता है।
I2C उपकरणों का पता 1 से 126 तक सीमित है। यह कोड केवल क्रम में (किसी भी डेटा को प्रेषित किए बिना) प्रत्येक डिवाइस से कनेक्ट करने का प्रयास करता है और फिर जांचता है कि दिए गए पते से कनेक्ट होने पर अंतर्निहित लाइब्रेरी द्वारा कोई त्रुटि रिपोर्ट की गई है या नहीं। यदि कोई त्रुटि नहीं है, तो पते को कनेक्ट करने के लिए उपलब्ध मॉड्यूल के रूप में प्रिंट करता है। यह भी ध्यान दिया जाना चाहिए कि पहले 15 पते आरक्षित हैं, इसलिए यह उन पर कूदता है और इस सीमा से ऊपर के लोगों को प्रिंट करता है। याद रखें कि इन I2C मॉड्यूल का पता डिवाइस पर हार्ड-कोडेड है और इसे बदला नहीं जा सकता है। इसलिए यह एक अच्छा विचार होगा कि इसे कहीं लिख लें या मॉड्यूल पर एक लेबल लगा दें जब आप इसे अपने लैब शेल्फ पर वापस रखने जा रहे हों ताकि अगली बार, स्कैनर कोड चलाना आवश्यक न हो। हालाँकि यह एक जटिल प्रक्रिया नहीं है;)
चरण 6: OLED मॉड्यूल पर डेटा प्रदर्शित करने के लिए आवश्यक पुस्तकालय स्थापित करना
वायर लाइब्रेरी I2C उपकरणों के साथ निम्न स्तर के संचार को संभाल सकती है। जब आप डेटा को पढ़ने/लिखने के लिए किसी विशिष्ट डिवाइस से कनेक्ट करना चाहते हैं, तो आम तौर पर आप उस कंपनी द्वारा प्रदान की गई लाइब्रेरी का उपयोग करेंगे जिसने मूल रूप से उस मॉड्यूल को बनाया है। यह पुस्तकालय दिए गए मॉड्यूल के साथ सभी I2C संचार विवरणों को संभालता है और हमें अपने व्यवसाय पर अधिक ध्यान केंद्रित करने देता है जो इस मामले में डेटा को हमारे इच्छित तरीके से प्रदर्शित कर रहा है।
इस तरह के डिस्प्ले मॉड्यूल के मूल संस्करण का निर्माण करने वाली कंपनी Adafruit, इन मोनोक्रोम डिस्प्ले पर डेटा प्रदर्शित करने के लिए Adafruit SSD1306 नामक एक पुस्तकालय प्रदान करती है। इसलिए कोडिंग शुरू करने से पहले, हमें इस लाइब्रेरी को Arduino IDE में लाइब्रेरी मैनेजर (स्केच के माध्यम से सुलभ> लाइब्रेरी शामिल करें> लाइब्रेरी प्रबंधित करें… मेनू) के माध्यम से स्थापित करना होगा। एडफ्रूट जीएफएक्स लाइब्रेरी नामक एक और लाइब्रेरी भी है जो अधिक निम्न स्तर की ग्राफिकल सामग्री को संभालती है और आंतरिक रूप से एडफ्रूट एसएसडी 1306 द्वारा उपयोग की जाती है। जैसा कि आप तस्वीरों में देख सकते हैं, आपको दोनों को अपने Arduino IDE पर इंस्टॉल करना होगा।
चरण 7: प्रदर्शन मॉड्यूल को प्रारंभ करना
डिस्प्ले मॉड्यूल पर आरेखण Adafruit_SSD1306 नामक वर्ग में लिपटा हुआ है। इस वर्ग की परिभाषा Adafruit पुस्तकालय पर है, इसलिए हमें पहले उस पुस्तकालय को शामिल करने की आवश्यकता है। फिर हमें पहले इस वर्ग के एक उदाहरण को इंस्टेंट करना होगा। इस वर्ग का निर्माता पोर्ट नंबर लेता है जिस पर डिस्प्ले को रीसेट किया जा सकता है जो पिन 4 (एससीके से जुड़ा) है। कोड का यह भाग फ़ाइल की शुरुआत में स्थित होना चाहिए (सेटअप () और लूप () फ़ंक्शन से बाहर)।
#शामिल
Adafruit_SSD1306 डिस्प्ले(4);
अब सेटअप () फ़ंक्शन के अंदर हमें अपने I2C पते को नीचे के रूप में पास करके डिस्प्ले ऑब्जेक्ट के शुरुआती फ़ंक्शन को कॉल करना चाहिए (SSD1306_SWITCHCAPVCC लाइब्रेरी में पावर स्रोत के प्रकार को निर्दिष्ट करने वाला एक निरंतर मान है):
व्यर्थ व्यवस्था() {
डिस्प्ले.बेगिन (SSD1306_SWITCHCAPVCC, 0x3C); डिस्प्ले.डिस्प्ले (); } शून्य लूप () {} // लूप अभी के लिए खाली हो सकता है
अब डिस्प्ले ऑब्जेक्ट तैयार है और हम इसके फंक्शन्स (जैसे डिस्प्ले.राइट (), डिस्प्ले.ड्रालाइन, आदि) को कॉल कर सकते हैं। महत्वपूर्ण नोट यह है कि जब भी हम अपने डिस्प्ले ऑब्जेक्ट पर कॉल करके कुछ आकर्षित करते हैं, तो हमें हार्डवेयर स्तर पर वास्तविक ड्राइंग बनाने के लिए डिस्प्ले.डिस्प्ले () फ़ंक्शन को कॉल करने की आवश्यकता होती है। यह मुख्य रूप से इस तथ्य के कारण है कि हम जिस ड्राइंग फ़ंक्शन को कॉल करते हैं, वह प्रदर्शन कारणों से "स्मृति में" प्रदर्शन के प्रतिनिधित्व को अपडेट करता है। यह वास्तव में स्मृति में परिवर्तनों को कैश करता है। इसलिए हमें हमेशा याद रखना चाहिए कि जब हम स्क्रीन पर कुछ बनाना समाप्त करते हैं तो डिस्प्ले () फ़ंक्शन को कॉल करना चाहिए।
डिस्प्ले.राइट (…); // मेमोरी में अपडेट रहता है
डिस्प्ले.ड्रालाइन (…); // मेमोरी में अपडेट रहता है। डिस्प्ले.डिस्प्ले (); // डिस्प्ले हार्डवेयर में सभी परिवर्तनों को फ्लश करता है
यदि आप इस चरण में अपना कोड अपलोड करने का प्रयास करते हैं, तो आप देखेंगे कि Adafruit Industries का लोगो प्रदर्शित होगा। आपको आश्चर्य हो सकता है कि किसने इसे आकर्षित करने के लिए कहा है! वास्तव में एडफ्रूट पुस्तकालय यही करता है। यह इस कंपनी के लोगो के साथ मॉड्यूल की मेमोरी (डिस्प्ले हार्डवेयर की मेमोरी में प्रतिनिधित्व) को इनिशियलाइज़ करता है। यदि आप यह नहीं देखना चाहते हैं कि आरंभीकरण के दौरान, आप अपने सेटअप फ़ंक्शन में display.display() को कॉल करने से ठीक पहले display.clearDisplay() फ़ंक्शन को कॉल करने का प्रयास कर सकते हैं। यह फ़ंक्शन, जैसा कि इसके नाम से पता चलता है, डिस्प्ले को पूरी तरह से साफ़ करता है।
#शामिल
Adafruit_SSD1306 डिस्प्ले(4); शून्य सेटअप () { display.begin (SSD1306_SWITCHCAPVCC, 0x3C); डिस्प्ले.क्लियरडिस्प्ले (); डिस्प्ले.डिस्प्ले (); } शून्य लूप () { }
Adafruit_SSD1306 पुस्तकालय के प्रलेखन के आधार पर, आप इस वर्ग द्वारा प्रदान किए गए विभिन्न कार्यों का उपयोग प्रदर्शन पर आकर्षित करने या सीधे उस पर पिक्सेल में हेरफेर करने के लिए कर सकते हैं। अगले अनुभागों में हम उनमें से प्रत्येक के लिए एक उदाहरण प्रस्तुत करने का प्रयास करेंगे ताकि आपको यह पता चल सके कि यह किस प्रकार काम करता है। इनमें से अधिकांश उदाहरण केवल एक साधारण स्थिर सामग्री प्रदर्शित करेंगे, इसलिए हम उन्हें केवल अपने सेटअप () फ़ंक्शन (आरंभीकरण कोड के बाद) के अंदर रख सकते हैं। ऐसा करने से यह केवल एक बार चल पाता और वहीं रहता है।
चरण 8: एक साधारण पाठ प्रदर्शित करें
टेक्स्ट प्रदर्शित करने के लिए, हम लाइब्रेरी के साधारण डिस्प्ले.प्रिंट्लन () फ़ंक्शन का उपयोग कर सकते हैं। यह टेक्स्ट को एक स्ट्रिंग के रूप में स्वीकार करता है और इसे प्रदर्शित करने का प्रयास करता है। यह जानना महत्वपूर्ण है कि हमें पुस्तकालय को यह बताना होगा कि हम डिस्प्ले पर टेक्स्ट को कहां प्रस्तुत करने जा रहे हैं। डिस्प्ले पर प्रत्येक पिक्सेल में एक निर्देशांक होता है जो एक्स और वाई के साथ निर्दिष्ट होता है। एक्स बाएं से दाएं बढ़ता है और वाई ऊपर से नीचे तक बढ़ता है। स्क्रीन का ऊपरी बायां कोना (X=0, Y=0) है और निचला दायां कोना (X=127, Y=63) है। मैंने पहली तस्वीर में कोनों के निर्देशांक नोट किए। हम यह निर्दिष्ट करने के लिए display.setCursor() फ़ंक्शन का उपयोग कर सकते हैं कि डिस्प्ले पर हम टेक्स्ट कहां प्रदर्शित करने जा रहे हैं।
पाठ का एक अन्य गुण उसका रंग है। हम निम्नलिखित नमूने पर प्रदर्शित display.setTextColor() का उपयोग करके रंग निर्दिष्ट कर सकते हैं।
डिस्प्ले.क्लियरडिस्प्ले ();
display.setTextColor (सफेद); डिस्प्ले.सेट कर्सर (३५, ३०); display.println ("हैलो वर्ल्ड!"); डिस्प्ले.डिस्प्ले ();
हम सिंगल कैरेक्टर को प्रदर्शित करने के लिए डिस्प्ले.राइट () फंक्शन का भी उपयोग कर सकते हैं। यह एक वर्ण कोड को uint8_t प्रकार के रूप में स्वीकार करता है और स्ट्रिंग पर उस कोड के अनुरूप वर्ण प्रदर्शित करता है। एक उदाहरण के रूप में, यदि हम इस फ़ंक्शन का उपयोग करके समान स्ट्रिंग प्रदर्शित करना चाहते हैं, तो हम निम्नलिखित स्निपेट का उपयोग कर सकते हैं:
डिस्प्ले.क्लियरडिस्प्ले ();
display.setTextColor (सफेद); डिस्प्ले.सेट कर्सर (३५, ३०); डिस्प्ले.राइट (72); डिस्प्ले.राइट (101); डिस्प्ले.राइट (108); डिस्प्ले.राइट (108); डिस्प्ले.राइट (111); डिस्प्ले.राइट (32); डिस्प्ले.राइट (87); डिस्प्ले.राइट (111); डिस्प्ले.राइट (114); डिस्प्ले.राइट (108); डिस्प्ले.राइट (100); डिस्प्ले.राइट (33); डिस्प्ले.डिस्प्ले ();
सफेद पृष्ठभूमि के साथ काले रंग में पाठ बनाना भी संभव है। ऐसा करने के लिए, आपको नीचे दिए अनुसार display.setTextColor फ़ंक्शन को कॉल करना होगा:
डिस्प्ले.क्लियरडिस्प्ले ();
// सफेद बैकग्राउंड डिस्प्ले के साथ रंग को काला करने के लिए सेट करता है। सेटटेक्स्टकोलर (ब्लैक, व्हाइट); डिस्प्ले.सेट कर्सर (25, 30); display.println ("उल्टा पाठ!"); डिस्प्ले.डिस्प्ले ();
आपके पास display.setTextSize() फ़ंक्शन का उपयोग करके टेक्स्ट का आकार सेट करने का विकल्प भी है। यह एक पूर्णांक संख्या को एक आकार के रूप में स्वीकार करता है। संख्या जितनी अधिक होगी, पाठ उतना ही बड़ा होगा। सबसे छोटा आकार 1 है जो टेक्स्ट का डिफ़ॉल्ट आकार है। निम्नलिखित कोड "ए" अक्षर को 6 विभिन्न आकारों में लिखने का प्रयास करता है:
डिस्प्ले.क्लियरडिस्प्ले ();
display.setTextColor (सफेद); डिस्प्ले.सेट कर्सर (0, 0); display.setTextSize(1); डिस्प्ले.प्रिंट ("ए"); display.setTextSize(2); डिस्प्ले.प्रिंट ("ए"); डिस्प्ले.सेटटेक्स्टसाइज(3); डिस्प्ले.प्रिंट ("ए"); डिस्प्ले.सेटटेक्स्टसाइज(4); डिस्प्ले.प्रिंट ("ए"); display.setTextSize(5); डिस्प्ले.प्रिंट ("ए"); डिस्प्ले.सेटटेक्स्टसाइज (6); डिस्प्ले.प्रिंट ("ए"); डिस्प्ले.डिस्प्ले ();
चरण 9: मूल आकृतियाँ बनाना
आयत, वृत्त, त्रिभुज, रेखा या बिंदु जैसी बुनियादी आकृतियाँ बनाना बहुत आसान है और प्रत्येक के लिए एक समर्पित कार्य है।
आरेखण रेखा
एक रेखा खींचने के लिए आप display.drawLine(startX, startY, endX, endY, color) को कॉल कर सकते हैं। उदाहरण के लिए निम्नलिखित कोड स्क्रीन में एक विकर्ण रेखाएँ खींचता है ताकि वे एक बड़े X को आकार दें:
डिस्प्ले.क्लियरडिस्प्ले ();
display.drawLine(0, 0, display.width() - 1, display.height() - 1, WHITE); display.drawLine(display.width() - 1, 0, 0, display.height() - 1, WHITE); डिस्प्ले.डिस्प्ले ();
आप display.width() और display.height() फ़ंक्शन का उपयोग करके डिस्प्ले की चौड़ाई और ऊंचाई तक पहुंच सकते हैं। ऐसा करने से आपका कोड स्क्रीन के आकार से स्वतंत्र होगा।
आयत बनाना
आयत बनाने का कार्य है display.drawRect(upperLeftX, upperLeftY, width, height, color)। यहाँ वह कोड है जो कुछ यादृच्छिक स्थानों पर तीन आयत बनाता है:
डिस्प्ले.क्लियरडिस्प्ले ();
display.drawRect (१००, १०, २०, २०, सफेद); डिस्प्ले।फिलरेक्ट (10, 10, 45, 15, सफेद); display.drawRoundRect (६०, २०, ३५, ३५, ८, सफेद); डिस्प्ले.डिस्प्ले ();
display.fillRect(upperLeftX, upperLeftY, width, height, WHITE) को कॉल करके आप निर्दिष्ट रंग से भरा एक आयत बना सकते हैं। साथ ही इस उदाहरण में तीसरा कार्य display.drawRoundRect(upperLeftX, upperLeftY, चौड़ाई, ऊंचाई, CornerRadius, color) है, जैसा कि आप चित्र में देख सकते हैं, गोल कोनों के साथ एक आयत बनाने के लिए उपयोग किया जाता है। यह रंग से पहले एक अतिरिक्त पैरामीटर स्वीकार करता है जो एक पूर्णांक संख्या है जो कोने की त्रिज्या को दर्शाता है। जितना बड़ा मान कोने को गोल कर देगा। इसमें display.drawFillRoundRect नाम का एक संबंधित फिल फंक्शन भी है जो मुझे लगता है कि आप अनुमान लगा सकते हैं कि यह क्या करता है।
आरेखण वृत्त
फ़ंक्शन डिस्प्ले है। ड्रॉसर्कल (सेंटरएक्स, सेंटरवाई, रेडियस, कलर)। यहाँ एक उदाहरण दिया गया है जो एक स्माइली जैसी आकृति बनाता है:
display.drawCircle (60, 30, 30, सफेद);
display.fillCircle(50, 20, 5, सफेद); डिस्प्ले.फिलसर्कल (70, 20, 5, सफेद);
आयतों की तरह, आप दिए गए रंग से भरा एक वृत्त खींचने के लिए display.fillCircle फ़ंक्शन का उपयोग कर सकते हैं।
त्रिभुज बनाना
आह, फिर से एक फ़ंक्शन जिसे display.drawTriangle(poin1X, point1Y, point2X, point2Y, point3X, point3Y, color) और संबंधित डिस्प्ले कहा जाता है। एक भरे हुए त्रिकोण को ड्रा करें।
display.drawTriangle (24, 1, 3, 55, 45, 55, सफेद);
display.fillTriangle(१०४, ६२, १२५, ९, ८३, ९, सफेद);
एक बिंदु बनाएं
आप डिस्प्ले के माध्यम से स्क्रीन पर एक विशिष्ट बिंदु (जिसे पिक्सेल कहा जाता है) को भी रंग सकते हैं। DrawPixel(pixelX, pixelY, color) function।
display.drawPixel(20, 35, सफेद);
display.drawPixel (45, 12, सफेद); display.drawPixel (120, 59, सफेद); display.drawPixel (97, 20, सफेद); display.drawPixel (३५, ३६, सफेद); display.drawPixel (72, 19, सफेद); display.drawPixel (९०, ७, सफेद); display.drawPixel (11, 29, सफेद); display.drawPixel (५७, ४२, सफेद); display.drawPixel (69, 34, सफेद); display.drawPixel(108, 12, सफेद);
चरण 10: चित्र बनाना
एक छवि बनाना अलग और थोड़ा जटिल है। चूंकि डिस्प्ले मॉड्यूल मोनोकलर है, हमें पहले अपनी इमेज को मोनो कलर बिटमैप (जिसे ब्लैक एंड व्हाइट भी कहा जाता है) नामक फॉर्मेट में बदलने की जरूरत है। ऐसे प्रारूप में, छवि के प्रत्येक पिक्सेल को 0 या 1 के साथ प्रस्तुत किया जाता है। 1s रंग के अस्तित्व का प्रतिनिधित्व करता है और 0s का अर्थ है एक खाली स्थान। आप इस खंड के शीर्ष पर इस प्रारूप में Arduino लोगो का एक उदाहरण देख सकते हैं। बिटमैप छवि खींचने का कार्य है display.drawBitmap(topLeftX, topLeftY, imageData, चौड़ाई, ऊंचाई, रंग)। ImageData पैरामीटर बाइट्स में संख्याओं की एक सरणी है। प्रत्येक बाइट में 8 बिट होते हैं, इसलिए प्रत्येक बाइट में छवि के 8 पिक्सेल का डेटा होता है। छवि की चौड़ाई और ऊंचाई निर्दिष्ट करके, ड्रॉबिटमैप फ़ंक्शन को पता चल जाएगा कि पिक्सेल की अगली पंक्ति किस बिट से शुरू होती है।
मैंने अपनी छवि को इस प्रारूप में बदलने के लिए जो समाधान चुना था, वह मेरी तस्वीर को ASCII वर्णों के एक सेट में बदलने के लिए पहले ऑनलाइन "छवि से ASCII कन्वर्टर्स" (उदाहरण के लिए https://my.asciiart.club) का उपयोग करना था और फिर प्रतिस्थापित करना था। रिक्त स्थान के लिए उपयोग किए जाने वाले वर्ण 0 और अन्य 1 द्वारा। यही आप नीचे देखते हैं। आप डिस्प्ले पर प्रत्येक 0 और 1 को पिक्सेल के रूप में सोच सकते हैं। तो तस्वीर का आकार हमारे प्रदर्शन आकार से अधिक नहीं होना चाहिए जो कि 128x64 है।
नोट: इस ASCII तकनीक का उपयोग करना अनुशंसित दृष्टिकोण नहीं है क्योंकि वर्णों के पहलू अनुपात के कारण आपकी छवि विकृत हो जाएगी (वर्ण वर्ग नहीं हैं)। मैंने इस तकनीक को सिर्फ इसलिए आजमाया क्योंकि इससे छवि को आवश्यक प्रारूप में बदलना आसान हो जाता है। अन्यथा कुछ प्रोग्रामिंग या कुछ उपयोगिता अनुप्रयोगों का उपयोग करके सर्वोत्तम परिणाम प्राप्त करना संभव होगा जो पूरी तरह से इस पाठ के दायरे से बाहर हैं।
00000000000000000000011111111111111111111110000000000000000000000000000000000000011111111111111111111111111111100000000000000000 0000000000000111111111111111111111111111111111111110000000000000 0000000000011111111111111111111111111111111111111111100000000000 0000000001111111111111111111111111111111111111111111111000000000 0000000111111111111111111111111111111111111111111111111110000000 0000011111111111111111111111111111111111111111111111111111100000 0000111111111111111111111111111111111111111111111111111111110000 0001111111111111111111111111111111111111111111111111111111111000 0011111111111111111111111111111111111111111111111111111111111100 0111111111111111000000011111111111111111100000001111111111111110 0111111111110000000000000001111111111000000000000000111111111110 1111111111000000001111000000001111000000001111000000001111111111 1111111110000011111111111100000110000011111111111100000111111111 1111111100000111111111111111000000001111111001111110000011111111 1111111100001111100000011111100000011111100000011111000011111111 1111111100001111100000011111100000011111100000011111000011111111 1111111100000111111111111111000000001111111001111110000011111111 1111111110000011111111111100000110000011111111111100000111111111 1111111111000000001111000000001111000000001111100000001111111111 0111111111110000000000000000111111110000000000000000111111111110 0111111111111111000000001111111111111111000000001111111111111110 0011111111111111111111111111111111111111111111111111111111111100 0001111111111111111111111111111111111111111111111111111111111000 0000111111111111111111111111111111111111111111111111111111110000 0000011111111111111111111111111111111111111111111111111111100000 0000000111111111111111111111111111111111111111111111111110000000 0000000011111111111111111111111111111111111111111111111100000000 0000000000011111111111111111111111111111111111111111100000000000 0000000000000111111111111111111111111111111111111110000000000000 0000000000000000111111111111111111111111111111110000000000000000 0000000000000000000001111111111111111111111000000000000000000000
अब हमें प्रत्येक पंक्ति को 8 से विभाजित करना चाहिए, एक बाइट का प्रतिनिधित्व करना चाहिए और उन्हें नीचे एक सरणी में संग्रहीत करना चाहिए:
स्थिर स्थिरांक अहस्ताक्षरित चार PROGMEM arduino_logo = {
B00000000, B00000000, B00000111, B11111111, B11111111, B11100000, B00000000, B00000000, B00000000, B00000000, B01111111, B1111111, B11111111, B11111110, B00000000, B00000000,… // चित्र के अंत तक जारी रखें};
फिर हम drawBitmap फ़ंक्शन को कॉल करके इसे डिस्प्ले पर ड्रा कर सकते हैं।
display.drawBitmap (३२, १६, arduino_logo, ६४, ३२, सफेद);
चरण 11: समस्या निवारण
यह एक लंबा ट्यूटोरियल था और इसलिए इस बात की अत्यधिक संभावना है कि कुछ गलत हो जाए। यहां कुछ सामान्य त्रुटियों की सूची दी गई है जो आपके प्रोजेक्ट के लिए OLED डिस्प्ले मॉड्यूल सेट करते समय आपके सामने आ सकती हैं (उनमें से कुछ इस ट्यूटोरियल को तैयार करते समय मेरे लिए हुई थीं)।
कुछ भी प्रदर्शित नहीं हो रहा है
यह कई कारणों से हो सकता है इसलिए मैं निम्नलिखित सूची की जांच करने का सुझाव देता हूं जो आपके प्रोजेक्ट में हो सकती है:
I2C पता शायद गलत है
सुनिश्चित करें कि आपने अपने डिस्प्ले ऑब्जेक्ट को सेट करते समय display.begin() फ़ंक्शन में i2c-स्कैनर कोड में प्राप्त पता सेट किया है।
SCL और SDA गलत तरीके से जुड़े हुए हैं
यह वास्तव में मेरे लिए हुआ था। यदि आप Arduino Uno का उपयोग कर रहे हैं तो आपको यह सुनिश्चित करने के लिए अपने कनेक्शन फिर से जांचना होगा कि वे मेरे जैसे ही जुड़े हुए हैं। यदि आप एक अन्य Arduino संस्करण (जैसे मेगा, लियोनार्डो, आदि) का उपयोग कर रहे हैं, तो आपको यह जानना होगा कि उनका I2C अन्य पिन पर सेट हो सकता है। आप इसे वायर लाइब्रेरी के दस्तावेज़ीकरण पर देख सकते हैं।
आप दृश्य क्षेत्र से कुछ निकाल रहे हैं
यह एक सॉफ्टवेयर मुद्दा है। कुछ निर्देशांकों की गलत गणना करने के लिए ड्राइंग फ़ंक्शंस का उपयोग करते समय यह बहुत आम है और इसलिए आपकी ड्राइंग विकृत हो जाएगी या सबसे खराब स्थिति में यह पूरी तरह से दृश्य से बाहर हो सकती है। अपनी गणनाओं की समीक्षा करें और यह देखने के लिए कि क्या हो रहा है, चरण दर चरण आरेखण करने का प्रयास करें।
टेक्स्ट बिल्कुल प्रदर्शित नहीं हो रहे हैं
आप टेक्स्ट का रंग सेट करना भूल गए हैं या आपने इसे गलत मान पर सेट कर दिया है
टेक्स्ट बनाने से पहले आपको setTextColor को कॉल करना होगा। अन्यथा आपको कोई त्रुटि नहीं मिली, लेकिन आप प्रदर्शन पर कुछ भी नहीं देखेंगे। इसके अलावा, आपने टेक्स्ट का रंग पृष्ठभूमि के रंग के समान ही सेट किया होगा।
आप एक बहुत बड़े फ़ॉन्ट का उपयोग कर रहे हैं
यदि आप टेक्स्ट आकार को बहुत बड़े मान पर सेट करते हैं, तो यह संभव हो सकता है कि वर्ण दृश्य क्षेत्र से पूरी तरह से बाहर हो जाएं।
प्रदर्शन आकार के बारे में एक संकलन त्रुटि है
यह मेरे साथ भी हुआ और मुझे लगता है कि यह आप में से अधिकांश के लिए होगा। यह प्रदर्शन आकार स्थिर मानों के कारण है जो हेडर फ़ाइल Adafruit_SSD1306.h के अंदर परिभाषित हैं जिन्हें हम अपनी स्क्रिप्ट के शीर्ष पर शामिल करते हैं। यह फ़ाइल {your-project-folder}\libraries\Adafruit_SSD1306\Adafruit_SSD1306.h पर स्थित है। यदि आप इस फ़ाइल को खोलते हैं तो आप देखेंगे कि नीचे एक टिप्पणी अनुभाग है जिसमें यह वर्णन करता है कि आपको केवल उस स्थिरांक को अनसुना करने की आवश्यकता है जो आपके OLED डिस्प्ले मॉड्यूल आकार का प्रतिनिधित्व करता है। 128x64 डिस्प्ले मॉड्यूल के लिए, लाइन #define SSD1306_128_64 को असम्बद्ध किया जाना चाहिए।
/*=====================================================================
SSD1306 प्रदर्शित करता है ------------------------------------------------- ----------------------- ड्राइवर का उपयोग कई डिस्प्ले (128x64, 128x32, आदि) में किया जाता है। उचित आकार का फ्रेमबफर आदि बनाने के लिए नीचे उपयुक्त डिस्प्ले का चयन करें। SSD1306_128_64 128x64 पिक्सेल डिस्प्ले SSD1306_128_32 128x32 पिक्सेल डिस्प्ले SSD1306_96_16 --------------------------- ------------------------------------------*/ #SSD1306_128_64 परिभाषित करें / / #SSD1306_128_32 को परिभाषित करें // #SSD1306_96_16 परिभाषित करें /*===================================== =============================*/
चरण 12: आगे क्या करना है?
आउटपुट मॉड्यूल के रूप में OLED डिस्प्ले आपको अपने हॉबी प्रोजेक्ट्स के लिए एक पेशेवर दिखने वाला इंटरफ़ेस प्रदान करने का एक शानदार अवसर दे सकता है। आप इस पर एक सार्थक डेटा प्रदर्शित करने के लिए शुरुआती बिंदु के रूप में निम्नलिखित विचारों का प्रयास कर सकते हैं या उपयोगकर्ता को यह जानने में मदद कर सकते हैं कि क्या हो रहा है या यदि उसे कुछ करने की आवश्यकता है। किसी उपयोगकर्ता के लिए कुछ एल ई डी के माध्यम से किसी प्रोजेक्ट/डिवाइस की स्थिति की व्याख्या करने की तुलना में डिस्प्ले पर संदेश पढ़ना अधिक स्पष्ट होगा।
शुरुआती बिंदु के रूप में आप क्या कर सकते हैं:
- तापमान संवेदक मान पढ़ें और इसे OLED मॉड्यूल पर प्रदर्शित करें। आप इसमें दबाव या आर्द्रता सेंसर जोड़ सकते हैं और पूरी तरह कार्यात्मक मौसम स्टेशन परियोजना बना सकते हैं।
- इनपुट डिवाइस के रूप में जॉयस्टिक मॉड्यूल का उपयोग करके डिस्प्ले मॉड्यूल पर कुछ खींचने का प्रयास करें।
- ड्राइंग/देरी फ़ंक्शन कॉल या Arduino इंटरप्ट के अनुक्रम द्वारा डिस्प्ले पर एक एनीमेशन बनाने का प्रयास करें
- अपने सिस्टम स्टार्टअप पर अपना कस्टम लोगो प्रदर्शित करें (एडफ्रूट लोगो के बजाय)
मुझे टिप्पणियों पर बताना न भूलें, आप OLED डिस्प्ले मॉड्यूल का उपयोग करके क्या करेंगे (या आप पहले ही कर चुके हैं)।
सिफारिश की:
NVIDIA JetBot के साथ ट्रांसफर लर्निंग - ट्रैफिक कोन्स के साथ मज़ा: 6 कदम
NVIDIA JetBot के साथ स्थानांतरण सीखना - ट्रैफ़िक शंकु के साथ मज़ा
माइक्रोपायथन के साथ टीटीजीओ (रंग) डिस्प्ले (टीटीजीओ टी-डिस्प्ले): 6 कदम
टीटीजीओ (रंग) डिस्प्ले विथ माइक्रोपायथन (टीटीजीओ टी-डिस्प्ले): टीटीजीओ टी-डिस्प्ले ईएसपी32 पर आधारित एक बोर्ड है जिसमें 1.14 इंच का रंग डिस्प्ले शामिल है। बोर्ड को 7$ से कम के पुरस्कार के लिए खरीदा जा सकता है (शिपिंग सहित, बैंगगूड पर देखा जाने वाला पुरस्कार)। यह एक डिस्प्ले सहित ESP32 के लिए एक अविश्वसनीय पुरस्कार है। T
Arduino और TFT डिस्प्ले का उपयोग करके रीयलटाइम घड़ी कैसे बनाएं - 3.5 इंच TFT डिस्प्ले के साथ Arduino मेगा RTC: 4 कदम
Arduino और TFT डिस्प्ले का उपयोग करके रीयलटाइम क्लॉक कैसे बनाएं | 3.5 इंच TFT डिस्प्ले के साथ Arduino मेगा RTC: मेरे Youtube चैनल पर जाएँ। परिचय: - इस पोस्ट में मैं 3.5 इंच TFT टच LCD, Arduino Mega का उपयोग करके "रियल टाइम क्लॉक" बनाने जा रहा हूँ 2560 और DS3231 RTC मॉड्यूल….शुरू करने से पहले…मेरे YouTube चैनल से वीडियो देखें..नोट:- यदि आप Arduin का उपयोग कर रहे हैं
आईकेईए लैंप के साथ मज़ा: 9 कदम
आईकेईए लैंप के साथ मज़ा: कुछ खास नहीं। कुछ भी नया नहीं है। यह प्रसिद्ध आईकेईए माइलोनिट लैंप के साथ मूड लाइट का मेरा अपना संस्करण है
आसान वीबीएस के साथ मज़ा !!!: 5 कदम
फन विद ईज़ी वीबीएस!!!: ए बिगिनर्स गाइड टू फन, एंड इजी टू डू विजुअल बेसिक स्क्रिप्ट। VSB कुछ लोगों को कठिन लग सकता है, लेकिन वास्तव में यह वास्तव में आसान है। विंडोज़ इसे बिना कंपाइलर के भी चला सकता है! यदि आप जावास्क्रिप्ट जानते हैं, तो यह आपके लिए वास्तव में आसान होना चाहिए