- STM32F103C8 I2C अवलोकन
- STM32F103C8 में I2C पिन
- Arduino में I2C पिंस
- अवयव आवश्यक
- सर्किट आरेख और कनेक्शन
- STM32 में I2C प्रोग्रामिंग
- मास्टर STM32 प्रोग्रामिंग स्पष्टीकरण
- गुलाम Arduino प्रोग्रामिंग स्पष्टीकरण
हमारे पिछले ट्यूटोरियल में, हमने दो Arduino बोर्डों के बीच SPI और I2C संचार के बारे में सीखा है। इस ट्यूटोरियल में हम एक Arduino बोर्ड को Blue Pill बोर्ड के साथ बदल देंगे जो STM32F103C8 है और I2C बस का उपयोग करके Arduino बोर्ड के साथ संचार करेगा।
STM32 में Arduino बोर्ड की तुलना में अधिक विशेषताएं हैं। इसलिए SPI & I2C बस का उपयोग करके STM32 और Arduino के बीच संचार के बारे में सीखना बहुत अच्छा होगा । इस ट्यूटोरियल में, हम Arduino और STM32F103C8 के बीच संचार के लिए I2C बस का उपयोग करेंगे , और अगले ट्यूटोरियल में SPI बस के बारे में जानेंगे। STM32 बोर्ड के बारे में अधिक जानने के लिए, अन्य STM32 परियोजनाओं की जाँच करें।
STM32F103C8 I2C अवलोकन
Arduino Uno के साथ STM32F103C8 ब्लू पिल बोर्ड में I2C (इंटर इंटीग्रेटेड सर्किट) की तुलना करें, तो हम देखेंगे कि Arduino में ATMEGA328 माइक्रोकंट्रोलर है, और इसमें STM32F103C8 ARM Cortex- M3 है। STM32 में दो I2C बस हैं जबकि Arduino Uno में केवल एक I2C बस है और STM32 Arduino से तेज है।
I2C संचार के बारे में अधिक जानने के लिए, हमारे पिछले लेख देखें
- Arduino में I2C का उपयोग कैसे करें: दो Arduino बोर्डों के बीच संचार
- PIC माइक्रोकंट्रोलर PIC16F877 के साथ I2C संचार
- I2C का उपयोग करते हुए ESP32 के साथ 16X2 एलसीडी को इंटरफैस करना
- MSP430 लॉन्चपैड के साथ I2C संचार
- I2C का उपयोग किए बिना NodeMCU के साथ एलसीडी को इंटरफैस करना
- Arduino के एकल कार्यक्रम में बहु संचार (I2C SPI UART) को कैसे संभालना है
STM32F103C8 में I2C पिन
एसडीए: पीबी 7 या पीबी 9, पीबी 11।
एससीएल: पीबी 6 या पीबी 8, पीबी 10।
Arduino में I2C पिंस
एसडीए: ए 4 पिन
SCL: A5 पिन
अवयव आवश्यक
- STM32F103C8
- अरुडिनो उनो
- एलईडी (2-नग)
- पुश बटन (2-नग)
- प्रतिरोध (4-नग)
- ब्रेड बोर्ड
- तारों को जोड़ना
सर्किट आरेख और कनेक्शन
निम्न तालिका I2C बस का उपयोग करने के लिए STM32 ब्लू पिल और अरुडिनो उनो के बीच संबंध को दर्शाती है । इसमें केवल दो तारों की आवश्यकता होती है।
STM32F103C8 |
Arduino |
पिन विवरण |
बी 7 |
ए 4 |
एसडीए |
बी -6 |
A5 |
एससीएल |
GND |
GND |
भूमि |
जरूरी
- Arduino GND और STM32F103C8 GND को एक साथ जोड़ना न भूलें।
- फिर दोनों बोर्ड के पुश बटन पिन को 10k के पुल डाउन रेज़र को अलग से कनेक्ट करें।
इस STM32 I2C ट्यूटोरियल में हम STM32F103C8 को मास्टर और Arduino को स्लेव के रूप में कॉन्फ़िगर करेंगे। दोनों बोर्ड एक एलईडी और एक पुश बटन के साथ अलग से जुड़े हुए हैं।
STM32 में I2C संचार का प्रदर्शन करने के लिए, हम मास्टर STM32 LED बटन मूल्य का उपयोग करके दास Arduino पुश बटन मूल्य का उपयोग करके और दास Arduino LED का उपयोग करके मास्टर STM32 एलईडी को नियंत्रित करते हैं। ये मान I2C संचार बस के माध्यम से भेजे जाते हैं।
STM32 में I2C प्रोग्रामिंग
प्रोग्रामिंग Arduino कोड के समान है। यह वही
इस ट्यूटोरियल में मास्टर एसटीएम 32 के लिए एक और गुलाम अरुडिनो के लिए दो कार्यक्रम हैं। इस परियोजना के अंत में प्रदर्शन वीडियो के साथ दोनों पक्षों के लिए पूर्ण कार्यक्रम दिए गए हैं ।
मास्टर STM32 प्रोग्रामिंग स्पष्टीकरण
मास्टर STM32 में देखते हैं कि क्या हो रहा है:
1. सबसे पहले हमें STM32F103C8 में I2C संचार कार्यों का उपयोग करने के लिए वायर लाइब्रेरी और सॉफ्टवायर लाइब्रेरी को शामिल करना होगा।
#शामिल
2. शून्य सेटअप में ()
- हम बौड रेट 9600 पर सीरियल कम्युनिकेशन शुरू करते हैं।
सीरियल.बेगिन (9600);
- अगला हम पिन पर I2C संचार शुरू करते हैं (बी 6, बी 7)
तार.बेगिन ();
3. शून्य लूप () में
- पहले हमें स्लेव अरुडिनो से डेटा मिलता है इसलिए हम स्लेव एड्रेस 8 के साथ रिक्वेस्ट फ़र्म () का उपयोग करते हैं और हम एक बाइट का अनुरोध करते हैं।
वायर.requestFrom (8,1);
प्राप्त मान वायर.read () का उपयोग करके पढ़ा जाता है
बाइट ए = वायर.डर ();
- गुलाम से प्राप्त मूल्य के आधार पर, मास्टर एलईडी को पिन PA1 पर डिजिटल राइट का उपयोग करके चालू या बंद कर दिया जाता है और सीरियल मॉनिटर में मूल्य प्रिंट करने के लिए सीरियल प्रिंट का उपयोग किया जाता है।
अगर (a == 1) { digitalWrite (LED, HIGH); Serial.println ("मास्टर एलईडी चालू"); } और { digitalWrite (LED, LOW); Serial.println ("मास्टर एलईडी ऑफ़"); }
- अगला हमें पिन की स्थिति को पढ़ने की आवश्यकता है PA0 जो कि मास्टर STM32 पुश बटन है।
int pinvalue = digitalRead (बटनपिन);
- अगला, तर्क के अनुसार पिन मान भेजें, इसलिए हम अगर स्थिति का उपयोग करते हैं और फिर 8 के पते के साथ दास arduino के साथ प्रसारण शुरू करते हैं और फिर पुश बटन इनपुट मूल्य के अनुसार मूल्य लिखते हैं।
if (pinvalue == High) { x = 1; } और { x = 0; } वायर.beginTransmission (8); तार.लेख (x); वायर.endTransmission ();
गुलाम Arduino प्रोग्रामिंग स्पष्टीकरण
1. सबसे पहले हमें I2C संचार कार्यों का उपयोग करने के लिए वायर लाइब्रेरी को शामिल करना होगा।
#शामिल
2. शून्य सेटअप में ()
- हम बौड रेट 9600 पर सीरियल कम्युनिकेशन शुरू करते हैं।
सीरियल.बेगिन (9600);
- अगला दास के पते के साथ पिन (ए 4, ए 5) पर I2C संचार शुरू करें। 8. यहां दास पता निर्दिष्ट करना महत्वपूर्ण है।
तार ।begin (8);
जब हम गुलाम से मास्टर का अनुरोध करते हैं और स्लेव से वायर रिक्वेस्ट फ़ंक्शन कॉल करते हैं, तो आगे हमें Wire.onReceive फ़ंक्शन को कॉल करना होगा ।
वायर.ऑनर्सिव (प्राप्त करें); वायर.ऑनएरपेस्ट (अनुरोध);
3. अगला हमारे पास अनुरोध फ़ंक्शन के लिए दो और एक ईवेंट प्राप्त करने के लिए है
अनुरोध के लिए घटना
जब मास्टर STM32 गुलाम से अनुरोध करता है तो यह फ़ंक्शन निष्पादित करेगा। यह फ़ंक्शन स्लेव अरुडिनो पुश बटन से इनपुट मूल्य लेता है और वायर (राइट) () का उपयोग करके पुश बटन मूल्य के अनुसार मास्टर STM32 को एक बाइट (1 या 0) भेजता है।
शून्य अनुरोध () { int value = digitalRead (बटनपिन); अगर (मान == उच्च) { x = 1; } और { x = 0; } वायर.राइट (एक्स); }
प्राप्त घटना के लिए
जब मास्टर दास को गुलाम पते (8) के साथ डेटा भेजता है, तो यह फ़ंक्शन निष्पादित करेगा। यह फ़ंक्शन मास्टर और स्टोर से प्राप्त मूल्य को बाइट के एक चर में पढ़ता है और फिर यदि प्राप्त मूल्य के आधार पर दास को चालू या बंद करने के लिए तर्क का उपयोग करता है। यदि प्राप्त मान 1 है तो एलईडी चालू होता है और 0 के लिए एलईडी बंद हो जाता है।
शून्य प्राप्त करना (int howMany) { byte a = Wire.read (); अगर (a == 1) { digitalWrite (LED, HIGH); Serial.println ("गुलाम एलईडी चालू"); } और { digitalWrite (LED, LOW); Serial.println ("गुलाम एलईडी बंद"); } देरी (500); }
उत्पादन
1. जब हम मास्टर STM32 में पुश बटन दबाते हैं, तो स्लेव अर्दियो से जुड़ी एलईडी ऑन (व्हाइट) हो जाती है।
2. अब जब हम स्लेव साइड में पुश बटन दबाते हैं, तो मास्टर से जुड़ा एलईडी ऑन (रेड) हो जाता है और जब बटन जारी होता है तो एलईडी बंद हो जाता है।
3. जब दोनों पुश बटन एक साथ दबाए जाते हैं, तो दोनों एल ई डी एक ही समय में चमकते हैं, और जब तक बटन दबाए जाते हैं तब तक चालू रहता है।
तो यह है कि I2C संचार STM32 में कैसे होता है । अब आप STM32 बोर्ड के साथ किसी भी I2C सेंसर को इंटरफेस कर सकते हैं।
मास्टर STM32 और स्लेव Arduino के लिए पूरा कोडिंग एक प्रदर्शन वीडियो के साथ नीचे दिया गया है