10 ธันวาคม 2556

[Android Dev Tips] USB Host และ USB Accessory บน Android


        วันนี้พักสมองกับโค๊ดกันซักหน่อย แล้วมาคุยเรื่องอื่นๆบนแอนดรอยด์กันบ้าง ก็เลยจะมาขอพูดถึงเรื่อง USB Host กับ USB Accessory กันเสียหน่อย ซึ่งเดาว่าผู้ที่หลงเข้ามาอ่านอาจจะได้ยิน USB Host กันมาบ้างแล้ว แต่ USB Accessory นี่สิ น่าจะมีน้อยคนที่เคยผ่านหูกับคำนี้กันมาบ้าง


        ในการทำงานของ USB นั้น มีหลักการง่ายๆที่เรียกอุปกรณ์ที่เชื่อมต่อ USB ว่า Host กับ Client (Slave) ซึ่ง Host กับ Client ก็คือรูปแบบการทำงานของอุปกรณ์นั้นๆ โดยการเชื่อมต่อ USB ใดๆก็ตาม จะต้องมีอุปกรณ์ตัวหนึ่งที่ทำหน้าที่เป็น Host และอุปกรณ์อีกตัวหนึ่งทำหน้าที่เป็น Client นั่นเอง เข้าใจไม่ยากเนอะ

        ถ้ายังนึกไม่ออกก็ให้นึกถึงเวลาที่ต่ออุปกรณ์แอนดรอยด์เข้ากับคอมพิวเตอร์ คอมพิวเตอร์ก็จะทำหน้าที่เป็น Host ในขณะที่แอนดรอยด์เป็น Client นั่นเอง




USB Host


        แล้วถ้ากรณีที่อุปกรณ์แอนดรอยด์กลายเป็น Host ซะเองล่ะ? ผู้ที่หลงเข้ามาอ่านหลายๆคนคงรู้กันอยู่แล้ว และก็อาจจะยังไม่รู้ก็มี ถ้ายังไม่รู้ว่าอุปกรณ์แอนดรอยด์ทำงานเป็น Host ได้ ให้อ่านบทความนี้ก่อน [Android] USB OTG ใช้กับ Galaxy Nexus ยังไง มาดูกัน

        อุปกรณ์แอนดรอยด์สามารถทำงานเป็น Host ได้ โดยใช้สายที่เรียกว่า OTG หรือ On-The-Go (แล้วแต่จะเรียก) USB Host ก็จึงหมายความว่าการเชื่อมต่อผ่าน USB โดยที่อุปกรณ์แอนดรอยด์ทำหน้าที่เป็น Host นั่นเอง


        ซึ่งทาง Google ก็ได้เตรียม API สำหรับ USB Host ไว้อยู่แล้ว เพื่อให้ผู้ที่หลงเข้ามาอ่านสามารถสร้างแอปพลิเคชันที่รองรับกับอุปกรณ์ USB ต่างๆที่จะนำมาต่อกับอุปกรณ์แอนดรอยด์ เดิมทีเครื่องที่รองรับจะสามารถใช้งานอุปกรณ์พื้นฐานได้อยู่แล้ว เช่น เม้าส์ คีย์บอร์ด หรือจอยเกม ซึ่งได้สร้างให้รองรับในตัว แต่สำหรับอุปกรณ์นอกเหนือออกไปอย่างเช่น แฟลชไดร์ฟ จะต้องเขียนแอปพลิเคชันมาจัดการกับการเชื่อมต่อเอง เพราะถือว่าเป็นอุปกรณ์นอกเหนือไปจากอุปกรณ์พื้นฐานทีมีอยู่


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

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



        จริงๆมีอีกเยอะ แต่เจ้าของบล็อกขี้เกียจยกตัวอย่าง สำหรับ API ของ USB Host สามารถศึกษาได้ที่ USB Host - Android Developer



USB Accessory

        เมื่ออุปกรณ์แอนดรอยด์ทำงานเป็น Host เรียกว่า USB Host ดังนั้น USB Accessory ก็เป็นการทำงานแบบ Client นั่นเอง แต่อ้าว ปกติต่อกับคอมก็ทำงานเป็น Client อยู่แล้วนี่นา การเชื่อมต่อกับคอมถือว่าเป็นข้อยกเว้นละกันเนอะ

        กรณีที่อุปกรณ์แอนดรอยด์ทำหน้าที่เป็น Client และอุปกรณ์ USB ทำหน้าที่เป็น Host (ยกเว้นคอมพิวเตอร์) จะเรียกว่าเป็นการเชื่อมต่อแบบ USB Accessory ซึ่งการทำงานจะขึ้นอยู่กับแอปพลิเคชันอีกนั่นแหละ


        จุดเด่นของ USB Accessory ที่ต่างจาก USB Host ก็คืออุปกรณ์ USB ที่เป็น Host จะจ่ายไฟให้อุปกรณ์แอนดรอยด์หรือก็คืออุปกรณ์แอนดรอยด์เชื่อมต่อไปชาร์จไฟไปด้วย

        โดยอุปกรณ์ที่ทำหน้าที่เป็น Host ส่วนใหญ่นั้นจะเป็นบอร์ดไมโครคอนโทรลเลอร์ซะมากกว่า อย่างเช่น Arduino Due หรือ IOIO เป็นต้น ซึ่งบอร์ดเหล่านี้สามารถเชื่อมต่อกับมือถือได้ เพราะมีช่องเสียบ USB อยู่บนบอร์ดอยู่แล้ว ตัวบอร์ดก็จะสามารถเชื่อมต่อแบบ USB Acessory ได้เลย




        USB Accessory มักจะเป็นนักพัฒนาไมโครฯที่รู้จักกัน ส่วนมากก็จะนำอุปกรณ์แอนดรอยด์ไปเชื่อมต่อกับบอร์ด เพื่อให้สั่งงานควบคุมวงจรต่างๆได้นั่นเอง ง่ายๆเลยก็คือ Home Automation อย่างการเปิด-ปิดไฟ

        สำหรับ API ของ USB Accessory สามารถศึกษาเพิ่มเติมได้ที่ USB Accessory - Android Developer



ดูยังไงว่าเป็น Host หรือ Client ?

        ดูได้ไม่ยากจากหัวต่อ USB นั้นแหละ อุปกรณ์ฝั่งไหนมีหัว USB เป็นตัวเมีย ตัวนั้นเป็น Host


        อุปกรณ์แอนดรอยด์ต่อเข้ากับสาย OTG จึงถือว่าฝั่งอุปกรณ์แอนดรอยด์มีหัวต่อเป็น USB ตัวเมีย จึงเป็น Host อุปกรณ์ที่จะมาต่อก็จะต้องเป็น USB ตัวผู้ จึงเป็น Client ดังนั้นจึงเป็นการเชื่อมต่อแบบ USB Host

        ถ้าฝั่งอุปกรณ์แอนดรอยด์เป็น USB ตัวผู้และอุปกรณ์ที่มาต่อมีช่องต่อเป็น USB ตัวเมีย จึงถือว่าอุปกรณ์แอนดรอยด์เป็น Client และอุปกรณ์ที่มาต่อด้วยเป็น Host จึงเป็นการเชื่อมต่อแบบ USB Accessory



อุปกรณ์แอนดรอยด์รุ่นไหนรองรับ USB Host กับ USB Accessory บ้าง ?

        อันนี้เจ้าของบล็อกตอบให้เลยไม่ได้หรอกนะ เพราะอุปกรณ์แอนดรอยด์มีเป็นร้อยกว่ารุ่น แต่ละรุ่นก็ไม่ได้เหมือนกันทั้งหมดอยู่แล้ว ถ้าอยากรู้ก็เช็คดูเลย โดยใช้แอปพลิเคชันที่ชื่อว่า Your Device Features [Google Play]



        เจ้าของบล็อกเขียนเองแหละ เอาไว้เช็คเครื่องว่าเครื่องนั้นๆรองรับฟีเจอร์ใดๆได้บ้าง โดยจะมี USB Host และ USB Accessory แสดงให้เห็น



        จากตัวอย่างก็จะเห็นว่าเครื่องที่ใช้ทดสอบไม่รองรับ USB Host แต่รองรับ USB Accessory

        สำหรับ USB Accessory เดาได้ไม่ยาก Android 2.3.6 ขึ้นไปจะรองรับ ส่วน USB Host จะเป็น Android 3.1 ขึ้นไป มีอยู่บางรุ่นที่ไม่รองรับ อย่างเช่น LG Nexus 4 และ LG Optimus G เป็นต้น อยากจะลองใช้ USB Host หรือ USB Accessory ก็ลองเช็คดูก่อนว่าเครื่องที่ใช้อยู๋รองรับหรือไม่ ไม่งั้นเดี๋ยวไม่รู้ว่าเครื่องไม่รองรับ พอใช้ไม่ได้แล้วมาถามอีก

        อยากเป็นนักพัฒนาแอนดรอยด์แหวกแนวก็ลองเล่นฟีเจอร์พวกนี้ดู แล้วจะรู้ว่าแอนดรอยด์ทำอะไรได้อีกเยอะ ^ ^



เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium