โครงการแล็บการเรียนรู้ DAB+ (Digital Audio Broadcasting Plus) โดยใช้ Raspberry Pi และ RTL-SDR
- แนะนำเทคโนโลยี DAB+ และข้อดีเมื่อเทียบกับ FM
- เรียนรู้พื้นฐาน PyQt5 GUI programming ใน 1 ชั่วโมง
- การสร้าง Touch-Friendly UI สำหรับหน้าจอสัมผัส 7"
- ความรู้เบื้องต้นเกี่ยวกับ RTL-SDR และ welle.io
- ทดสอบการเชื่อมต่อและการทำงานของ RTL-SDR dongle บน Raspberry Pi
- ตรวจสอบการรู้จำอุปกรณ์และแก้ไขปัญหาไดรเวอร์
- เขียนฟังก์ชัน Python ทดสอบพื้นฐาน
- Jupyter Notebook:
lab1_rtlsdr_connect.ipynb- ทดสอบการเชื่อมต่อ RTL-SDR ผ่าน rtl_tcp
- เรียนรู้การควบคุม welle.io เพื่อรับสัญญาณ DAB+
- สแกนหาสถานี DAB+ และเล่นเสียง
- จัดการข้อมูลเมทาดาต้าและสไลด์โชว์
- Progressive Development: เรียนรู้ DAB+ แบบ step-by-step ใน 5 phases
- Phase 1a: lab3_1a.py - RTL-SDR I/Q data acquisition (pyrtlsdr)
- Phase 1b: lab3_1b.py - Network RTL-SDR client (rtl_tcp)
- Phase 2: lab3_2.py - ETI stream processing (eti-cmdline)
- Phase 3: lab3_3.py - ETI parser และ service extraction
- Phase 4: lab3_4.py - Audio playback และ slideshow
- Phase 5: lab3_5.py - Complete PyQt5 GUI application
- Google Colab Notebooks 📓:
Lab3_Phase1_IQ_Acquisition_Colab.ipynb- I/Q data acquisition และ spectrum analysisLab3_Phase2_ETI_Processing_Colab.ipynb- ETI stream processing และ parsing- ดูคู่มือใน
README_Colab_Notebooks.md
- เอกสารเปรียบเทียบ:
Lab3_SDR_vs_SI4684.md- เปรียบเทียบ RTL-SDR กับ SI4684 chip
- สร้างแอปพลิเคชันสแกนสถานี DAB+ อย่างง่าย
- ใช้ Lab 3 pipeline สำหรับหาสถานี
- เก็บข้อมูลสถานีในฐานข้อมูล SQLite พื้นฐาน
- สร้างระบบบันทึกรายการ DAB+ อย่างง่าย
- ใช้ Lab 3 pipeline สำหรับบันทึกเสียง
- จัดการตารางเวลาการบันทึกพื้นฐาน
- สร้างเครื่องมือวิเคราะห์สัญญาณ DAB+ อย่างง่าย
- ใช้ Lab 3 pipeline สำหรับวิเคราะห์สัญญาณ
- แสดงค่า SNR, RSSI, BER แบบ real-time
Lab 1 และ Lab 3 มี Jupyter Notebooks ที่สามารถรันบน Google Colab ได้:
- เชื่อมต่อกับ RTL-SDR บน Raspberry Pi ผ่าน rtl_tcp และ FRP tunnel
- ไม่ต้องติดตั้ง software บนเครื่องตัวเอง
- เหมาะสำหรับการเรียนรู้และทดลอง
- ดูคู่มือใน
Labs/Lab3/README_Colab_Notebooks.md
- Raspberry Pi 4 (แนะนำ 4GB RAM ขึ้นไป)
- RTL-SDR V4 dongle หรือเทียบเท่า
- หน้าจอสัมผัส HDMI 7 นิ้ว (อุปกรณ์เสริม)
- หูฟัง 3.5mm สำหรับฟังเสียง
- เสาอากาศ DAB/FM สำหรับรับสัญญาณ
- Raspberry Pi OS Bookworm (64-bit แนะนำ)
- Python 3.11+
- PyQt5 สำหรับ GUI
- RTL-SDR drivers และ libraries
- welle.io สำหรับ DAB+ decoding
# โคลนโครงการ
git clone <repository-url> DAB_Plus_Labs
cd DAB_Plus_Labs
# รันสคริปต์ติดตั้งอัตโนมัติ
chmod +x install_deps.sh
sudo ./install_deps.sh
# ติดตั้ง Python packages
pip install -r requirements.txt# อัพเดทระบบ
sudo apt update && sudo apt upgrade -y
# ติดตั้ง dependencies หลัก
sudo apt install -y python3-pyqt5 python3-pyqt5.qtmultimedia \
rtl-sdr librtlsdr0 librtlsdr-dev \
cmake build-essential git \
python3-matplotlib python3-scipy python3-numpy
# ติดตั้ง welle.io
sudo apt install -y qt5-qmake qtbase5-dev qtchooser \
qtmultimedia5-dev libqt5multimedia5-plugins \
libfaad-dev libmpg123-dev libfftw3-dev
# คอมไพล์ welle.io จากซอร์ส (ถ้าไม่มีใน apt)
git clone https://github.com/AlbrechtL/welle.io.git
cd welle.io && mkdir build && cd build
cmake .. && make -j4
sudo make installโครงการนี้รองรับหน้าจอสัมผัส 7 นิ้วด้วย:
- ปุ่มขนาดใหญ่ที่เหมาะสำหรับการสัมผัส
- Font ขนาดใหญ่เพื่อการมองเห็นที่ชัดเจน
- การจัดเรียง UI ที่เหมาะกับหน้าจอเล็ก
- รองรับ touch events และ gestures
# ตั้งค่าความละเอียดใน /boot/config.txt
echo "hdmi_group=2" | sudo tee -a /boot/config.txt
echo "hdmi_mode=87" | sudo tee -a /boot/config.txt
echo "hdmi_cvt 1024 600 60 6 0 0 0" | sudo tee -a /boot/config.txt
# รีสตาร์ทระบบ
sudo reboot# ตั้งให้เสียงออกทาง 3.5mm jack
sudo raspi-config nonint do_audio 1
# ทดสอบเสียง
speaker-test -t wav -c 2- เปิดไฟล์
Labs/Lab[X]/lab[X].py - อ่านคู่มือใน
Labs/Lab[X]/LAB[X].md - เติมโค้ดในส่วนที่มี TODO comments
- ทดสอบการทำงานตามคู่มือ
- ไฟล์ใน
Solutions/เป็นเฉลยครบถ้วน - สามารถใช้เป็นตัวอย่างหรือเฉลยให้ผู้เรียน
# Lab 0: PyQt5 Introduction (เริ่มต้นที่นี่)
cd Labs/Lab0
python3 lab0.py
# Lab 1: RTL-SDR Testing
cd Labs/Lab1
python3 lab1.py
# Lab 2: Welle.io Integration
cd Labs/Lab2
python3 lab2.py
# ฯลฯ สำหรับแล็บอื่นๆ# ตรวจสอบการเชื่อมต่อ USB
lsusb | grep RTL
# ตรวจสอบไดรเวอร์
rtl_test -t# ตรวจสอบการติดตั้ง
which welle-io
# ทดสอบการทำงาน
welle-io --help# ตรวจสอบ X11 forwarding (ถ้าใช้ SSH)
echo $DISPLAY
# ตั้งค่า DISPLAY variable
export DISPLAY=:0.0หลังจากทำแล็บทั้ง 6 แล็บแล้ว สามารถพัฒนาต่อได้ด้วย:
- การเชื่อมต่อกับ web API สำหรับข้อมูลสถานี
- การสร้าง mobile app ควบคุมผ่าน HTTP
- การบันทึกข้อมูลลง database
- การสร้าง streaming server
หากพบปัญหาหรือต้องการความช่วยเหลือ:
- ตรวจสอบไฟล์ LAB[X].md ในแต่ละแล็บ
- ดู Solutions/ สำหรับตัวอย่างโค้ดที่ใช้งานได้
- ตรวจสอบ logs และ error messages
- ทดสอบ hardware connections
โครงการนี้ใช้ MIT License - ดูรายละเอียดใน LICENSE file
หมายเหตุ: โครงการนี้พัฒนาขึ้นเพื่อการศึกษาเรียนรู้เท่านั้น ไม่ใช่เพื่อการใช้งานเชิงพาณิชย์