กระทู้ไมโครคอนโทรลเลอร์ ESP32 (EP.9) ESP32 กับการใช้เป็น native USB device (HID)

สวัสดีเพื่อนสมาชิกครับ
พาพันชอบ
กระทู้ ESP32 (EP.9) วันนี้จะขอเสนอเรื่องการใช้งานประยุกต์ใช้ ESP32 ให้เป็นอุปกรณ์ input แบบ USB เรียกกันว่าเป็นอุปกรณ์ในกลุ่ม HID (Human Interface Device)

กระทู้เก่าทั้งหมด
🛑 EP.1  แนะนำเบื้องต้นให้รู้จัก ESP32
https://pantip.com/topic/44159372
🛑 EP.2  ใช้งาน ESP32 กับ web dashboard
https://pantip.com/topic/44161526
🛑 EP.3  ใช้งาน ESP32 กับ sensor ต่าง ๆ
https://pantip.com/topic/44163637
🛑 EP.4  ESP32 กับ dashboard + แจ้งเตือนผ่าน Line
https://pantip.com/topic/44165778
🛑 EP.5  ESP32 กับงาน PWM
https://pantip.com/topic/44167818
🛑 EP.6  ESP32 กับตัวรับ/ส่งสัญญาณ Infrared
https://pantip.com/topic/44168885
🛑 EP.7  ESP32 ในการประยุกต์ใช้วัดค่าตัว Resistor , Capacitor
https://pantip.com/topic/44171282
🛑 EP.8  ESP32 ในการประยุกต์ใช้กับการคุมอุปกรณ์ไฟฟ้าในห้อง
https://pantip.com/topic/44179887

ESP32 S3 (รุ่น S3 นะครับ ไม่ใช่ ESP32 ธรรมดา) มีความสามารถพิเศษอย่างหนึ่งก็คือตัวมันจะมี native USB hardware ใน chip  ก็คือเมื่อเสียบเข้า USB port ของ PC/Notebook  ESP32 S3 สามารถทำตัวเป็นอุปกรณ์ input แบบ USB โดยเป็นได้ทั้ง mouse / keyboard และอื่น ๆ ตามแต่เราจะเขียน code ประยุกต์มันให้เป็นอุปกรณ์ USB

ใน project สาธิตของกระทู้นี้ก็จะเสนอแนวทางการประยุกต์ใช้งานให้ทำงานเป็น USB keyboard และ mouse โดยรับ input ใด ๆ เข้ามาทางขา GPIO และส่งสัญญาณไปที่ PC เหมือนกับเรากดคีย์บอร์ดของคอมพิวเตอร์  ใน project นี้ผมจะสาธิตในรูปแบบของเกมสนุกอันนึงใน google chrome ก็คือเกมไดโน

ท่านที่ใช้ Google Chrome พิมพ์แบบนี้ที่ address bar ได้เลย
chrome://dino

เกมไดโนนี้เวลาเล่นจะต้องกดปุ่มลูกศรขึ้น (ARROW_UP) เพื่อให้ไดโนเสาร์กระโดดข้ามต้นกระบองเพชร โดยผมจะใช้ตัว LDR รับค่าของความสว่างในจอภาพ PC เพื่อนำไปเป็นสัญญาณกระตุ้นที่ขา GPIO ให้ ESP32 S3 สังสัญญาณเสมือนกับกดปุ่ม ARROW_UP เพื่อให้ตัวไดโนเสาร์กระโดดหลบต้นกระบองเพชรครับ

อุปกรณ์ที่ใช้มีเพียงเท่านี้


ขอเริ่มที่ตัว sensor ก่อน ใน project นี้จะใช้ sensor แสงพื้นฐานก็คือตัว LDR รับค่าความสว่างบนจอ PC  ก็คือในเกมนี้จะเป็นพื้นหลังสีดำอยู่แล้วและเมื่อมีสิ่งกีดขวางข้างหน้าไดโนเสาร์เลื่อนมา (ต้นกระบองเพชร) มันจะเป็นสีออกเทา-ขาวซึ่งก็หมายความว่าความสว่างจะเปลี่ยน  LDR ก็จะรับค่านี้ได้และไปสั่งงานให้ ESP32 S3 ส่งสัญญาณผ่าน USB ไปที่คอมพิวเตอร์เหมือนกับการปุ่มลูกศรขึ้น (ARROW_UP) เพื่อให้ไดโนเสาร์กระโดดครับ

ในการใช้งาน LDR เชื่อมต่อกับ ESP32 S3 จะต้องสร้างวงจรเองก็คือใช้ LM393 เป็นตัว comparator  ที่ต้องทำแบบนี้เพื่อจะได้มีสัญญาณ trigger ที่คมมากพอ .... จริง ๆ แล้วสามารถใช้ LDR ต่อกับตัวความต้านทานก็ได้ป้อนเข้า GPIO ก็ได้แต่ค่าแรงดันในการเปลี่ยนจาก logic 0 ไปเป็น logic 1 มันจะไม่ค่อยคมซึ่งมีผลต่อ delay time เป็นอย่างมากทำให้ส่งสัญญาณให้ไดโนเสาร์กระโดดพลาดได้ ดังนั้นจึงต้องใช้ comparator มาช่วยครับวงจรตามภาพล่างนี้

ในการติดตั้งตัว LDR ก็จ่อเข้ากับจอภาพง่าย ๆ อย่างนี้เลย


ผลลัพท์ออกมาแบบนี้
คลิกเพื่อดูคลิปวิดีโอ

นอกจากนี้แล้วด้วยความที่ ESP32 S3 มันเป็นอุปกรณ์ native USB ดังนั้นจึงสั่งให้ประยุกต์ใช้งานให้สามารถ "พิมพ์" ข้อความไปที่โปรแกรมใด ๆ ก็ได้ใน windows อย่างในคลิปบนนี้เลื่อนไปวินาทีที่ 45 ก็คือพิมพ์ข้อความภาษาอังกฤษ  ซึ่งใน code สามารถเขียน delay time ได้ว่าจะให้พิมพ์ช้าหรือเร็วเท่าไหร่  แต่การประยุกต์ใช้งานลักษณะการพิมพ์เองแบบนี้ผมก็ยังนึกไม่ค่อยออกเท่าไหร่ครับ  ดังนั้นการประยุกต์ใช้งานแบบ sensor ร่วมกับเกมไดโนเสาร์กระโดดแบบข้างบนจะมีประโยชน์มากกว่า

ในการที่จะส่งสัญญาณผ่าน USB กับทำได้ทั้ง Keyboard / Mouse  ซึ่งใน library สามารถสั่งงานได้อย่างง่าย ๆ ว่าให้เลื่อน mouse cursor อย่างไร .... จากในคลิปบน (ที่เวลา 1:02) จะเห็นว่าสามารถวาดเป็นวงกลมได้ซึ่งถ้าเราทำด้วยมือไม่มีทางทำได้กลม perfect แบบนี้แต่ใน code ทำได้ครับ

ก็หวังว่าท่านที่สนใจคงจะได้ไอเดียไปประยุกต์ใช้งานเพื่อให้เป็นเสมือนอุปกรณ์ USB สำหรับคอมพิวเตอร์ได้นะครับ
พาพันขอบคุณ
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่