Android Studio เป็น IDE ตัวใหม่ที่ทาง Google ได้นำมาใช้ในการเขียนแอปพลิเคชันสำหรับแอนดรอยด์ ซึ่งจะมีความแตกต่างกับ Eclipse ADT ที่เคยใช้กันอยู่พอสมควร แต่โค๊ดที่เป็นหัวใจสำคัญหลักก็ยังคงเหมือนเดิม
แต่ในการใช้ Android Studio เขียนแอปพลิเคชันสำหรับบอร์ด IOIO และ IOIO-Q จะมีการสร้างโปรเจคที่แตกต่างออกไปจาก Eclipse ADT ซึ่งสามารถดูได้จากบทความ
- การสร้างโปรเจคสำหรับ IOIO และ IOIO-Q บน Android Studio ด้วย File Dependencies
- การสร้างโปรเจคสำหรับ IOIO และ IOIO-Q บน Android Studio ด้วย Module Dependencies
เมื่อเตรียมโปรเจคเรียบร้อยแล้ว ในบทความนี้ก็จะเป็นตัวอย่างการเขียนแอปพลิเคชันบน 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
เมธอดที่เลือกทั้ง 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 นั้นมีการกระพริบติดดับเป็นจังหวะตามที่ได้เขียนโปรแกรมสั่งงานไว้