ESP32 ትምህርት 39/55 - ESP32ን እንደ ብሉቱዝ ሙዚቃ ማጫወቻ መጠቀም | SunFounder የESP32 IoT መማሪያ ኪት
በዚህ ትምህርት ውስጥ፣ ESP32ን እንደ ብሉቱዝ ሙዚቃ ማጫወቻ እንዴት መጠቀም እንደምንችል እንመረምራለን። ESP32 የWi-Fi እና የብሉቱዝ አቅሞችን የሚያጣምር ኃይለኛ ማይክሮ መቆጣጠሪያ ነው፣ ይህም ለIoT መተግበሪያዎች በጣም ጥሩ ምርጫ ያደርገዋል። የብሉቱዝ A2DP ማጠቢያ (sink) በመጠቀም ኦዲዮን ወደ ESP32 እናስተላልፋለን፣ ከዚያም በተሰራው DAC በኩል ማውጣት ይቻላል።
audio_module
ይህንን ለማሳካት፣ ESP32ን የብሉቱዝ ኦዲዮ ስርጭትን ለማስተናገድ አስፈላጊ በሆኑ ቤተ-መጻሕፍት (libraries) እና ውቅሮች እናዋቅራለን። በዚህ ትምህርት መጨረሻ፣ ከስማርትፎንዎ ወይም ከሌሎች ብሉቱዝ ከሚደግፉ መሣሪያዎች መቆጣጠር የሚችሉት የሚሰራ የብሉቱዝ ኦዲዮ ማጫወቻ ይኖርዎታል። ለበለጠ ዝርዝር ማብራሪያ፣ ቪዲዮውን መመልከትዎን ያረጋግጡ (በቪዲዮው 00:00 ላይ)።
speaker_pic
ሃርድዌር ተብራርቷል
ለዚህ ፕሮጀክት ዋና ዋና ክፍሎች ESP32 ማይክሮ መቆጣጠሪያ እና BluetoothA2DPSink ቤተ-መጻሕፍት ያካትታሉ። ESP32 ያለ ምንም ተጨማሪ ሃርድዌር የኦዲዮ ውጤት እንዲኖር የሚያስችል አብሮ የተሰራ ዲጂታል-ወደ-አናሎግ መቀየሪያ (DAC) የተገጠመለት ነው። BluetoothA2DPSink ቤተ-መጻሕፍት የብሉቱዝ ኦዲዮ ማጠቢያን የማዋቀር ሂደቱን ያቃልላል፣ ይህም በብሉቱዝ የኦዲዮ ስርጭቶችን እንዲቀበሉ ያስችልዎታል።
ESP32 ለተለያዩ ዓላማዎች ሊዋቀሩ የሚችሉ በርካታ የGPIO ፒኖች አሉት፣ የኦዲዮ ውጤትን ጨምሮ። በእኛ ውቅር ውስጥ፣ GPIO25ን ለግራ እና ቀኝ የኦዲዮ ቻናሎች እንጠቀማለን። ቤተ-መጻሕፍቱ የብሉቱዝ ግንኙነትን እና የኦዲዮ ስርጭትን የማስተዳደር ሃላፊነት ይወስዳል፣ ይህም ከስር ካሉት የብሉቱዝ ፕሮቶኮሎች ይልቅ በመተግበሪያው ላይ ማተኮር ቀላል ያደርጋል።
የዳታሺት ዝርዝሮች
| አምራች |
Espressif Systems |
| የክፍል ቁጥር |
ESP32-WROOM-32 |
| የሎጂክ/IO ቮልቴጅ |
3.3 ቪ |
| የአቅርቦት ቮልቴጅ |
3.0–3.6 ቪ |
| የውጤት ኤሌክትሪክ (በአንድ ቻናል) |
እስከ 40 ሚሊአምፐር |
| የPWM ድግግሞሽ መመሪያ |
1 ኪሎሄርትዝ - 40 ኪሎሄርትዝ |
| የሙቀት ገደቦች |
125 ዲግሪ ሴልሺየስ |
| ፓኬጅ |
QFN48 |
| ማስታወሻዎች / ልዩነቶች |
የተለያዩ ውቅሮች ይገኛሉ |
- የተለመዱ የGPIO ፒኖች ለኦዲዮ ውጤት መጠቀም ይቻላል።
- ጉዳትን ለማስቀረት ትክክለኛ የኃይል አቅርቦት (3.3 ቪ) ያረጋግጡ።
- የተሻሻለ የብሉቱዝ አፈጻጸም ለማግኘት ፈርምዌሩን ወቅታዊ ያድርጉት።
- ለተሻለ የብሉቱዝ ክልል ውጫዊ አንቴናዎችን ይጠቀሙ።
- የDAC ውጤት ገደቦችን ይገንዘቡ፤ ለከፍተኛ ጥራት ኦዲዮ ውጫዊ DACዎችን ይጠቀሙ።
የሽቦ አገናኝ መመሪያዎች
esp32-39_bluetooth_audio_wiring
ESP32ን ለብሉቱዝ ኦዲዮ ማጫወት ለማስተሳሰር፣ ESP32ን ከኃይል ምንጭ በማገናኘት ይጀምሩ። አስፈላጊውን ኃይል የሚሰጥ የዩኤስቢ ገመድ በመጠቀም ከኮምፒውተርዎ ጋር ያገናኙት። በመቀጠል፣ የኦዲዮ ውጤት ፒኖችን ያገናኙ፡ የግራ ኦዲዮ ቻናልን ከGPIO25 እና የቀኝ ኦዲዮ ቻናልን ከተመሳሳዩ GPIO25 ፒን ጋር ያገናኙ። ለእነዚህ ግንኙነቶች የጃምፐር ሽቦዎችን መጠቀም ይችላሉ።
ESP32 አብሮ የተሰራ DAC ስላለው፣ ለኦዲዮ ውጤት ምንም ተጨማሪ ክፍሎች አያስፈልጉዎትም። ሆኖም፣ በESP32 እና በሚጠቀሙት ማንኛውም ውጫዊ የኦዲዮ መሣሪያ መካከል የመሬት (ground) ግንኙነት የጋራ መሆኑን ያረጋግጡ። ይህ ውቅር በብሉቱዝ በኩል ኦዲዮን በቀጥታ ወደ ESP32 እንዲያስተላልፉ ያስችልዎታል።
የኮድ ምሳሌዎች እና ማብራሪያ
የሚከተለው የኮድ ቁራጭ የብሉቱዝ A2DP ማጠቢያን ያስጀምራል እና ለኦዲዮ ማጫወት የI2S ውቅርን ያዘጋጃል።
// ==> የESP32 አብሮ የተሰራ DAC ለመጠቀም ምሳሌ
#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
void setup() {
const i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN),
.sample_rate = 44100,
.bits_per_sample = (i2s_bits_per_sample_t)16,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
};
a2dp_sink.set_i2s_config(i2s_config);
a2dp_sink.start("ESP32_Bluetooth");
}
በsetup() ተግባር ውስጥ፣ በመጀመሪያ የI2S ቅንብሮችን እናዋቅራለን፣ ሁነታውን እንደ ዋና (master) በመግለጽ እና አብሮ የተሰራውን DAC በማንቃት። የናሙና መጠኑ ለኦዲዮ ማጫወት መደበኛ ወደሆነው 44100 ሄርትዝ ተዋቅሯል። የብሉቱዝ A2DP ማጠቢያው ከዚያም በተገለጸ ስም ይጀመራል፣ ይህም በሌሎች የብሉቱዝ መሣሪያዎች እንዲታወቅ ያስችላል።
የloop() ተግባር ባዶ ሆኖ ይቀራል፣ ምክንያቱም የብሉቱዝ ቤተ-መጻሕፍቱ ስርጭቱን በጀርባ ስለሚያስተናግድ። ለበለጠ ዝርዝር ከዚህ ጽሑፍ በታች የተጫነውን ሙሉ ኮድ መመልከት ይችላሉ።
ማሳያ / ምን እንደሚጠበቅ
ውቅሩ ከተጠናቀቀ እና ኮዱ ከተጫነ በኋላ፣ ESP32ን ያብሩ እና በብሉቱዝ መሣሪያዎ ላይ "ESP32_Bluetooth" የተባለውን መሣሪያ ይፈልጉ። ከተገናኘ በኋላ፣ በተገናኘው መሣሪያ ላይ የሚጫወት ማንኛውም ኦዲዮ በESP32 በኩል መስራት አለበት። ግንኙነቶቹ ትክክል እስከሆኑ እና የኃይል አቅርቦቱ የተረጋጋ እስከሆነ ድረስ በDAC በኩል ከፍተኛ ጥራት ያለው የኦዲዮ ውጤት መጠበቅ ይችላሉ።
የተለመዱ ችግሮች የኦዲዮ ውጤት ፒኖችን በስህተት ማገናኘት እና በቂ ያልሆነ የኃይል አቅርቦት ያካትታሉ። ESP32 በትክክል ኃይል መሰጠቱን እና የመሬት ግንኙነቶቹ ደህንነታቸው የተጠበቀ መሆኑን ያረጋግጡ። ማንኛውም ችግር ካጋጠምዎ፣ ለችግር መፍቻ ምክሮች ቪዲዮውን ይመልከቱ (በቪዲዮው 00:00 ላይ)።
የቪዲዮ ጊዜ ምልክቶች
- 00:00 መጀመሪያ
- 2:12 መግቢያ
- 5:22 የሽቦ አገናኝ ተብራርቷል
- 7:51 የአርዱኖ ኮድ ተብራርቷል
- 10:37 በአርዱኖ IDE ውስጥ የESP32 ቦርድ እና የCOM ወደብ መምረጥ
- 12:19 ከሞባይል ስልክ በESP32 ሙዚቃ ማጫወት
- 13:30 የበለጠ ኃይለኛ ማጉያ ከESP32 ጋር ማገናኘት
ምስሎች
esp32-39_bluetooth_audio_wiring
speaker_pic
audio_module
esp32-39_bluetooth_audio_wiring
840-ESP32 Tutorial 39/55- Arduino code for playing audio via bluetooth
ቋንቋ: C++
// ==> Example to use built in DAC of ESP32
// R,L connect to GPIO25
#include "BluetoothA2DPSink.h"
BluetoothA2DPSink a2dp_sink;
void setup() {
const i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN),
.sample_rate = 44100, // corrected by info from bluetooth
.bits_per_sample = (i2s_bits_per_sample_t)16, //the DAC module will only take the 8bits from MSB
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = (i2s_comm_format_t)I2S_COMM_FORMAT_STAND_MSB,
.intr_alloc_flags = 0, // default interrupt priority
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false
};
a2dp_sink.set_i2s_config(i2s_config);
a2dp_sink.start("ESP32_Bluetooth");
}
void loop() {
}