12 พฤศจิกายน 2556

[IOIO Board] รู้จักกับบอร์ด IOIO กันแล้วหรือยัง?


        เป็นอีกหนึ่งบทความที่เจ้าของบล็อกควรจะทำตั้งนานแล้ว ตอนแรกก็ไม่ได้กะจะทำหรอก แต่ว่ามีผู้ที่หลงเข้ามาอ่านที่ไม่รู้จักกับบอร์ด IOIO (โยโย่) หรือรู้จักแต่ไม่รู้ว่ามันคืออะไร



บอร์ด IOIO คืออะไร?

        บอร์ด IOIO (โยโย่) เป็นบอร์ดไมโครคอนโทรลเลอร์ตัวหนี่งที่ถูกสร้างขึ้นโดยฝีมือของ YTAI Ben-Tsvi (ชื่ออ่านว่า อีทาย) ซึ่งเป็นวิศวกรชาวอิสราเอลของบริษัท Google นั่นเอง

        สำหรับบอร์ด IOIO นั่นเป็นบอร์ดไมโครคอนโทรลเลอร์ที่เดิมทีเกิดมาเพื่อเชื่อมต่อกับแอนดรอยด์โดยเฉพาะ โดยต่างจากไมโครคอนโทรลเลอร์ตัวอื่นๆ เพราะปกติแล้วการเขียนโปรแกรมเชื่อมต่อกับแอนดรอยด์ ไม่ว่าจะใช้บอร์ดไมโครคอนโทรลเลอร์ตัวใดก็ตาม จะต้องเขียนโปรแกรมให้กับไมโครคอนโทรลเลอร์และต้องเขียนแอปพลิเคชันบนแอนดรอยด์ เพื่อให้สามารถเชื่อมต่อและส่งข้อมูลระหว่างกันได้


        บอร์ดไมโครทั่วๆไปก็รวมไปถึง Arduino ด้วยเช่นกัน ผู้ที่หลงเข้ามาอ่านหลายๆคนชอบเข้าใจกันว่าบอร์ดไมโครที่เชื่อมต่อกับแอนดรอยด์ได้นั้น จะมีแค่บอร์ด IOIO และ Arduino เท่านั้น

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

        บอร์ด IOIO จะแตกต่างจากบอร์ดทั่วๆไปตรงจุดนี้นั่นเอง เพราะเกิดมาเพื่อเชื่อมต่อและถูกสั่งงานจากแอนดรอยด์ ไม่สามารถทำงานได้ด้วยตัวเอง ต้องรอคำสั่งจากแอนดรอยด์เท่านั้น เนื่องจากการที่เกิดมาเพื่อแอนดรอยด์ ผู้พัฒนาจึงทำให้ผู้ใช้งานไม่จำเป็นต้องเขียนโค๊ดให้กับบอร์ด IOIO เลย เพราะจะมีโค๊ดใส่มาในบอร์ดให้พร้อมไว้เรียบร้อยแล้ว (หรือที่เรียกกันว่าเฟิร์มแวร์นั่นเอง)

        ดังนั้นผู้ใช้งานจึงเขียนโค๊ดแค่ฝั่งแอนดรอยด์เท่านั้น โดยผู้ผลิตจะมีไลบรารีของบอร์ด IOIO ให้ใช้ในโค๊ดฝั่งแอนดรอยด์เลย ดังนั้นจึงสามารถสั่งงานบอร์ด IOIO ด้วยคำสั่งในแอปพลิเคชัน


        ด้วยจุดดีข้อนี้ จึงทำให้ง่ายต่อการนำไปใช้งาน ไม่ต้องวุ่นวายกับการเชื่อมต่อ เพราะเฟิร์มแวร์ทำให้หมด และจะทำงานทันทีที่เชื่อมต่อกับแอนดรอยด์ แต่นั้นก็กลายเป็นข้อเสียอีกอย่างหนึ่งเช่นกัน เพราะว่าจะไม่สามารถทำงานด้วยตัวเองได้ (Standalone) เนื่องด้วยวิธีการทำงานของบอร์ด IOIO นั่นเอง ที่ทำงานแบบ Realtime คือต้องรอแอนดรอยด์สั่งงานทุกครั้ง ไม่ได้รับโค๊ดทั้งหมดจากแอนดรอยด์แล้วมาทำงานเองทั้งหมด แต่จะรอคำสั่งจากแอนดรอยด์แล้วทำคำสั่งนั้นๆทีละคำสั่งเรื่อยๆ เมื่อทำคำสั่งนั้นๆเสร็จแล้ว แอนดรอยด์ก็จะสั่งให้ทำคำสั่งต่อไปเรื่อยๆ


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



คุณสมบัติคร่าวๆของบอร์ด IOIO

        บอร์ด IOIO สร้างขึ้นโดยใช้ชิป PIC ตระกูล PIC24FJ โดยตัวบอร์ดจะมีขา I/O ให้ใช้งานได้มากถึง 48 ขา (เต็มที่เลยทีเดียว) แต่ละขามีคุณสมบัติพิเศษด้วย เช่น Analog, I2C, หรือ UART เป็นต้น ซึ่งก็เหมือนบอร์ดไมโครคอนโทรลเลอร์ทั่วๆไปนั่นเอง เพียงแต่ว่าเขียนโค๊ดที่เป็นเฟิร์มแวร์ใส่ลงในชิปให้แล้ว



        ในการเชื่อมต่อกับแอนดรอยด์จะมีสามวิธีดังนี้

        ADB : เป็นการเชื่อมต่อผ่านโปรโตคอล Android Debug Bridge เป็นโปรโตคอลที่รู้จักกันดีสำหรับนักพัฒนาแอนดรอยด์หรือผู้ที่ชอบ Modify เครื่องเล่น หรือเล่นรอมโม โดยเชื่อมต่อผ่านสาย USB โดยตรงระหว่างทั้งสอง (ไม่รองรับกับอุปกรณ์แอนดรอยด์เวอร์ชัน 4.2.2 ขึ้นไป)



        Bluetooth : เป็นการเชื่อมต่อผ่านสัญญาณบลูทูธ โดยบอร์ด IOIO สามารถเสียบ Bluetooth Dongle ได้ แล้วให้ฝั่งแอนดรอยด์เชื่อมต่อบลูทูธ ก็ใช้งานผ่านบลูทูธได้แล้ว (ต้องเพิ่มไลบรารีสำหรับเชื่อมต่อผ่านบลูทูธด้วย)



        AOA : เป็นการเชื่อมต่อผ่านโปรโตคอล Android Open Accessory ซึ่งเป็นโปรโตคอลที่เพิ่มเข้ามากับอุปกรณ์แอนดรอยด์เวอร์ชันหลังๆที่สามารถให้ทำงานกับอุปกรณ์ที่ต่อผ่านทาง USB ได้ เช่น Mouse, Keyboard และอื่นๆ ซึ่งรวมไปถึงบอร์ด IOIO เช่นกัน เป็นโปรโตคอลคนละชุดกับ Android Debug Bridge (เฉพาะอุปกรณ์ที่รองรับ USB Host และต้องปิด ADB รองรับกับอุปกรณ์แอนดรอยด์ 4.2.2 ขึ้นไปด้วย และต้องเพิ่มไลบรารีสำหรับเชื่อมต่อผ่าน AOA ด้วย)



        สำหรับการเชื่อมต่อทั้งสามแบบสามารถใช้งานร่วมกันได้ และไม่มีแบบ WiFi นะครับ ดังนั้นถ้าคิดจะใช้ WiFi ก็เลิกใช้ IOIO ได้เลยครับ (เว้นแต่ว่าเอามือถือซักตัวไป Standby ทิ้งไว้ที่ IOIO แล้วใช้อีกเครื่องส่งข้อมูลผ่าน WiFi มา)



IOIO vs Arduino อันไหนดีกว่ากัน?

        คำถามนี้เจ้าของบล็อกเจอค่อนข้างจะบ่อย ส่วนมากจะเป็นผู้ที่หลงเข้ามาอ่านที่จะทำโปรเจคจบ โดยเป็นโปรเจคที่ใช้แอนดรอยด์กับบอร์ดไมโคร แต่ไม่รู้ว่าจะใช้บอร์ด IOIO หรือ Arduino ดี


        สำหรับคำตอบจากเจ้าของบล็อกของคำถามนี้ คือ "ขึ้นอยู่กับการนำไปใช้งาน ไม่มีตัวไหนที่ดีที่สุด" ทั้งนี้ขึ้นอยู่กับคุณสมบัติของตัวบอร์ดนั้นๆด้วย อย่างเช่นบอร์ด IOIO มีข้อดีคือเขียนแค่ฝั่งแอปพลิเคชัน แต่ข้อเสียคือต้องเชื่อมต่อกับแอนดรอยด์ตลอดเวลา ส่วน Arduino ข้อดีคือ สามารถทำงานด้วยตัวเองได้ โดยไม่จำเป็นต้องเชื่อมต่อกับแอนดรอยด์ตลอดเวลา แต่ข้อเสียคือต้องเขียนโค๊ดทั้งสองฝั่งนั่นเอง

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

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


        ดังนั้นสรุปความเหมาะสมตามโปรเจคจะได้ตามนี้
                IOIO : งานที่สั่งงานแบบ Realtime และทำงานเมื่อเชื่อมต่อกับแอนดรอยด์
                Arduino : งานที่สามารถ Standalone ได้ จะเชื่อมต่อกับแอนดรอยด์ตอนไหนก็ได้

        ** อย่าลืมว่าไม่จำเป็นต้อง Arduino บอร์ดทั่วไปก็ทำได้เช่นกัน **


จาก IOIO กลายเป็น IOIO-Q

        IOIO-Q เป็นบอร์ดที่ดัดแปลงบางส่วนจาก IOIO แต่ยังคงสามารถทำงานได้เหมือนกับบอร์ด IOIO ทั้งหมด โดย IOIO-Q ผลิตขึ้นจากบริษัท Innovative Experiment หรือ INEX



IOIO-Q ต่างจาก IOIO แบบดั้งเดิมอย่างไร

        บอร์ด IOIO จะใช้ PIC24FJ256DA106 หรือ PIC24FJ256DA206 ส่วน IOIO-Q เป็น PIC24FJ128DA106 หรือ PIC24FJ128DA206 ที่ใช้ 128 แทน 256 เนื่องมาจากมีช่วงที่รุ่น 256 ขาดตลาด จึงเปลี่ยนมาใช้ 128 แทน และการเบิร์นเฟิร์มแวร์ระหว่าง 256 กับ 128 นั้นจะใช้ไฟล์แตกต่างกัน เพื่อไม่ให้เกิดความสับสน จึงเลือกใช้เป็น 128 แทนไปเลย เพราะใช้มาตั้งแต่ต้นอยู่แล้ว

โดยที่ 128 กับ 256 ที่ว่าก็คือ RAM นั่นเอง อาจจะดูว่า RAM น้อยลง แต่ในความเป็นจริงแล้วบอร์ด IOIO เป็นการทำงานแบบ Realtime การทำงานจึงใช้ RAM น้อยอยู่แล้ว เพราะไม่ได้เก็บอะไรนอกจากเฟิร์มแวร์ อย่างมากก็แค่ฟังก์ชันบัฟเฟอร์ของ Pulse Input ที่แทบจะไม่ค่อยได้ใช้งาน และไม่ต้องกังวลกับการอัพเกรดเฟิร์มแวร์ใหม่ๆ เพราะ YTAI ได้ตั้งใจจะออก IOIO ตัวใหม่ตั้งนานแล้ว ที่ออกมาขายในตอนนี้โดยมีชือว่า IOIO-OTG และเฟิร์มแวร์ของ IOIO รุ่นแรกก็หยุดไว้ที่เวอร์ชัน 3.26 แล้ว ถึงแม้ว่าจะมีเวอร์ชัน 4.00 แต่ทาง YTAI แนะนำให้ใช้ 3.26 เพราะ 4.00 นั้นทำมาเพื่อเป็นเฟิร์มแวร์สำหรับ IOIO-OTG เป็นหลัก

        เปลี่ยนจาก Switching Regulator มาเป็น Linear Regulator ที่จะทำให้รองรับช่วงแรงดันได้น้อยกว่าของเดิม โดย IOIO รองรับช่วง 6-12V ส่วน IOIO-Q รองรับช่วง 6-9V แต่ปัญหาคือ "ถ้าพังแล้วหา Regulator ตัวนี้มาเปลี่ยนได้ยาก" เพราะมีลูกค้าที่นำไปใช้งานจน Regulator พังแล้วส่งซ่อม ทำให้หาสั่ง Regulator ตัวดังกล่าวมาซ่อมไม่ได้ และอีกอย่างหนึ่งก็คือ "ชาร์ตไฟแทบจะไม่ขึ้น" เนื่องจากบอร์ด IOIO สามารถเป็น USB Host ให้กับแอนดรอยด์ได้ จึงทำให้สามารถจ่ายกระแสเพื่อชาร์ตแอนดรอยด์ขณะทำงานได้ ปัญหานี้เจ้าของบล็อกได้ทดสอบมานานกับบอร์ด IOIO ถึงแม้จะมีที่ปรับกระแสให้บนบอร์ด แต่ก็ไม่สามารถชาร์ตได้มากนัก อย่างมากก็แค่รักษาระดับแบตเตอรีของเครื่อง ที่ชาร์ตได้ก็มีแต่เครื่องเล็กๆที่กินแบตน้อยอยู่แล้ว พอมาลองทดสอบกับเครื่องอย่าง Galaxy Nexus พบว่าชาร์ตไม่ขึ้น

        จึงเป็นอีกสาเหตุหนึ่งที่ทำให้เปลี่ยนมาใช้ Linear Regulator แทน เพื่อให้จ่ายกระแสได้มากกว่า โดยแลกกับความร้อนและช่วงแรงดันที่แคบ เพราะต้องมองว่าในการใช้งานกับบอร์ด IOIO จริงๆนั้นควรจะชาร์ตมือถือได้ถึงแม้ว่าจะไม่มากก็ตาม เพื่อรองรับการนำไปใช้งานทิ้งไว้ในที่ต่างๆเป็นเวลานานๆ จึงจะปล่อยให้แบตเตอรีของแอนดรอยด์หมดไม่ได้

        สรุปก็คือ เพื่อให้สามารถซ่อมได้ง่าย เมื่อทำพัง แทนที่จะให้ซื้อตัวใหม่และสามารถชาร์ตได้ดีกว่า Switching Regulator ที่ IOIO เดิมใช้อยู่
        นอกเหนือจากนั้น IOIO-Q ก็ทำงานเหมือนกับ IOIO ทุกประการ ดังนั้นจึงไม่ต้องกังวลว่าใช้ IOIO-Q แล้วจะไม่เหมือนกับ IOIO



เมื่อ IOIO-OTG ได้ถือกำเนิดขึ้นมา

        IOIO ที่ตอบโจทย์การเป็นแขนขาสำหรับแอนดรอยด์นั้นยังไม่จบเท่านั้น เพราะ YTAI ยังได้พัฒนาต่อไปอีกจนออกมาเป็น IOIO-OTG เพื่อเพิ่มฟังก์ชันมากขึ้น โดยเฉพาะรองรับได้มากกว่าแอนดรอยด์แล้ว นั่นก็คือสามารถต่อกับ PC ได้โดยตรง แล้วรัน Java บน PC เพื่อสั่งงานได้


        ผู้ที่หลงเข้ามาอ่านอาจจะมีคำถามกันต่อว่า แล้วทำไมต้องใช้บอร์ด IOIO-OTG ในเมื่อบอร์ดตัวอื่นๆก็ต่อกับ PC ได้ อันนี้ต้องมองที่จุดเด่นของ IOIO-OTG ก่อน ว่าต่อ PC อย่างไร โดยปกติแล้วจะนิยมเชื่อมต่อผ่าน Serial Port เป็นหลัก ซึ่งจะต้องเขียนโค๊ดทั้งฝั่งบอร์ดไมโครและ PC เพื่อสื่อสารผ่าน Serial Port แต่สำหรับ IOIO-OTG หมดปัญหาเรื่องการเขียนโค๊ดฝั่งบอร์ดไมโครได้เลย เหลือแค่เขียนฝั่ง PC และสามารถเขียน Java เพื่อเชื่อมต่อกับบอร์ดได้โดยตรง ดังนั้นจึงใส่ลูกเล่นของโปรแกรมไว้บน Java ได้เต็มที่

        นึกภาพบอร์ด IOIO-OTG ที่ต่อกับเซนเซอร์บางอย่างเพื่อวัดค่าตลอดเวลา แล้วแสดงค่าผ่านโปรแกรม Java ที่เขียนขึ้นบน PC ออกมาในรูปของกราฟฟิค ซึ่งสามารถเขียนโปรแกรมได้สะดวกบนภาษา Java นั่นเอง

        Visual Basic หรือ Visual C# ก็ทำได้เหมือนกันอยู่แล้วนี่?

        คำถามนี่จะจบลงทันทีเมื่อบอกว่า Java รองรับ OS ได้กว้างกว่า เพราะงั้นจึงไม่ได้จำกัดไว้ที่ Windows เท่านั้น แต่ Mac OS และ Linux ด้วย

        บน Mac OX กับ Linux ก็มีวิธีอื่นที่เชื่อมต่อโปรแกรมเข้ากับบอร์ดไมโครได้นี่?   
 
        ลองนึกภาพว่าผู้ที่หลงเข้ามาอ่านเขียนโปรแกรม Java เพื่อคุมบอร์ด IOIO-OTG แล้วสามารถนำไปใช้บน Windows ก็ได้ Mac OS ก็ได้ หรือ Linux ก็ได้ โดยไม่ต้องมานั่งเขียนใหม่บน OS นั้นๆ นั่นเอง

        IOIO-OTG จึงสามารถตอบโจทย์ได้ค่อนข้างดีสำหรับคอ Java แต่ถ้ากรณีที่ไม่ได้ใช้งานกับ PC แต่ใช้งานกับแอนดรอยด์เป็นหลัก ไม่จำเป็นต้องใช้ IOIO-OTG ก็ได้ ใช้ IOIO หรือ IOIO-Q ก็ได้เช่นกัน





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

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