[IOIO] เริ่มต้นเขียนแอปพลิเคชันควบคุมบอร์ด IOIO และ IOIO-Q บน Android Studio

     Android Studio เป็น IDE ตัวใหม่ที่ทาง Google ได้นำมาใช้ในการเขียนแอปพลิเคชันสำหรับแอนดรอยด์ ซึ่งจะมีความแตกต่างกับ Eclipse ADT ที่เคยใช้กันอยู่พอสมควร แต่โค๊ดที่เป็นหัวใจสำคัญหลักก็ยังคงเหมือนเดิม

     แต่ในการใช้ Android Studio เขียนแอปพลิเคชันสำหรับบอร์ด IOIO และ IOIO-Q จะมีการสร้างโปรเจคที่แตกต่างออกไปจาก Eclipse ADT ซึ่งสามารถดูได้จากบทความ

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

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

 

     โดยจะลบ onCreateOptionMenu และ onOptionsItemSelected ออก เหลือเพียงเท่านี้

 

     ทำการเปลี่ยนคลาส ActionBarActivity (หรือคลาส Activity ใดๆ) ให้เป็น IOIOActivity แทน โดย Android Studio จะมีการเดาคำสั่งขึ้นมา สามารถกดเลือกจากหน้าต่างดังกล่าวได้เลย

 

     เมื่อพิมพ์เสร็จแล้ว ถ้าพบว่า IOIOActivity เป็นตัวหนังสือสีแดง ให้ลองกด Alt + Enter เพื่อเรียกหน้าต่างช่วยแก้ไขดู จะมี Import Class ให้เลือก ถ้าไม่มีให้เลือกอาจจะหมายความว่าพิมพ์ไม่ถูกต้อง หรือโปรเจคมองไม่เห็นไลบรารีของ IOIO ให้กลับไปดูขั้นตอนการเตรียมโปรเจคใหม่ตั้งแต่แรก

 

     โปรแกรมจะเพิ่มคำสั่ง Import ให้กับคลาส IOIOActivity อัตโนมัติ โดยไม่ต้องพิมพ์เอง

 

     ต่อไปให้พิมพ์ต่อท้ายจากปีกกาของ onCreate ดังนี้

class Looper extends BaseIOIOLooper {

}

 

     สำหรับคลาส BaseIOIOLooper จะใช้การเดาคำช่วยในการ Import Class ก็ได้ หรือจะใช้ Alt + Enter ก็ได้เช่นกัน

 

     จากนั้นให้คลิกเลือกหรือเลื่อนเคอร์เซอร์พิมพ์มาอยู่ในระหว่างปีกกาของ Looper

 

     แล้วเลือกไปที่ Code > Override Methods…

 

      จะมีหน้าต่าง Override Methods แสดงขึ้นมา ให้เลือกเมธอดทั้ง 4 ตัวดังนี้

  • setup
  • loop
  • disconnected
  • incompatible

     แล้วกดปุ่ม OK

     เมธอดที่เลือกทั้ง 4 ตัวจะถูกเพิ่มเข้ามาใน Looper ให้ทันที

 

 

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

     และเมื่อจบเมธอด setup แล้วก็จะเข้าสู่เมธอด loop ทันที โดยจะทำงานวนอยู่ในเมธอด loop ไปเรื่อยๆจนกว่าจะหยุดการเชื่อมต่อ

     สำหรับ disconnected จะเป็นเมธอดที่ทำงานเมื่อแอปพลิเคชันหยุดเชื่อมต่อกับบอร์ด

     ส่วน incompatible จะเป็นเมธอดที่ทำงานเมื่อเวอร์ชันไลบรารีของ IOIO ไม่รองรับกับเวอร์ชันเฟิร์มแวร์บนบอร์ด IOIO หรือ IOIO-Q

     ดังนั้นการเขียนโปรแกรมสั่งงานบอร์ด IOIO ทั้งหมดก็จะอยู่ภายใต้เมธอด setup และ loop ส่วน disconnected กับ incompatible มีไว้จัดการกับแอปพลิเคชันเมื่อการเชื่อมต่อกับบอร์ดมีปัญหา

 

     ทำการลบคำสั่ง super.setup(), super.disconnected(), super.loop() และ super.incompatible() ออก เนื่องจากไม่จำเป็นสำหรับการใช้งานกับบอร์ด

 

      นอกจากนี้ยังมีอีกเมธอด createIOIOLooper ที่ต้องประกาศไว้ในนี้ด้วย

      ให้คลิกเลือกหรือเลื่อนเคอร์เซอร์พิมพ์มาอยู่ที่บรรทัดต่อจากปีกการองสุดท้าย (ระหว่างปีกกาสุดท้ายและปีกการองสุดท้าย)

 

     เลือกไปที่ Code > Override Methods… แล้วเลือก createIOIOLooper(); แล้วกดปุ่ม OK (ถ้าไม่มีให้เลือก แปลว่าเคอร์เซอร์พิมพ์อยู่ผิดบรรทัด ให้กลับไปเช็คใหม่อีกครั้ง)

 

     เมธอด createIOIOLooper จะถูกเพิ่มเข้ามาให้ทันที

 

     ให้ทำการแก้ไขจากคำสั่ง

return super.createIOIOLooper();

     เป็น

return new Looper();

 

      เมื่อเตรียมคำสั่งใน MainActivity.java ที่เป็นไฟล์หลักในการเขียนคำสั่งเสร็จแล้ว ให้เปิดไฟล์ AndroidManifest.xml ขึ้นมา โดยไฟล์ดังกล่าวจะอยู่ใน ../app/src/main/AndroidManifest.xml เพื่อกำหนดค่าให้กับแอปพลิเคชัน สำหรับใช้งานบอร์ด IOIO หรือ IOIO-Q

 

     เนื่องจากบอร์ด IOIO และ IOIO-Q สามารถเชื่อมต่อผ่านบลูทูธได้ และบนแอนดรอยด์นั้นจะบังคับว่าต้องขออนุญาตในการใช้งานอุปกรณ์เหล่านี้ทุกครั้ง จึงต้องมีการประกาศขอใช้งานในไฟล์ AndroidManifest.xml ด้วย ไม่เช่นนั้นจะใช้งานไม่ได้ โดยเพิ่มคำสั่งลงไปดังนี้

<uses-permission android:name=“android.permission.BLUETOOTH” />
<uses-permission android:name=“android.permission.BLUETOOTH_ADMIN” />
<uses-permission android:name=“android.permission.INTERNET” />

 

 

     สำหรับคำสั่งดังกล่าวก็สามารถใช้การเดาคำเพื่อช่วยพิมพ์ก็ได้เช่นกัน

     เมื่อเพิ่มเสร็จแล้วก็บันทึกแล้วปิดไฟล์ AndroidManifest.xml ได้เลย

 

      ตอนนี้โปรเจคก็พร้อมที่จะเริ่มเขียนโปรแกรมแล้ว!

      ทำการประกาศ Instance สำหรับสั่งงานขาดิจิตอลเอาต์พุตของบอร์ด โดยประกาศไว้ภายในขอบเขตของ Looper และอยู่ข้างนอกเมธอดทั้ง 4 ตัว

 

      คลาส DigitalOutput ก็สามารถใช้การเดาคำเพื่อช่วยพิมพ์ได้เช่นกัน หรือจะ Import Class ผ่านการกด Alt + Enter ก็ได้

 

 

     สำหรับการกำหนดค่าให้กับ Instance ของ IOIO เพื่อใช้งานขา GPIO บนบอร์ด ควรจะกำหนดค่าผ่านในเมธอด setup เพราะเป็นเมธอดสำหรับกำหนดค่าเริ่มต้นของบอร์ดก่อนจะเริ่มทำงาน โดยจะใช้คำสั่งดังนี้

dio = ioio_.openDigitalOutput(0);

     จากคำสั่งตัวอย่างจะเป็นการกำหนดให้ dio เป็นดิจิตอลเอาต์พุตขา 0 บนบอร์ด หรือก็คือ Stat LED บนบอร์ดนั่นเอง

 

     เนื่องจากเมธอด disconnected และ incompatible ไม่ได้ใช้งานในตัวอย่างนี้ จึงขอย้ายไปไว้ข้างล่างแล้วเขยิบเมธอด loop ขึ้นมาอยู่ต่อท้ายจากเมธอด setup แทน

 

 

      ในการสั่งงานบอร์ดในขณะที่ทำงานอยู่ ควรสั่งงานในเมธอด loop เพราะว่าเมธอดนี้จะทำงานหลังจากที่เมธอด setup ทำงานเสร็จแล้ว และจะเมื่อเมธอด loop ทำงานเสร็จหนึ่งครั้ง ก็จะวนกลับมาทำงานใหม่ต่อเรื่อยๆจนกว่าจะเชื่อมต่อ

     และคำสั่งสำหรับสั่งงานดิจิตอลเอาต์พุตสำหรับบอร์ด IOIO หรือ IOIO-Q จะใช้คำสั่งว่า write ดังนี้

dio.write(true);

dio.write(false);

     โดยจะกำหนดค่าเป็นแบบ Boolean ว่าเป็น true หรือ false (ไม่สามารถกำหนดเป็นตัวเลข 0 หรือ 1 แบบภาษา C/C++ ใน Arduino ได้) โดยที่ true จะเป็นการสั่งให้ขานั้นๆมีสถานะเป็น HIGH และ false จะทำให้มีสถานะเป็น LOW หรือที่เข้าใจกันง่ายๆว่า LED “ติด” หรือ “ดับ” นั่นเอง

    แต่สำหรับขา 0 บนบอร์ด IOIO หรือ IOIO-Q จะต่อวงจรไว้แบบ Active Low หรือก็คือเมื่อสั่งให้เป็น LOW ผลก็คือ LED จะติด และถ้าเป็น HIGH ก็จะทำให้ LED ดับแทน (สำหรับขาอื่นๆก็ขึ้นอยู่กับการต่อวงจรว่าจะเป็น Active High หรือ Active Low)

     ผู้เขียนจะใช้คำสั่งให้ LED ติดดับเป็นจังหวะดังนี้

dio.write(true);

Thread.sleep(500);

dio.write(false);

Thread.sleep(500);

     จากคำสั่งดังกล่าว เมื่อเมธอด loop ทำงาน ก็จะทำให้ Stat LED บนบอร์ดดับเป็นเวลา 500 มิลลิวินาที หรือ 0.5 วินาที และติดเป็นเวลา 500 มิลลิวินาทีเช่นกัน และเมื่อทำงานเสร็จแล้วก็จะวนกลับมาทำงานแบบเดิมเรื่อยๆจนกว่าจะหยุดเชื่อมต่อ

 

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

 

     รอให้ Android Studio ทำการ Build และ Compile โปรเจคให้เรียบร้อย แล้วจะมีหน้าต่างแสดงขึ้นมาถามว่าจะให้ติดตั้งแอปพลิเคชันลงบนอุปกรณ์แอนดรอยด์ตัวไหน (ถ้าต่อสายแล้วไม่มีให้เลือกแปลว่าอาจจะยังไม่ได้เปิด USB Debugging หรือยังไม่ได้ลงไดรเวอร์ ADB ของอุปกรณ์แอนดรอยด์เครื่องนั้นๆ)

      ให้กดเลือกแล้วกดปุ่ม OK เพื่อติดตั้งได้เลย

 

 

     ในการทดสอบการทำงานให้ต่อ Bluetooth Dongle เข้ากับบอร์ด IOIO หรือ IOIO-Q ให้เรียบร้อย แล้วจ่ายไฟให้กับบอร์ด แล้วใช้อุปกรณ์แอนดรอยด์ค้นหาบลูทูธของบอร์ดก่อน (จะมีชื่อขึ้นต้นว่า IOIO (XX:XX) โดยที่ XX:XX คือ Address ของ Bluetooth Dongle ตัวนั้นๆ)

     สำหรับรหัสผ่านเพื่อเชื่อมต่อบลูทูธกับบอร์ดคือ 4545

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

 

Facebook Comments