เปลี่ยนบอร์ด ESP32 (เช่น M5Stack Core2) ให้เป็นวิทยุสื่อสาร Walkie-Talkie ที่เสียงคมชัดระดับ HD
สวัสดีชาว Maker ทุกคนครับ! 🛠️ การสร้างวิทยุสื่อสาร (Walkie-Talkie) คุยกันเองด้วยบอร์ดไมโครคอนโทรลเลอร์เป็นโปรเจกต์คลาสสิกที่หลายคนน่าจะเคยผ่านตากันมาบ้าง อย่างเช่นโปรเจกต์ ESP-NOW Walkie-Talkie ของ Adafruit หรือ โปรเจกต์สุดฮิตจาก Atomic14 (เมื่อ 5 ปีที่แล้ว)
แต่วันนี้เรามีการอัปเกรดครั้งใหญ่มานำเสนอครับ! คุณ Tanaka Masayuki ได้พัฒนาไลบรารีตัวใหม่ชื่อว่า PCMFlow722 ที่จะช่วยให้บอร์ด ESP32 ที่มีลำโพงและไมโครโฟน สามารถคุยกันแบบ Two-way (Half-duplex) ผ่านโปรโตคอล ESP-NOW ได้ด้วยคุณภาพเสียงระดับ "HD Voice" ที่คมชัดกว่าเดิมหลายเท่าตัวครับ!
ทำไมต้องเป็นไลบรารีตัวนี้? (G.722 Audio Codec) 🎧
ปกติแล้วการส่งเสียงผ่าน ESP-NOW มักจะเจอปัญหาใหญ่คือ "Bandwidth ไม่พอ" ครับ:
- ไฟล์เสียงดิบๆ แบบ PCM หรือ FLAC กินแบนด์วิดท์มหาศาล ส่งไม่ทัน
- ไฟล์ MP3 ก็มีการบีบอัดที่ต้องใช้เวลาประมวลผลนานเกินไป ไม่เหมาะกับการคุยแบบเรียลไทม์ (Real-time audio)
- ไลบรารีเก่าๆ จึงมักจะใช้ G.711 ซึ่งเสียงจะแตกๆ เหมือนคุยโทรศัพท์บ้านยุคเก่า (Low-quality)
คุณ Tanaka จึงแก้ปัญหาโดยการนำโคเดก (Codec) รุ่นเก่าแต่เก๋าอย่าง G.722 มาใช้เป็น Add-on ให้กับ โปรเจกต์ PCMFlow เดิม ครับ ผลลัพธ์คือ คุณภาพเสียงกระโดดขึ้นไปเป็นระดับ HD Voice (16 kHz sampling / 7 kHz audio band) แต่กินแบนด์วิดท์ (64 kbps) เท่ากับ G.711 ตัวเก่าเป๊ะเลย! สรุปง่ายๆ คือ "ไฟล์ขนาดเท่าเดิม แต่ได้เสียงคมชัดขึ้น 2 เท่า" ครับ
💡 Maker's Tip: โปรโตคอล ESP-NOW เป็นฟีเจอร์เด็ดของชิปตระกูล ESP ที่ใช้ส่งข้อมูลหากันได้ตรงๆ โดยไม่ต้องต่อ Wi-Fi Router เลยครับ!
หากเพื่อนๆ กำลังมองหา บอร์ดตระกูล ESP32, โมดูลไมโครโฟน, ลำโพง หรือบอร์ดสำเร็จรูปซีรีส์ M5Stack แวะมาช้อปปิ้งของแท้พร้อมส่งได้ที่ Globalbyte Shop เลยครับ หรืออยากปรึกษาเรื่องการเลือกบอร์ด ก็ทักมาที่ LINE OA Globalbyteshop ได้ตลอดเลยครับ!
เปรียบเทียบ Audio Codec (เทียบให้เห็นภาพ) 📊
ตารางด้านล่างนี้เปรียบเทียบสเปกการใช้พลังงานและแบนด์วิดท์ของโคเดกแต่ละตัวครับ:
| คุณสมบัติ |
G.711 (รุ่นเก่า) |
G.722 (PCMFlow722) |
Opus |
| ย่านความถี่เสียง |
แคบ (8 kHz / ≤ 3.4 kHz) |
กว้าง (16 kHz / ≤ 7 kHz) |
กว้างมาก (8–48 kHz) |
| บิตเรต (Bitrate) |
64 kbps คงที่ |
64 kbps คงที่ |
16–32 kbps |
| การกิน CPU |
น้อยมาก |
ต่ำ |
กิน CPU หนักมาก (ใน MCU เล็กๆ) |
| คุณภาพเสียง |
เหมือนโทรศัพท์ตู้ |
HD Voice (ชัดเจนมาก) |
ดีเยี่ยม |
แม้ว่า Opus จะให้เสียงที่ดีกว่า แต่สำหรับไมโครคอนโทรลเลอร์แล้ว G.722 ตอบโจทย์ที่สุดเพราะกินซีพียูน้อย และขนาดไฟล์ (160 bytes ต่อ 20ms) พอดีกับโควตา Payload ของ ESP-NOW (250 bytes) แบบเป๊ะๆ ครับ!
⚠️ ข้อควรรู้ก่อนเริ่มโปรเจกต์
โปรเจกต์นี้เป็นการบีบอัดและถอดรหัสเสียง (Encoding/Decoding) ซึ่งต้องการบอร์ดที่มีหน่วยความจำเพียงพอ หากต้องการรันโค้ดตัวอย่าง แนะนำให้ใช้บอร์ด ESP32 ที่มีสเปกสูงเล็กน้อย (เช่น มี PSRAM) เพื่อป้องกันอาการกระตุกครับ
โครงสร้างการทำงาน (Transceiver Workflow) 🔄
ไลบรารีนี้มีหน้าที่แปลงเสียงดิบ (PCM 16 kHz) ย่อให้เป็น G.722 ส่งผ่าน ESP-NOW แล้วแปลงกลับมาให้ลำโพงฝั่งรับครับ
การทดสอบจริงบน M5Stack Core2 📱
ทางผู้พัฒนาได้นำโค้ดไปรันทดสอบบนบอร์ด M5Stack Core2 ซึ่งมีชิป ESP32, PSRAM 8MB, ลำโพง 1W และไมโครโฟน SPM4123 ในตัว โดยการทำงานคือ "ถ้ากดปุ่ม A ค้างไว้จะเป็นการส่งเสียง (Broadcast) และเวลาปกติจะเป็นฝ่ายรอรับเสียง (Receiver) ครับ"
📚 แหล่งข้อมูลศึกษาเพิ่มเติมและดาวน์โหลดโค้ด:
*คำเตือนและข้อแนะนำ: เนื้อหาบทความนี้สรุปและแปลมาจากบทความเทคโนโลยีภาษาอังกฤษ (CNX Software) การเขียนโค้ดเพื่อบีบอัดเสียงแบบ Real-time มีความซับซ้อนและอาจเกิดอาการเสียงดีเลย์ได้หากสเปกของบอร์ดหรือหน่วยความจำไม่เพียงพอ แนะนำให้ศึกษา
คู่มือบนหน้า GitHub ของผู้พัฒนา ก่อนทดลองคอมไพล์โค้ดครับ