คุณเคยสงสัยหรือไม่ว่า WiFi ที่เราใช้ทุกวันนั้นทำงานอย่างไร หรือมีสัญญาณแรงแค่ไหนในแต่ละที่ ? Spectrum One คือโปรเจกต์ Open Hardware ที่สร้างจาก ESP32 เพื่อตอบคำถามนี้ มันนั่งอยู่บนโต๊ะของคุณ ไม่ต้องใช้โทรศัพท์ ไม่ต้อง app ไม่ต้องเครื่องอื่น แค่ ESP32 LCD1602 และ LED bar ที่แสดงสัญญาณ WiFi สดใจริง ในบทความนี้เราจะสำรวจว่า Spectrum One คืออะไร มีส่วนประกอบอะไรบ้าง และเราสามารถสร้างสิ่งนี้ได้อย่างไร
Overview - เข้าใจโปรเจกต์กันก่อน
Spectrum One เป็นโปรเจกต์ Open Hardware ที่ได้รับการรับรองจาก OSHWA (Open Source Hardware Association) UID: UK000086 มันถูกออกแบบให้ทำหน้าที่เป็นตัวมอนิเตอร์กิจกรรมเครือข่าย WiFi แบบเรียลไทม์ บนโต๊ะของคุณ
อุปกรณ์นี้ทำงานโดยการค้นหาสัญญาณ WiFi ทั้งหมดที่อยู่รอบ ๆ ตัว แล้วแสดงผลออกมาผ่านสองทาง: ที่หนึ่งคือ LED bar ที่ตอบสนองสัญญาณแบบเรียลไทม์ (ยิ่งสัญญาณแรงมาก LED ยิ่งไปมาก) และที่สองคือจอ LCD 1602 ที่แสดงข้อมูลรายละเอียด เช่น ชื่อเครือข่าย (SSID) ความแรงของสัญญาณ (RSSI) และจำนวนเครือข่ายที่พบ
สิ่งที่ทำให้ Spectrum One นั่นแตกต่างจากการใช้โทรศัพท์ app ทั่ว ๆ ไป คือมันไม่ต้องเชื่อมต่อกับ internet หรือ cloud ใด ๆ เลย มันทำงานแบบ Standalone บนไฟฟ้า USB เท่านั้น เด็ก ๆ สามารถเอามันไปวางที่ห้องต่าง ๆ ในบ้าน และดูว่าสัญญาณ WiFi ที่ไหนแรงที่สุด หรือห้องไหนที่มีสัญญาณน้อยที่สุด
Spectrum One ทำงานบน USB power แสดง RSSI -60 dBm บน LCD 1602 พร้อม LED bar
Things - ส่วนประกอบอุปกรณ์
ในการสร้าง Spectrum One เราต้องเตรียมส่วนประกอบ 8 อย่าง ซึ่งส่วนใหญ่หาได้ง่ายจากร้านอิเล็กทรอนิกส์ทั่วไป:
-
ESP32 Development Board (Developer Edition) - หัวใจของโปรเจกต์ ประมวลผลสัญญาณ WiFi และควบคุมการแสดงผลทั้งหมด
-
LCD 1602 (16 Character × 2 Lines) - จอแสดงผลข้อมูลรายละเอียด เช่น SSID และ RSSI
-
10 LEDs Bar Array (Green) - แถบ LED ที่แสดงระดับความแรงของสัญญาณแบบ Visual
-
I2C Backpack - โมดูลช่วยให้ LCD 1602 เชื่อมต่อกับ ESP32 ผ่าน I2C protocol ได้ง่าย
-
Resistor 220Ω - 10 ตัว สำหรับจำกัดกระแสให้กับ LED bar
-
Capacitor 100nF - เพื่อเสถียรภาพทางไฟฟ้า (Decoupling)
-
Tactile Switch (SPST-NO) - ปุ่มกดเดี่ยว สำหรับการโต้ตอบกับผู้ใช้ (Browse, Follow mode)
-
JST XH PCB-mounted Connector - สำหรับการเชื่อมต่อเสียบถอดได้
ส่วนประกอบเหล่านี้ทั้งหมดถูกปกแน่นอยู่บน PCB ที่กำหนดเอง (Custom PCB) ซึ่งมีเลย์เอาต์ที่จัดเรียงเพื่อความสะดวกสบาย และเกียร์เชื่อมต่อได้ดีที่สุด คุณสามารถ Order PCB จาก GitHub repository และใช้ Gerber files เพื่อให้ PCB fab house ทำให้คุณได้
โหมด UI แรก: แสดงเครือข่าย WiFi ที่แรงที่สุด (Strongest Access Point)
Story - เรื่องราวการออกแบบ
เรื่องของ Spectrum One เริ่มจากสนทนาธรรมชาติระหว่างผู้สร้างโปรเจกต์กับคู่ชีวิตของเขา พวกเขามักพูดถึงเทคโนโลยีเกี่ยวกับสุขภาพ และในครั้งหนึ่งพวกเขาถามตัวเองว่า "โลกรอบตัวเรานี้มี WiFi มากแค่ไหนกันแน่?" คำถามนี้ดูเหมือนเรียบง่าย แต่มันทำให้เขาอยากลองสร้างอะไรขึ้นมาเพื่อให้มองเห็นได้
"ทำไมต้องดาวน์โหลด app ล่ะ เมื่อฉันมี ESP32 อยู่ที่บ้านแล้ว" เขาคิดแบบนั้น งั้นเขาก็เริ่มต้นต้นแบบ Prototype ภายในวันถัดไป โค้ดยังดั้มพื้นๆ เดินสายขึ้นไปวุ่นๆ แต่มันได้ผล และสิ่งที่เขาค้นพบคือ ห้องของลูกสาวของเขามีสัญญาณ WiFi ต่ำสุดในบ้าน ซึ่งเป็นข้อมูลที่เขาอยากรู้มาตั้งแต่เริ่ม
สัปดาห์ต่อ ๆ ไป เขาทำให้โค้ดดีขึ้นและเดินสายด้วยลวด Single-core ให้เสถียรมากขึ้น หลังจากนั้นอีกสองสามสัปดาห์ เขามีเวลาว่าง เอาใจช่วยจึงเลยคิดว่า "ทำไมไม่ออกแบบ PCB ที่เหมาะสมบ้างล่ะ" และแล้ว PCB ที่จัดเรียงอย่างเฉพาะเจาะจงนั้นก็เกิดขึ้น
แต่นี่ไม่ใช่จุดจบของเรื่อง เมื่อเขาเขียนเอกสารประกอบ (Documentation) เขาตระหนักว่า Spectrum One นั้นมีศักยภาพมากกว่าการมอนิเตอร์ WiFi เพียงอย่างเดียว ด้วยการสลับ Firmware ผู้สร้างสามารถทำให้มันแสดงข้อมูลอื่น ๆ ได้ เช่น อุณหภูมิ ความชื้น หรือข้อมูลเซ็นเซอร์ใด ๆ ก็ได้ "นี่ไม่ใช่จุดจบ มันคือจุดเริ่มต้น" เขาคิดแบบนั้น
โหมด UI ที่สอง: รวมกำลังสัญญาณทั้งหมด (Total Power SUM)
Schematics - แผนผังวงจร
ส่วนทางเทคนิค Spectrum One มีเลย์เอาต์วงจรที่ค่อนข้างตรงไปตรงมา แต่ถูกออกแบบมาให้ทำงานได้อย่างมีเสถียรภาพ ESP32 เป็นจุดศูนย์กลาง (Hub) ที่รับสัญญาณ WiFi ผ่านเสาอากาศบิวท์อิน (Built-in Antenna) แล้วส่งข้อมูลไปยังสองส่วน:
การเชื่อมต่อหลัก:
1. เชื่อมต่อกับ LCD 1602 ผ่าน I2C Backpack:
- GND ของ ESP32 → GND ของ LCD Backpack
- 3.3V ของ ESP32 → VCC ของ LCD Backpack
- GPIO 21 (ESP32) → SDA (Serial Data)
- GPIO 22 (ESP32) → SCL (Serial Clock)
- ใช้ Pull-up resistor 10kΩ ระหว่าง SDA/SCL กับ 3.3V
2. เชื่อมต่อกับ LED Bar Array:
- แต่ละ LED ผ่าน Resistor 220Ω ต่อกับ GPIO ตั้งแต่ GPIO 4 ถึง GPIO 13
- Side GND ของแต่ละ LED ต่อกับ GND ของ ESP32
3. Decoupling Capacitor:
- Capacitor 100nF ต่อระหว่าง VCC และ GND ของ ESP32 เพื่อเสถียรภาพ
สำหรับเสาอากาศ ESP32 มีเสาอากาศพิมพ์ (Printed Antenna) บิวท์อิน ดังนั้นโปรเจกต์ส่วนใหญ่ไม่จำเป็นต้องเพิ่มเสาอากาศภายนอก แต่ถ้าคุณต้องการให้ไว (Sensitivity) สูงขึ้น คุณสามารถต่อ Antenna connector เพื่อใช้เสาอากาศภายนอกได้
แผนผังวงจร Spectrum One ที่สมบูรณ์
Code - การเขียนโปรแกรม
ลางเล่นของ Spectrum One อยู่ในความสามารถพิเศษของ ESP32 นั่นคือ "Promiscuous Mode" ซึ่งทำให้มันสามารถจับแพ็คเกต WiFi ทั้งหมดที่ลอยอยู่ในอากาศได้ โดยไม่จำเป็นต้องเชื่อมต่อเข้าไปในเครือข่ายนั้น ๆ
// เปิด WiFi Promiscuous Mode WiFi.mode(WIFI_AP_STA); WiFi.promiscuous(true); WiFi.onEvent(promiscuous_rx_cb); // Function ที่รับแพ็คเกตที่ค้น void promiscuous_rx_cb(void* buf, wifi_promiscuous_pkt_type_t type) { // ประมวลผลข้อมูลแพ็คเกต WiFi }
เมื่อแต่ละแพ็คเกตมาถึง ฟังก์ชัน promiscuous_rx_cb() จะทำหน้าที่ดึงข้อมูลสำคัญออกมา เช่น:
- RSSI (Received Signal Strength Indicator) - ความแรงของสัญญาณที่รับได้ (หน่วย dBm)
- Channel - ช่องความถี่ที่ใช้ในการส่ง (11 ช่อง โดยช่อง 1-13 เป็นมาตรฐาน)
- MAC Address - ที่อยู่ของอุปกรณ์ที่ส่ง (บ่งบอกเป็นตัวตนของ Router)
- Frame Type - ประเภทของแพ็คเกต (Data Frame, Beacon Frame, Probe Request เป็นต้น)
จากข้อมูลเหล่านี้ Firmware จะคำนวณสิ่งต่าง ๆ เช่น:
การประมวลผลข้อมูล:
- หาเครือข่ายที่แรงที่สุด (Strongest AP)
- รวมกำลัง RSSI ของทั้งหมด (Total Power)
- คำนวณระดับ Field Activity (ระดับกิจกรรมทั่วไป)
- นับจำนวน AP ที่ค้นพบ
- จัดเรียงตามความแรง (Sorting)
อัตราการสแกน (Scan Rate) ถูกกำหนดไว้ที่ 500 มิลลิวินาที ซึ่งหมายความว่าอุปกรณ์ทำการสแกน WiFi ประมาณ 2 ครั้งต่อวินาที อัตรานี้ช่วยให้ได้ความสมดุลระหว่างการตอบสนอง (Responsiveness) ความเสถียรของข้อมูล (Stability) และการใช้พลังงาน (Power Consumption)
โหมด UI ที่สาม: ระดับกิจกรรมเครือข่าย (Field Level)
โหมดแสดงผล (UI Modes)
Spectrum One มี 3 โหมดหลัก ที่คุณสามารถเปลี่ยนผ่านได้โดยใช้ปุ่ม:
-
Mode 0 - Strongest AP: แสดงเครือข่ายที่แรงที่สุด พร้อม RSSI และจำนวน AP ทั้งหมด
-
Mode 1 - Total Power (SUM): แสดงผลรวมกำลังสัญญาณทั้งหมด เป็นตัวชี้วัดการใช้งาน WiFi โดยรวม
-
Mode 2 - Field Level: แสดงระดับกิจกรรมทั่วไป โดยไม่แสดงรายละเอียดแต่ละเครือข่าย
นอกจากนี้ยังมี "Browse Mode" ที่ให้คุณดูรายละเอียดของแต่ละเครือข่าย (กด Hold ปุ่ม) และ "Follow Mode" ที่ติดตามเครือข่ายที่เลือก (กด Hold ปุ่มซ้ำ) ให้ติดตามการเปลี่ยนแปลง RSSI ของเครือข่ายนั้นในช่วงเวลาหนึ่ง
ทำไมต้องสร้างโปรเจกต์นี้?
Spectrum One เป็นโปรเจกต์ที่มีคุณค่าสูง เพราะหลายเหตุผล:
-
เรียนรู้เทคโนโลยีจริง: ไม่ใช่แค่ LED กระพริบ แต่เป็นการเข้าใจ WiFi Protocol, Packet Sniffing, และการประมวลผลข้อมูล
-
ประโยชน์เชิงปฏิบัติ: ใช้ Spectrum One เพื่อหา "Dead Zone" (จุดสัญญาณอ่อน) ในบ้าน และวางตำแหน่ง Router ให้เหมาะสม
-
Open Hardware: ทั้ง Source Code, Gerber Files, และ KiCad Schematics อยู่บน GitHub ฟรี ใครก็สามารถสร้างขึ้นมาได้
-
ความยืดหยุ่น: คุณสามารถแก้ไข Firmware ให้แสดงข้อมูลอื่น ๆ ได้ (Temperature, Humidity, Pollution Index ฯลฯ)
-
ความสนใจ: เป็นโปรเจกต์ที่เห็นผลลัพธ์ที่มองเห็นได้ชัด (LED + LCD) ซึ่งทำให้เด็ก ๆ สนใจเรียนเทคโนโลยีมากขึ้น