บทเรียน ESP32 41/55 - เครื่องเล่น MP3 โดยใช้การ์ด Micro SD | ชุดเรียนรู้ IoT ESP32 ของ SunFounder
ในบทช่วยสอนนี้ เราจะสร้างเครื่องเล่น MP3 โดยใช้ไมโครคอนโทรลเลอร์ ESP32 และการ์ด micro SD ESP32 จะอ่านไฟล์เสียงที่เก็บอยู่ในการ์ด micro SD และส่งเสียงออกผ่านแอมพลิฟายเออร์เสียงและลำโพง โปรเจกต์นี้รวมส่วนประกอบต่างๆ เข้าด้วยกัน รวมถึง ESP32 แอมพลิฟายเออร์เสียง และการ์ด micro SD เพื่อให้คุณสามารถเล่นเพลงได้อย่างง่ายดาย
ตลอดกระบวนการ เราจะพูดถึงการเดินสายไฟที่จำเป็น การเขียนโค้ด และวิธีแก้ไขปัญหาทั่วไป สำหรับคำแนะนำเพิ่มเติมแบบภาพ อย่าลืมดูวิดีโอที่เกี่ยวข้อง (ในวิดีโอที่ 00:00)
อธิบายฮาร์ดแวร์
ส่วนประกอบหลักที่ใช้ในโปรเจกต์นี้ ได้แก่ ไมโครคอนโทรลเลอร์ ESP32 การ์ด micro SD แอมพลิฟายเออร์เสียง และลำโพง ESP32 เป็นไมโครคอนโทรลเลอร์ที่ทรงพลังพร้อมความสามารถ Wi-Fi และ Bluetooth ในตัว ทำให้เหมาะสำหรับโปรเจกต์ IoT มันจะจัดการการประมวลผลและการควบคุมการเล่นเสียง
การ์ด micro SD ใช้เก็บไฟล์เสียงในรูปแบบ MP3 มันเชื่อมต่อกับ ESP32 และช่วยให้โปรแกรมอ่านไฟล์และส่งข้อมูลเสียงไปยังแอมพลิฟายเออร์ แอมพลิฟายเออร์เสียงรับสัญญาณดิจิทัลจาก ESP32 และขยายสัญญาณเพื่อขับลำโพง ทำให้ได้ยินเสียง
รายละเอียดจากดาต้าชีต
| ผู้ผลิต | SunFounder |
|---|---|
| หมายเลขชิ้นส่วน | ESP32 |
| แรงดันไฟฟ้าลอจิก/IO | 3.3 V |
| แรงดันไฟฟ้าจ่าย | 5 V |
| กระแสเอาต์พุต (ต่อช่อง) | สูงสุด 2 A |
| กระแสสูงสุด (ต่อช่อง) | สูงสุด 3 A |
| คำแนะนำความถี่ PWM | สูงถึง 40 kHz |
| เกณฑ์ลอจิกอินพุต | 0.3 x VCC (ต่ำ), 0.7 x VCC (สูง) |
| แรงดันตก / RDS(on) / อิ่มตัว | 0.15 V |
| ขีดจำกัดความร้อน | 85 °C |
| แพ็คเกจ | WROOM-32 |
| หมายเหตุ / รุ่นต่างๆ | เข้ากันได้กับไลบรารีเสียงต่างๆ |
- ตรวจสอบให้แน่ใจว่าการ์ด micro SD ถูกฟอร์แมตเป็น FAT32
- ใช้ตัวต้านทานสำหรับเชื่อมต่อแอมพลิฟายเออร์เสียงเพื่อป้องกันการเพี้ยน
- รักษาการเชื่อมต่อแหล่งจ่ายไฟให้เสถียรเพื่อหลีกเลี่ยงการขัดจังหวะ
- ตรวจสอบการเดินสายไฟเพื่อหาการเชื่อมต่อที่หลวมก่อนจ่ายไฟให้ระบบ
- ตรวจสอบเอาต์พุตอนุกรมสำหรับข้อมูลการดีบัก
- ใช้ลำโพงอิมพีแดนซ์ต่ำเพื่อคุณภาพเสียงที่ดีขึ้น
- เพื่อประสิทธิภาพที่ดีที่สุด ตรวจสอบให้แน่ใจว่า ESP32 ไม่ทำงานหนักเกินไปกับงานอื่นขณะเล่นเสียง
SD_MMC ใช้สำหรับการเข้าถึง micro SD และ AudioOutputI2S ใช้สำหรับเอาต์พุตเสียง
คำแนะนำการเดินสายไฟ


ในการเดินสายไฟส่วนประกอบเข้าด้วยกัน ให้เริ่มต้นด้วยการเชื่อมต่อแหล่งจ่ายไฟ เชื่อมต่อ 5 V จาก ESP32 เข้ากับพิน VCC ของแอมพลิฟายเออร์เสียง จากนั้นเชื่อมต่อพินกราวด์จาก ESP32 เข้ากับพินกราวด์ของแอมพลิฟายเออร์ พินเอาต์พุตเสียงจาก ESP32 ซึ่งปกติคือ GPIO25 ควรเชื่อมต่อกับพินอินพุตของแอมพลิฟายเออร์ผ่านตัวต้านทาน 10 kΩ
สำหรับลำโพง ให้เชื่อมต่อกับพินเอาต์พุตของแอมพลิฟายเออร์เสียง โปรดทราบว่าลำโพงไม่มีขั้ว ดังนั้นคุณสามารถเชื่อมต่อแบบใดก็ได้ เสียบการ์ด micro SD เข้าไปในช่องที่กำหนดบน ESP32 ตรวจสอบการเชื่อมต่อทั้งหมดอีกครั้งก่อนจ่ายไฟให้ระบบ
ตัวอย่างโค้ดและคำอธิบาย
ในโค้ดที่ให้มา เราเริ่มต้นด้วยการรวมไลบรารีที่จำเป็นสำหรับการเล่นเสียงและการเข้าถึงการ์ด SD ตัวระบุหลักคือ mp3, file และ out ซึ่งแทนตัวสร้าง MP3 แหล่งที่มาของไฟล์เสียง และเอาต์พุตเสียงตามลำดับ
AudioGeneratorMP3 *mp3;
AudioFileSourceSD_MMC *file;
AudioOutputI2S *out;
ที่นี่ เราประกาศพอยน์เตอร์สำหรับตัวสร้าง MP3 และแหล่งที่มาของไฟล์เสียง ในฟังก์ชัน setup() เราจะเริ่มต้นการสื่อสารอนุกรมและการ์ด SD
void setup() {
Serial.begin(115200);
if (!SD_MMC.begin()) {
Serial.println("SD card mount failed!");
}
file = new AudioFileSourceSD_MMC("/To Alice.mp3");
out = new AudioOutputI2S(0, 1);
}
ในส่วนนี้ เราจะตรวจสอบว่าการ์ด SD ถูกเมานต์สำเร็จหรือไม่ หากล้มเหลว จะพิมพ์ข้อความแสดงข้อผิดพลาด จากนั้นเราจะตั้งค่าไฟล์ MP3 และโหมดเอาต์พุตเสียง
void loop() {
if (mp3->isRunning()) {
if (!mp3->loop()) mp3->stop();
} else {
Serial.println("MP3 done");
delay(1000);
}
}
ลูปนี้จะตรวจสอบว่าไฟล์ MP3 ยังเล่นอยู่หรือไม่ หากไม่เล่น จะพิมพ์ข้อความระบุว่าการเล่นเสร็จสมบูรณ์ โค้ดเต็มจะโหลดด้านล่างบทความเพื่อการอ้างอิงเพิ่มเติม
การสาธิต / สิ่งที่คาดหวัง
เมื่อทุกอย่างถูกเดินสายและอัปโหลดโค้ดแล้ว คุณควรได้ยินเสียงเล่นผ่านลำโพงเมื่อเสียบการ์ด micro SD ตรวจสอบให้แน่ใจว่าได้รีเซ็ต ESP32 หลังจากเสียบการ์ด หากเสียงไม่เล่น ให้ตรวจสอบการเดินสายไฟและตรวจสอบว่าไฟล์เสียงถูกตั้งชื่ออย่างถูกต้องในโค้ด (ในวิดีโอที่ 05:00)
ข้อผิดพลาดทั่วไป ได้แก่ การฟอร์แมตการ์ด micro SD ไม่ถูกต้อง หรือใช้รูปแบบไฟล์เสียงที่ไม่รองรับ ตรวจสอบให้แน่ใจเสมอว่าไฟล์อยู่ในรูปแบบ MP3 และวางไว้ในไดเรกทอรีรากหรือโฟลเดอร์ที่ระบุตามต้องการ
ไทม์สแตมป์วิดีโอ
- 00:00 เริ่มต้น
- 2:19 แนะนำโปรเจกต์
- 4:27 หน้าเอกสาร
- 5:32 การเดินสายไฟสำหรับแอมพลิฟายเออร์เสียง
- 8:00 การฟอร์แมตการ์ด microSD สำหรับ ESP32
- 10:16 ไลบรารีและโค้ด
- 15:16 การเลือกบอร์ด ESP32 และพอร์ต COM ใน Arduino IDE
- 16:58 การเล่นเพลงโดยใช้ ESP32 จากการ์ด Micro SD
- 19:14 การสาธิตครั้งที่สองโดยใช้แบตเตอรี่ 18650
#include "AudioFileSourceSD_MMC.h"
#include "AudioOutputI2S.h"
#include "AudioGeneratorMP3.h"
#include "SD_MMC.h"
#include "FS.h"
// Declare pointers for the MP3 generator, file source, and output.
AudioGeneratorMP3 *mp3;
AudioFileSourceSD_MMC *file;
AudioOutputI2S *out;
void setup() {
// Start the serial communication.
Serial.begin(115200);
delay(1000);
// Initialize the SD card. If it fails, print an error message.
if (!SD_MMC.begin()) {
Serial.println("SD card mount failed!");
}
// Open the MP3 file from the SD card. Replace "/To Alice.mp3" with your own MP3 file name.
file = new AudioFileSourceSD_MMC("/To Alice.mp3");
// Set up the I2S output on ESP32's internal DAC.
out = new AudioOutputI2S(0, 1);
// Set the output to mono.
out->SetOutputModeMono(true);
// Initialize the MP3 generator with the file and output.
mp3 = new AudioGeneratorMP3();
mp3->begin(file, out);
}
void loop() {
// If the MP3 is running, loop it. Otherwise, stop it.
if (mp3->isRunning()) {
if (!mp3->loop()) mp3->stop();
}
// If the MP3 is not running, print a message and wait for 1 second.
else {
Serial.println("MP3 done");
delay(1000);
}
}
Common Course Links
Common Course Files
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารESP32 Tutorial 41/55- SunFounder doc page for playing music from memory carddocs.sunfounder.com
ไฟล์📁
ไม่มีไฟล์ที่พร้อมใช้งาน