ทีวีพังแต่รีโมทยังอยู่! แปลงรีโมทเก่าเป็น Macropad ด้วย RP2040

IR remote control to USB HID with RP2040
เปลี่ยนรีโมททีวีเก่าที่ฝุ่นจับ ให้กลายเป็นเครื่องมือสั่งงานคอมพิวเตอร์สุดคลูด้วยบอร์ด RP2040

สวัสดีชาว Maker สายหาทำทุกคนครับ! 🛠️ เคยไหมครับที่ทีวีที่บ้านพังไปแล้ว แต่รีโมทมันยังใช้งานได้ดี จะทิ้งก็เสียดาย จะเก็บไว้ก็รกบ้าน วันนี้เรามีโปรเจกต์ปั่นๆ แต่โคตรมีประโยชน์มานำเสนอครับ!

โปรเจกต์นี้มีชื่อว่า "Tossed The TV — Kept The Remote" (TTVKTR) จากคุณ Brisk4t ซึ่งไอเดียของมันคือการนำรีโมททีวีหรือรีโมทแอร์เก่าๆ ที่ใช้ อินฟราเรด (Infrared) มาแปลงให้กลายเป็น "พอยน์เตอร์พรีเซนต์งาน (Presentation Clicker)" หรือ "คีย์บอร์ดมาโคร (Macropad)" เพื่อสั่งงานคอมพิวเตอร์ได้ง่ายๆ ผ่านสาย USB ครับ!

ฮาร์ดแวร์มีแค่นี้จริงๆ หรอ? 🤯

บอกเลยว่าโปรเจกต์นี้ใช้อุปกรณ์น้อยมาก และถูกจนน่าตกใจครับ! สิ่งที่คุณต้องเตรียมมีแค่:

  • บอร์ดไมโครคอนโทรลเลอร์จิ๋ว Waveshare RP2040-Zero (บอร์ดตระกูลเดียวกับ Raspberry Pi Pico แต่ตัวเล็กกว่า)
  • ตัวรับสัญญาณอินฟราเรด (IR Receiver) ความถี่ 38 kHz ธรรมดาๆ 1 ตัว

วิธีการต่อก็ง่ายสุดๆ แค่บัดกรีขาของเซนเซอร์ IR เข้ากับบอร์ด RP2040: ขา OUT ต่อเข้า GPIO 28, ขาไฟเข้าต่อ 5V หรือ 3.3V และขา GND ต่อ GND แค่นี้ฮาร์ดแวร์ก็เสร็จแล้วครับ! (ส่วนไฟ RGB LED บนบอร์ดจะถูกต่อกับ GPIO 16 มาให้อยู่แล้วจากโรงงาน เอาไว้แสดงสถานะของเลเยอร์คำสั่ง)

💡 Maker's Tip: บอร์ดตระกูล RP2040 เป็นอะไรที่เหมาะกับการทำโปรเจกต์แปลงเป็นอุปกรณ์ USB (USB HID) มากๆ ครับ เพราะมันจำลองตัวเองเป็นคีย์บอร์ดหรือเมาส์ได้ง่ายสุดๆ

หากเพื่อนๆ กำลังหา บอร์ดพัฒนา RP2040, เซนเซอร์ตัวรับ IR 38kHz, หรืออุปกรณ์สายเชื่อมต่อต่างๆ แวะมาช้อปปิ้งของพร้อมส่งได้ที่ Globalbyte Shop เลยครับ หรืออยากปรึกษาเรื่องโปรเจกต์ ก็ทัก LINE OA Globalbyteshop มาได้ตลอดเลย!

จุดขายคือซอฟต์แวร์: ไม่ต้องนั่งเขียนโค้ดเอง! 💻

คุณอาจจะเคยเห็นโปรเจกต์แนวนี้มาบ้างอย่าง Adafruit pIRkey หรือ CH32V003-USB-IR-Receiver ซึ่งปัญหาคือพอคุณเปลี่ยนรีโมททีไร คุณต้องมานั่งแก้โค้ดใหม่ทุกที

แต่โปรเจกต์ TTVKTR นี้ฉลาดกว่านั้นครับ! ตัวเฟิร์มแวร์ถูกออกแบบมาให้สื่อสารผ่านบราวเซอร์ได้เลย (Web Serial) คุณแค่เปิดหน้า Web UI ของ TTVKTR ขึ้นมา จากนั้นก็กดปุ่มบนรีโมทใส่เซนเซอร์ แล้วกำหนดค่าบนหน้าเว็บได้เลยว่าจะให้ปุ่มนี้กดแทนปุ่มอะไรบนคีย์บอร์ด (ให้อารมณ์เหมือนตั้งค่าคีย์บอร์ด Custom ผ่านเว็บ VIA หรือ QMK เลยครับ!)

ฟีเจอร์เด็ดของ Web UI:

  • ตั้งค่าปุ่มรีโมทให้กดเป็นปุ่มคีย์บอร์ด, คุมสื่อ (Media controls) หรือทำมาโคร (Custom actions) ได้ง่ายๆ
  • ทำ Multiple layers ได้! (เช่น กดปุ่มนึงเพื่อสลับโหมดรีโมท โดยดูจากสีไฟ RGB บนบอร์ด)
  • รองรับการกดแบบ Multi-step (เช่น กดปุ่มเดียว = Ctrl + C แล้วตามด้วย Ctrl + V)

⚠️ ข้อควรรู้เรื่องเบราว์เซอร์

การตั้งค่า Web UI ต้องทำผ่านเบราว์เซอร์ที่รองรับ Web Serial API นะครับ (เช่น Google Chrome หรือ Microsoft Edge) ส่วน Firefox ในอดีตไม่รองรับ แต่เวอร์ชันใหม่ๆ เริ่มเปิดให้ใช้งานได้แล้วครับ ลองอัปเดตเบราว์เซอร์ดูก่อนลุยงานนะ!

ภาพรวมฮาร์ดแวร์เมื่อต่อเสร็จ 🛠️

IR Remote control to presentation clicker RP2040 project
บัดกรีสายแค่ 3 เส้น (ไฟ, กราวด์, สัญญาณ) ก็พร้อมใช้งานเป็นเครื่องรับสัญญาณ USB ได้เลย!

แผนผังขาบอร์ด (Pinout Diagram) 📍

Waveshare RP2040-Zero Pinout
แผนผังขาของบอร์ด Waveshare RP2040-Zero ที่มีขนาดเล็กกะทัดรัดมากๆ

หน้าเว็บตั้งค่า Web UI 🌐

TossedTheTVKeptTheRemote web UI
ตั้งค่าทุกอย่างผ่านหน้าเว็บได้เลย ไม่ต้องติดตั้งโปรแกรมลงคอมพิวเตอร์

ตัวอย่างโค้ดตั้งค่าที่บันทึกเป็นไฟล์ JSON 📄

เมื่อเราตั้งค่าผ่านหน้าเว็บเสร็จ ระบบจะสร้างไฟล์ settings.json บันทึกลงในบอร์ดให้เราอัตโนมัติ (หรือจะแก้ไฟล์ดิบๆ เองก็ได้นะ) หน้าตาโค้ดจะเป็นแบบนี้ครับ:

{
  "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 }
      ]
    }
  ]
}
      
*คำเตือนและข้อแนะนำ: เนื้อหาบทความนี้สรุปและแปลมาจากบทความเทคโนโลยีต่างประเทศ การเบิร์นเฟิร์มแวร์ลงบอร์ด RP2040 และการตั้งค่าผ่าน Web Serial อาจมีขั้นตอนจุกจิกเล็กน้อยสำหรับผู้เริ่มต้น แนะนำให้ศึกษา คู่มือและขั้นตอนการอัปโหลดโค้ดบน GitHub อย่างละเอียดก่อนลงมือทำครับ

 

แท็ก


Blog posts

เข้าสู่ระบบ

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

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