Brisk4t ได้พัฒนาโครงการเฟิร์มแวร์โอเพนซอร์สชื่อ “Tossed The TV — Kept The Remote” (TTVKTR) สำหรับบอร์ด USB ที่ใช้ชิป RP2040 ของ Raspberry Pi โดยมีเป้าหมายเพื่อลดขยะอิเล็กทรอนิกส์ ด้วยการนำรีโมตอินฟราเรด (IR) เก่าที่ไม่ได้ใช้งานแล้ว มาดัดแปลงเป็นรีโมตควบคุมการนำเสนอ (Presentation Clicker)
บอร์ด Raspberry Pi RP2040 ที่มีพอร์ต USB ส่วนใหญ่สามารถใช้งานได้ แต่โครงการนี้แนะนำให้ใช้ Waveshare RP2040-Zero ร่วมกับตัวรับสัญญาณอินฟราเรดมาตรฐานความถี่ 38 kHz เนื่องจากมีขนาดเล็กและราคาประหยัดเพียงประมาณ $4(~130฿) ถึง $5(~165฿) นอกจากนี้ยังสามารถใช้ไฟ RGB LED ที่ติดตั้งมาบนบอร์ดสำหรับแสดงสถานะของเลเยอร์ต่าง ๆ ได้อีกด้วย
ฮาร์ดแวร์ที่ต้องใช้ มีอุปกรณ์ที่จำเป็นมีเพียงไม่กี่ชิ้น โดยต้องบัดกรีขาของตัวรับสัญญาณ IR เข้ากับบอร์ดดังนี้ ขา OUT → GPIO 28, ขา VCC → 5V หรือ 3.3V และขา GND → GND การเชื่อมต่อค่อนข้างง่ายและไม่ซับซ้อน ส่วนไฟ RGB LED แบบ WS2812 บนบอร์ด RP2040-Zero ถูกเชื่อมต่อกับ GPIO 16 มาเรียบร้อยแล้ว เราได้พยายามค้นหาบอร์ด RP2040 USB ที่มีตัวรับสัญญาณ IR ในตัว แต่ยังไม่พบบอร์ดที่รองรับลักษณะดังกล่าว

เฟิร์มแวร์จะรับรหัส IR จากตัวรับสัญญาณ 38 kHz และแปลงเป็นรายงาน USB HID ตามการตั้งค่าที่กำหนดไว้ในไฟล์ JSON ซึ่งถูกเก็บอยู่ในระบบไฟล์ของอุปกรณ์ แต่ผู้ใช้ไม่จำเป็นต้องแก้ไขไฟล์ JSON ด้วยตนเอง เนื่องจากมีเครื่องมือกำหนดค่าผ่านเว็บเบราว์เซอร์ที่สามารถสื่อสารกับบอร์ดผ่าน Web Serial ได้ ทำให้สามารถเรียนรู้รหัส IR จากรีโมต, กำหนดปุ่มต่าง ๆ ได้ผ่านอินเทอร์เฟซแบบกราฟิก, จัดการเลย์เอาต์และเลเยอร์ได้ง่าย แนวทางนี้คล้ายกับโปรแกรม VIA หรือ QMK ที่ใช้กับคีย์บอร์ดแมคคานิคอลและแมคโครแพด จึงใช้งานง่ายกว่างานลักษณะเดียวกัน เช่น Adafruit pIRkey และ CH32V003-USB-IR-Receiver ที่ต้องแก้ไขโค้ดสำหรับรีโมตแต่ละรุ่นด้วยตนเอง

เว็บอินเทอร์เฟซของ TTVKTR รองรับฟีเจอร์ต่าง ๆ ดังนี้:
- อินเทอร์เฟซบนเว็บสำหรับกำหนดปุ่มรีโมตให้ทำงานเป็นคีย์บอร์ด ปุ่มควบคุมสื่อ หรือคำสั่งพิเศษต่าง ๆ
- รองรับหลายเลเยอร์สำหรับรีโมตตัวเดียว โดยใช้ไฟ RGB LED บนบอร์ดแสดงสถานะเลเยอร์ปัจจุบัน
- รองรับการส่งคำสั่งหลายขั้นตอน , การกดปุ่มร่วมกับ Modifier เช่น Ctrl, Alt หรือ Shift, การกดซ้ำอัตโนมัติ และการเรียกใช้คำสั่งต่อเนื่องหลายรายการ
- รองรับ Layout เพื่อแยกความแตกต่างของรีโมต IR หลายตัว
- มีตัวแก้ไขไฟล์ JSON สำหรับผู้ใช้ขั้นสูง
ตัวอย่างไฟล์ JSON ที่จัดเก็บอยู่ในไฟล์ /settings.json ภายในพาร์ทิชันของบอร์ด:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
{ "ir": { "modeChangeCode": "0xC40387EE", "modeCount": 2, "receivePin": 28, "handleRepeat": true, "repeatInitialDelayReports": 5 }, "led": { "pin": 16, "modeColors": ["0xFF0040", "0x0080FF"], "brightnessPercent": 10 }, "modes": [ { "name": "Layer 1", "slots": [ { "irCode": "0xC40387EE", "type": "consumer", "key": "0xCD" }, { "irCode": "0x...", "type": "keyboard", "key": "0x28" }, { "irCode": "0x...", "type": "keyboard", "key": "0x1D", "mods": "0x01" }, { "irCode": "0x...", "type": "mode_switch" }, { "irCode": "0x...", "type": "text", "value": "hello world" }, { "irCode": "0x...", "type": "combo", "steps": [ { "type": "keyboard", "key": "0x04", "mods": "0x01" }, { "type": "keyboard", "key": "0x4C" } ]} ] } ], "layouts": [ { "name": "Default Layout", "buttons": [ { "irCode": "0x...", "x": 0, "y": 0 }, { "irCode": "0x...", "x": 1, "y": 0 } ] } ] } |
เครื่องมือกำหนดค่าผ่านเว็บต้องใช้เบราว์เซอร์ที่รองรับ Web Serial เช่น Chrome, Edge และ Firefox เวอร์ชันใหม่
ซอร์สโค้ดของเฟิร์มแวร์ (Arduino / PlatformIO) รวมถึงเว็บอินเทอร์เฟซ (HTML + JavaScript) พร้อมคำแนะนำสำหรับการคอมไพล์และเริ่มต้นใช้งาน ถูกเผยแพร่แบบโอเพนซอร์สบน GitHub
แปลจากบทความ : Convert old IR remote controls into presentation clickers using an RP2040 USB board and open-source TTVKTR firmware

บรรณาธิการข่าวและบทความภาษาไทย CNX Software ได้มีความสนใจในด้านเทคโนโลยี โดยเฉพาะ Smart Home และ IoT


