विषयसूची:

ब्लूटूथ ऑडियो और डिजिटल सिग्नल प्रोसेसिंग: एक Arduino फ्रेमवर्क: 10 कदम
ब्लूटूथ ऑडियो और डिजिटल सिग्नल प्रोसेसिंग: एक Arduino फ्रेमवर्क: 10 कदम

वीडियो: ब्लूटूथ ऑडियो और डिजिटल सिग्नल प्रोसेसिंग: एक Arduino फ्रेमवर्क: 10 कदम

वीडियो: ब्लूटूथ ऑडियो और डिजिटल सिग्नल प्रोसेसिंग: एक Arduino फ्रेमवर्क: 10 कदम
वीडियो: PWM in Arduino-Pulse Width Modulation 2024, नवंबर
Anonim
Image
Image
ब्लूटूथ ऑडियो और डिजिटल सिग्नल प्रोसेसिंग: एक Arduino फ्रेमवर्क
ब्लूटूथ ऑडियो और डिजिटल सिग्नल प्रोसेसिंग: एक Arduino फ्रेमवर्क

सारांश

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

इस परियोजना के लिए, ESP32 पसंद का माइक्रोकंट्रोलर है। इसकी कीमत £10 से कम है और यह ADCs, DACs, Wifi, ब्लूटूथ लो एनर्जी, ब्लूटूथ क्लासिक और 240MHz डुअल-कोर प्रोसेसर के साथ फीचर से भरपूर है। ऑनबोर्ड डीएसी तकनीकी रूप से ऑडियो चला सकता है लेकिन यह बहुत अच्छा नहीं लगेगा। इसके बजाय, मैं लाइन-आउट सिग्नल उत्पन्न करने के लिए Adafruit I2S स्टीरियो डिकोडर का उपयोग करूंगा। यह सिग्नल आपके मौजूदा HiFi सिस्टम में तुरंत वायरलेस ऑडियो जोड़ने के लिए किसी भी HiFi सिस्टम को आसानी से भेजा जा सकता है।

आपूर्ति

उम्मीद है, अधिकांश निर्माताओं के पास ब्रेडबोर्ड, जंपर्स, यूएसबी केबल, बिजली की आपूर्ति सोल्डरिंग आइरन होंगे और उन्हें केवल ESP32 और स्टीरियो डिकोडर पर £15 खर्च करना होगा। यदि नहीं, तो आवश्यक सभी भागों की सूची नीचे दी गई है।

  • एक ESP32 - ESP32-PICO-KIT और TinyPico पर परीक्षण किया गया - £9.50/ £24
  • एडफ्रूट I2S स्टीरियो डिकोडर - £5.51
  • ब्रेडबोर्ड - £3-£5 प्रत्येक
  • जम्पर तार - £३
  • वायर्ड हेडफ़ोन/हाई-फाई सिस्टम - £££
  • पुश हेडर या सोल्डरिंग आयरन - £२.१० / £३०
  • माइक्रो यूएसबी केबल - £२.१०/ £३
  • 3.5 मिमी से आरसीए कनेक्टर / 3.5 मिमी जैक से जैक (या आपके स्पीकर को जो भी चाहिए) - £ 2.40 / £ 1.50
  • यूएसबी बिजली की आपूर्ति - £5

चरण 1: निर्माण - ब्रेडबोर्ड

निर्माण - ब्रेडबोर्ड
निर्माण - ब्रेडबोर्ड

यदि आपने ESP32-PICO-KIT खरीदा है तो आपको किसी भी पिन को मिलाप नहीं करना पड़ेगा क्योंकि यह प्री-सोल्डर आता है। बस इसे ब्रेडबोर्ड पर रखें।

चरण 2: निर्माण - पुश हेडर्स/सोल्डरिंग

निर्माण - पुश हेडर्स/सोल्डरिंग
निर्माण - पुश हेडर्स/सोल्डरिंग
निर्माण - पुश हेडर्स/सोल्डरिंग
निर्माण - पुश हेडर्स/सोल्डरिंग

यदि आपके पास टांका लगाने वाला लोहा है, तो Adafruit वेबसाइट पर दिए निर्देशों के अनुसार पिन को स्टीरियो डिकोडर में मिला दें। लिखने के समय मेरा सोल्डरिंग आयरन काम पर था जो बंद था। मैं एक अस्थायी टांका लगाने वाले लोहे के लिए भुगतान नहीं करना चाहता था इसलिए मैंने पिमोरोनी से कुछ पुश हेडर काट दिए। मैंने उन्हें काट दिया ताकि वे स्टीरियो डिकोडर में फिट हो जाएं। यह सबसे अच्छा समाधान नहीं है (और हेडर का उपयोग करने का इरादा कैसे नहीं था) लेकिन यह टांका लगाने वाले लोहे का सबसे सस्ता विकल्प है। कट-अप हेडर को ब्रेडबोर्ड पर स्लॉट करें। डिकोडर के लिए आपको केवल 6 पिन की 1 लाइन की आवश्यकता होगी। आप स्थिरता के लिए दूसरी तरफ एक और छक्का जोड़ सकते हैं लेकिन इस प्रोटोटाइप सिस्टम के लिए यह आवश्यक नहीं है। हेडर को स्लॉट करने के लिए पिन विन, 3vo, gnd, wsel, din और bclk हैं।

चरण 3: निर्माण - पावर पिन को तार दें

निर्माण - पावर पिन को तार दें
निर्माण - पावर पिन को तार दें

स्टीरियो डिकोडर को पुश हेडर्स (vin, 3vo, gnd, wsel, din और bclk pins) पर रखें और उन्हें मजबूती से एक साथ पुश करें। फिर, यह आदर्श रूप से एक टांका लगाने वाले लोहे के साथ किया जाना चाहिए, लेकिन मुझे सुधार करना पड़ा। आप देखेंगे कि इस निर्देशयोग्य में सभी तार नीले हैं। ऐसा इसलिए है क्योंकि मेरे पास कोई जम्पर तार नहीं था इसलिए मैंने 1 लंबे तार को छोटे टुकड़ों में काट दिया। इसके अलावा, मैं कलरब्लाइंड हूं और वास्तव में वायर कलर की परवाह नहीं करता। पावर पिन निम्नानुसार संलग्न हैं:

3v3 (ESP32) -> स्टीरियो डिकोडर पर जीतने के लिए

gnd (ESP32) -> स्टीरियो डिकोडर पर gnd करने के लिए

चरण 4: निर्माण - I2S वायरिंग

निर्माण - I2S वायरिंग
निर्माण - I2S वायरिंग

ESP32 से स्टीरियो डिकोडर में ब्लूटूथ ऑडियो भेजने के लिए हम I2S नामक डिजिटल संचार की एक विधि का उपयोग करने जा रहे हैं। स्टीरियो डिकोडर इस डिजिटल सिग्नल को लेगा और इसे एक एनालॉग सिग्नल में बदल देगा जिसे स्पीकर या HiFi में प्लग किया जा सकता है। I2S को केवल 3 तारों की आवश्यकता होती है और यह समझने में काफी सरल है। बिट क्लॉक (बीसीएलके) लाइन एक नए बिट के संचरित होने का संकेत देने के लिए उच्च और निम्न हो जाती है। डेटा-आउट लाइन (dout) यह इंगित करने के लिए उच्च या निम्न हो जाती है कि क्या उस बिट का मान 0 या 1 है और शब्द चयन रेखा (wsel) यह इंगित करने के लिए उच्च या निम्न हो जाती है कि बाएं या दाएं चैनल प्रसारित किया जा रहा है या नहीं। प्रत्येक माइक्रोकंट्रोलर I2S का समर्थन नहीं करता है लेकिन ESP32 में 2 I2S लाइनें हैं। यह इस परियोजना के लिए एक स्पष्ट विकल्प बनाता है।

वायरिंग इस प्रकार है:

27 (ESP32) -> wsel (स्टीरियो डिकोडर)

25 (ESP32) -> दीन (स्टीरियो डिकोडर)

26 (ESP32) -> bclk (स्टीरियो डिकोडर)

चरण 5: बीटीऑडियो लाइब्रेरी स्थापित करना

बीटीऑडियो लाइब्रेरी स्थापित करना
बीटीऑडियो लाइब्रेरी स्थापित करना
बीटीऑडियो लाइब्रेरी स्थापित करना
बीटीऑडियो लाइब्रेरी स्थापित करना

यदि आपने उन्हें पहले से स्थापित नहीं किया है तो ESP32 के लिए Arduino IDE और Arduino कोर स्थापित करें। एक बार जब आप उन्हें स्थापित कर लेते हैं तो मेरे जीथब पेज पर जाएं और रिपॉजिटरी डाउनलोड करें। स्केच के तहत Arduino IDE के भीतर>>लाइब्रेरी शामिल करें>> "Add. ZIP लाइब्रेरी" चुनें। फिर डाउनलोड की गई ज़िप फ़ाइल का चयन करें। यह मेरी btAudio लाइब्रेरी को आपके Arduino लाइब्रेरी में जोड़ना चाहिए। पुस्तकालय का उपयोग करने के लिए आपको Arduino स्केच में प्रासंगिक शीर्षलेख शामिल करना होगा। आप इसे अगले चरण में देखेंगे।

चरण 6: बीटीऑडियो लाइब्रेरी का उपयोग करना

BtAudio लाइब्रेरी का उपयोग करना
BtAudio लाइब्रेरी का उपयोग करना
BtAudio लाइब्रेरी का उपयोग करना
BtAudio लाइब्रेरी का उपयोग करना

एक बार इंस्टॉल हो जाने पर, अपने ESP32 को माइक्रो USB के माध्यम से अपने कंप्यूटर से कनेक्ट करें और फिर अपने स्टीरियो डिकोडर को अपने स्पीकर से अपने 3.5 मिमी तार से कनेक्ट करें। इससे पहले कि आप स्केच अपलोड करें, आपको Arduino संपादक में कुछ चीजें बदलनी होंगी। अपने बोर्ड का चयन करने के बाद आपको टूल्स >> पार्टीशन स्कीम के तहत विभाजन योजना को संपादित करना होगा और "नो ओटीए (लार्ज एपीपी)" या "मिनिमल एसपीआईएफएफएस (ओटीए के साथ बड़े एपीपीएस)" का चयन करना होगा। यह आवश्यक है क्योंकि यह प्रोजेक्ट वाईफाई और ब्लूटूथ दोनों का उपयोग करता है जो दोनों बहुत मेमोरी हैवी लाइब्रेरी हैं। एक बार जब आप यह कर लेते हैं तो निम्न स्केच को ESP32 पर अपलोड करें।

#शामिल

// ऑडियो डिवाइस का नाम सेट करता है btAudio audio = btAudio ("ESP_Speaker"); शून्य सेटअप () {// ESP32 ऑडियो के लिए ऑडियो डेटा स्ट्रीम करता है। शुरू (); // प्राप्त डेटा को I2S DAC int bck = 26 पर आउटपुट करता है; इंट डब्ल्यूएस = 27; इंट डाउट = 25; audio. I2S (बीके, डाउट, डब्ल्यूएस); } शून्य लूप () { }

स्केच को मोटे तौर पर 3 चरणों में विभाजित किया जा सकता है:

  1. एक वैश्विक btAudio ऑब्जेक्ट बनाएं जो आपके ESP32 का "ब्लूटूथ नाम" सेट करे
  2. btAudio:: start विधि के साथ ऑडियो प्राप्त करने के लिए ESP32 को कॉन्फ़िगर करें
  3. I2S पिन को btAudio::I2S विधि से सेट करें।

यह सॉफ्टवेयर की तरफ है! अब आपको बस अपने ESP32 में ब्लूटूथ कनेक्शन शुरू करना है। बस अपने फ़ोन/लैपटॉप/एमपी3 प्लेयर पर नए उपकरणों के लिए स्कैन करें और "ESP_Speaker" दिखाई देगा। एक बार जब आप खुश हो जाते हैं कि सब कुछ काम कर रहा है (संगीत चलता है) तो आप अपने कंप्यूटर से ESP32 को डिस्कनेक्ट कर सकते हैं। इसे यूएसबी पावर सप्लाई से पावर दें और यह आपके द्वारा अपलोड किए गए आखिरी कोड को याद रखेगा। इस तरह, आप अपने ESP32 को अपने HiFi सिस्टम के पीछे हमेशा के लिए छिपा कर छोड़ सकते हैं।

चरण 7: डीएसपी - फ़िल्टरिंग

डिजिटल सिग्नल प्रोसेसिंग के साथ रिसीवर का विस्तार

यदि आपने सभी चरणों का पालन किया है (और मैंने कुछ भी नहीं छोड़ा है) तो अब आपके पास अपने HiFi सिस्टम के लिए पूरी तरह से काम करने वाला ब्लूटूथ रिसीवर है। हालांकि यह अच्छा है, यह वास्तव में माइक्रोकंट्रोलर को अपनी सीमा तक नहीं धकेलता है। ESP32 में 240MHz पर काम करने वाले दो कोर हैं। इसका मतलब है कि यह परियोजना सिर्फ एक रिसीवर से कहीं ज्यादा है। इसमें डिजिटल सिग्नल प्रोसेसर (डीएसपी) के साथ ब्लूटूथ रिसीवर होने की क्षमता है। डीएसपी अनिवार्य रूप से वास्तविक समय में सिग्नल पर गणितीय संचालन करते हैं। एक उपयोगी ऑपरेशन को डिजिटल फ़िल्टरिंग कहा जाता है। यह प्रक्रिया एक निश्चित कटऑफ आवृत्ति के नीचे या ऊपर एक सिग्नल में आवृत्तियों को क्षीण करती है, इस पर निर्भर करता है कि आप उच्च-पास या निम्न पास फ़िल्टर का उपयोग कर रहे हैं या नहीं।

हाई-पास फिल्टर

हाई-पास फिल्टर एक निश्चित बैंड के नीचे आवृत्तियों को क्षीण करते हैं। मैंने Earlevel.com के कोड के आधार पर Arduino सिस्टम के लिए एक फ़िल्टर लाइब्रेरी बनाई है। मुख्य अंतर यह है कि मैंने उच्च-क्रम फ़िल्टर के निर्माण को अधिक आसानी से अनुमति देने के लिए वर्ग संरचना को बदल दिया है। उच्च क्रम के फिल्टर आपके कटऑफ से परे आवृत्तियों को अधिक प्रभावी ढंग से दबाते हैं लेकिन उन्हें बहुत अधिक गणना की आवश्यकता होती है। हालाँकि, वर्तमान कार्यान्वयन के साथ, आप रीयल-टाइम ऑडियो के लिए छठे क्रम के फ़िल्टर का भी उपयोग कर सकते हैं!

स्केच वही है जो पिछले चरण में पाया गया था, सिवाय इसके कि हमने मुख्य लूप को बदल दिया है। फ़िल्टर को सक्षम करने के लिए हम btAudio::createFilter विधि का उपयोग करते हैं। यह विधि 3 तर्क स्वीकार करती है। पहला फिल्टर कैस्केड की संख्या है। फिल्टर कैस्केड की संख्या फिल्टर के क्रम का आधा है। छठे क्रम के फ़िल्टर के लिए, पहला तर्क 3 होना चाहिए। 8वें क्रम के फ़िल्टर के लिए, यह 4 होगा। दूसरा तर्क फ़िल्टर कटऑफ़ है। मैंने डेटा पर वास्तव में नाटकीय प्रभाव डालने के लिए इसे 1000Hz पर सेट किया है। अंत में, हम तीसरे तर्क के साथ फाइलर के प्रकार को निर्दिष्ट करते हैं। यह हाई-पास फिल्टर के लिए हाईपास और लो-पास फिल्टर के लिए लोपास होना चाहिए। नीचे दी गई स्क्रिप्ट इस आवृत्ति के कटऑफ को 1000Hz और 2Hz के बीच स्विच करती है। आपको डेटा पर एक नाटकीय प्रभाव सुनना चाहिए।

#शामिल

btAudio ऑडियो = btAudio ("ESP_Speaker"); शून्य सेटअप () {ऑडियो। शुरू (); इंट बैक = 26; इंट डब्ल्यूएस = 27; इंट डाउट = 25; audio. I2S (बीके, डाउट, डब्ल्यूएस); } शून्य लूप () {देरी (5000); audio.createFilter(३, १०००, हाईपास); देरी (5000); audio.createFilter(3, 2, हाईपास); }

लो-पास फिल्टर

कम पास फिल्टर उच्च पास फिल्टर के विपरीत करते हैं और एक निश्चित आवृत्ति से ऊपर आवृत्तियों को दबाते हैं। उन्हें हाई पास फिल्टर की तरह ही लागू किया जा सकता है, सिवाय इसके कि उन्हें तीसरे तर्क को लोपास में बदलने की आवश्यकता होती है। नीचे दिए गए स्केच के लिए मैं 2000Hz और 20000Hz के बीच लो-पास कटऑफ को वैकल्पिक करता हूं। उम्मीद है, आप अंतर सुनेंगे। जब लो-पास फिल्टर 2000Hz पर हो तो यह काफी मफल होना चाहिए।

#शामिल

btAudio ऑडियो = btAudio ("ESP_Speaker"); शून्य सेटअप () {ऑडियो। शुरू (); इंट बैक = 26; इंट डब्ल्यूएस = 27; इंट डाउट = 25; audio. I2S (बीके, डाउट, डब्ल्यूएस); } शून्य लूप () {देरी (5000); audio.createFilter(३, २०००, लोपास); देरी (5000); audio.createFilter(3, 20000, लोपास); }

चरण 8: डीएसपी - गतिशील रेंज संपीड़न

पृष्ठभूमि

डायनेमिक रेंज कम्प्रेशन एक सिग्नल प्रोसेसिंग विधि है जो ऑडियो की ज़ोर को बाहर निकालने की कोशिश करती है। यह तेज़ आवाज़ों को संकुचित करता है, जो एक निश्चित सीमा से ऊपर उठती हैं, शांत ध्वनि के स्तर तक और फिर, वैकल्पिक रूप से दोनों को बढ़ाती हैं। परिणाम बहुत अधिक सुनने का अनुभव है। यह वास्तव में उपयोगी था जब मैं बहुत तेज़ पृष्ठभूमि संगीत और बहुत ही शांत स्वर के साथ एक शो देख रहा था। इस मामले में, केवल वॉल्यूम बढ़ाने से मदद नहीं मिली क्योंकि यह केवल पृष्ठभूमि संगीत को बढ़ाता था। डायनामिक रेंज कम्प्रेशन के साथ, मैं लाउड बैकग्राउंड म्यूजिक को वोकल्स के स्तर तक कम कर सकता था और सब कुछ फिर से ठीक से सुन सकता था।

कोड

डायनेमिक रेंज कम्प्रेशन में केवल वॉल्यूम कम करना या सिग्नल को थ्रेशोल्ड करना शामिल नहीं है। यह उससे थोड़ा ज्यादा चालाक है। यदि आप वॉल्यूम कम करते हैं तो शांत आवाज़ें कम होने के साथ-साथ तेज़ आवाज़ें भी कम होंगी। इसका एक तरीका सिग्नल को थ्रेशोल्ड करना है लेकिन इसके परिणामस्वरूप गंभीर विकृति होती है। डायनेमिक रेंज कम्प्रेशन में सॉफ्ट थ्रेशोल्डिंग और फ़िल्टरिंग का एक संयोजन शामिल होता है, जो विरूपण को कम करने के लिए होता है यदि आप सिग्नल को थ्रेशोल्ड/क्लिप करते हैं। परिणाम एक संकेत है जहां तेज आवाज विरूपण के बिना "काट" जाती है और शांत लोगों को वैसे ही छोड़ दिया जाता है जैसे वे हैं। नीचे दिया गया कोड संपीड़न के तीन अलग-अलग स्तरों के बीच स्विच करता है।

  1. विरूपण के साथ संपीड़न
  2. विरूपण के बिना संपीड़न
  3. कोई संपीड़न नहीं

#शामिल

btAudio ऑडियो = btAudio ("ESP_Speaker"); शून्य सेटअप () {ऑडियो। शुरू (); इंट बैक = 26; इंट डब्ल्यूएस = 27; इंट डाउट = 25; audio. I2S (बीके, डाउट, डब्ल्यूएस); } शून्य लूप () {देरी (5000); audio.compress (३०, ०.०००१, ०.०००१, १०, १०, ०); देरी (5000); audio.compress (३०, ०.०००१, ०.१, १०, १०, ०); देरी (5000); ऑडियो.डीकंप्रेस (); }

गतिशील रेंज संपीड़न जटिल है और btAudio::compress विधियों में कई पैरामीटर हैं। मैं उन्हें (क्रम में) यहाँ समझाने और समझाने की कोशिश करूँगा:

  1. दहलीज - वह स्तर जिस पर ऑडियो कम हो जाता है (डेसिबल में मापा जाता है)
  2. हमले का समय - थ्रेशोल्ड पार हो जाने के बाद कंप्रेसर को काम करना शुरू करने में लगने वाला समय
  3. रिलीज का समय - कंप्रेसर को काम करना बंद करने में लगने वाला समय।
  4. कमी अनुपात - वह कारक जिसके द्वारा ऑडियो संकुचित होता है।
  5. घुटने की चौड़ाई - दहलीज के आसपास की चौड़ाई (डेसीबल में) जिस पर कंप्रेसर आंशिक रूप से काम करता है (अधिक प्राकृतिक ध्वनि)।
  6. संपीड़न के बाद सिग्नल में जोड़ा गया लाभ (डेसिबल) (वॉल्यूम में वृद्धि / कमी)

संपीड़न के पहले उपयोग में बहुत ही श्रव्य विकृति इसलिए है क्योंकि थ्रेशोल्ड बहुत कम है और हमले का समय और रिलीज का समय दोनों ही बहुत कम प्रभावी ढंग से एक कठिन थ्रेशोल्डिंग व्यवहार के परिणामस्वरूप होता है। यह दूसरे मामले में रिलीज के समय को बढ़ाकर स्पष्ट रूप से हल किया गया है। यह अनिवार्य रूप से कंप्रेसर को बहुत आसान तरीके से कार्य करने का कारण बनता है। यहां, मैंने केवल यह दिखाया है कि कैसे 1 पैरामीटर बदलने से ऑडियो पर नाटकीय प्रभाव पड़ सकता है। अब विभिन्न मापदंडों के साथ प्रयोग करने की आपकी बारी है।

कार्यान्वयन (जादू गणित - वैकल्पिक)

मैंने पाया कि चुनौतीपूर्ण होने के लिए गतिशील रेंज संपीड़न को निष्क्रिय रूप से कार्यान्वित करना। एल्गोरिथ्म को 16-बिट पूर्णांक को डेसिबल में परिवर्तित करने और फिर सिग्नल को संसाधित करने के बाद इसे वापस 16-बिट पूर्णांक में बदलने की आवश्यकता होती है। मैंने देखा कि स्टीरियो डेटा को संसाधित करने के लिए कोड की एक पंक्ति 10 माइक्रोसेकंड ले रही थी। चूंकि 44.1 किलोहर्ट्ज़ पर नमूना स्टीरियो ऑडियो डीएसपी के लिए केवल 11.3 माइक्रोसेकंड छोड़ता है, यह अस्वीकार्य रूप से धीमा है … हालांकि, एक छोटी लुकअप टेबल (400 बाइट्स) और नेटवॉन के विभाजित अंतरों पर आधारित एक इंटरपोलेशन प्रक्रिया को मिलाकर हम 0.2 माइक्रोसेकंड में लगभग 17 बिट सटीक प्राप्त कर सकते हैं।. मैंने वास्तव में रुचि रखने वाले सभी गणित के साथ एक पीडीएफ दस्तावेज़ संलग्न किया है। यह जटिल है, आपको चेतावनी दी गई है!

चरण 9: वाईफ़ाई इंटरफ़ेस

वाईफ़ाई इंटरफ़ेस
वाईफ़ाई इंटरफ़ेस
वाईफ़ाई इंटरफ़ेस
वाईफ़ाई इंटरफ़ेस

अब आपके पास एक ब्लूटूथ रिसीवर है जो रीयल-टाइम डीएसपी चलाने में सक्षम है। अफसोस की बात है कि यदि आप किसी भी डीएसपी पैरामीटर को बदलना चाहते हैं, तो आपको अपने HiFi से डिस्कनेक्ट करना होगा, एक नया स्केच अपलोड करना होगा और फिर से कनेक्ट करना होगा। यह भद्दा है। इसे ठीक करने के लिए मैंने एक वेबसर्वर विकसित किया है जिसका उपयोग आप अपने कंप्यूटर से फिर से कनेक्ट किए बिना सभी डीएसपी मापदंडों को संपादित करने के लिए कर सकते हैं। वेबसर्वर का उपयोग करने के लिए स्केच नीचे है।

#शामिल

#include btAudio audio = btAudio("ESP_Speaker"); वेबडीएसपी वेब; शून्य सेटअप () {Serial.begin(११५२००); ऑडियो.बेगिन (); इंट बैक = 26; इंट डब्ल्यूएस = 27; इंट डाउट = 25; audio. I2S (बीके, डाउट, डब्ल्यूएस); // अपने वाईफाई आईडी और पासवर्ड के साथ बदलें const char* ssid = "SSID"; कॉन्स्ट चार * पासवर्ड = "पासवर्ड"; web.begin (एसएसआईडी, पासवर्ड, और ऑडियो); } शून्य लूप () { web._server.handleClient (); }

कोड आपके ESP32 को एक IP पता प्रदान करता है जिसका उपयोग आप वेबपेज तक पहुँचने के लिए कर सकते हैं। पहली बार जब आप इस कोड को चलाते हैं तो आपको इसे अपने कंप्यूटर से जोड़ना चाहिए। इस तरह आप अपने सीरियल मॉनिटर पर अपने ESP32 को सौंपा गया IP पता देख सकते हैं। यदि आप इस वेबपेज तक पहुंचना चाहते हैं तो बस इस आईपी पते को किसी भी वेब ब्राउज़र (क्रोम पर परीक्षण) में दर्ज करें।

अब तक हमें ब्लूटूथ और I2S को सक्षम करने की विधि से परिचित होना चाहिए। मुख्य अंतर वेबडीएसपी ऑब्जेक्ट का उपयोग है। यह ऑब्जेक्ट आपके Wifi SSID और पासवर्ड को तर्क के साथ-साथ btAudio ऑब्जेक्ट के लिए एक पॉइंटर के रूप में लेता है। मुख्य लूप में, हम वेबपेज से आने वाले डेटा को सुनने के लिए लगातार वेबडीएसपी ऑब्जेक्ट प्राप्त करते हैं और फिर डीएसपी पैरामीटर अपडेट करते हैं। समापन बिंदु के रूप में, यह ध्यान दिया जाना चाहिए कि ब्लूटूथ और वाईफ़ाई दोनों ईएसपी 32 पर एक ही रेडियो का उपयोग करते हैं। इसका मतलब है कि जब आप वेबपेज पर पैरामीटर दर्ज करते हैं, तब तक आपको 10 सेकंड तक इंतजार करना पड़ सकता है, जब तक कि जानकारी वास्तव में ESP32 तक पहुंच जाती है।

चरण 10: भविष्य की योजनाएं

उम्मीद है, आपने इस निर्देश का आनंद लिया है और अब आपके HiFi में ब्लूटूथ ऑडियो और DSP जुड़ गए हैं। हालाँकि, मुझे लगता है कि इस परियोजना में विकास के लिए बहुत जगह है और मैं केवल कुछ भविष्य की दिशाएँ बताना चाहता हूँ जो मैं ले सकता हूँ।

  • ऑडियो की वाईफ़ाई स्ट्रीमिंग सक्षम करें (सर्वोत्तम ऑडियो गुणवत्ता के लिए)
  • ध्वनि आदेश सक्षम करने के लिए I2S माइक्रोफ़ोन का उपयोग करें
  • एक वाईफाई नियंत्रित तुल्यकारक विकसित करें
  • इसे सुंदर बनाएं (ब्रेडबोर्ड महान उत्पाद डिजाइन चिल्लाता नहीं है)

जब मैं इन विचारों को लागू करने के लिए तैयार हो जाऊंगा तो मैं और अधिक निर्देश दूंगा। या शायद कोई और इन सुविधाओं को लागू करवाएगा। सब कुछ खुला स्रोत बनाने का यही आनंद है!

सिफारिश की: