เปลี่ยน ESP32 เป็น Walkie-Talkie เสียงระดับ HD ด้วยไลบรารี PCMFlow722

ESP-NOW two-way HD audio communication on M5Stack Core2
เปลี่ยนบอร์ด 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) 🔄

EspNowTransceiver Arduino Sketch 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 ของผู้พัฒนา ก่อนทดลองคอมไพล์โค้ดครับ

แท็ก


Blog posts

เข้าสู่ระบบ

ลืมรหัสผ่านใช่ไหม?

ยังไม่มีบัญชีใช่ไหม?
สร้างบัญชี