ทดลอง Android dev (แบบไม่ Kotlin/Java) บนบอร์ด ASUS Tinker Board 2S
หลังจากเปิดกล่อง ASUS Tinker Board 2S ที่ได้รับความอนุเคราะห์จาก IBCON ให้มาลองศึกษาแล้ว วันนี้เลยมาทดลองตัว OS image แบบ Android 11 ที่ทาง ASUS ได้ build เตรียมให้ สามารถดาวน์โหลดจากเว็บของ ASUS มาทดลองเขียนลง SD card ได้เลย หรือหากอยากลอง eMMC ก็ให้เสียบสาย USB-C เข้ากับบอร์ดเพื่อทำ USB-OTG ก่อนเสียบสาย power ก็จะเขียน OS image เหมือนเขียน SD card ได้ ข้อควรระวัง อย่าเสียบสาย USB-C ก่อนเสียบสาย power ตอนใช้งานจริง เพราะตัวบอร์ดจะเข้าโหมดเลียนแบบ mass storage (สังเกตไฟ power จะไม่ติด) ทำให้ใจหายไปพักหนึ่งเพราะนึกว่าบอร์ดเจ๊ง
ขั้นแรก เตรียม dev environment
ผมยังไม่อยากเสียบเสาอากาศเข้ากับหัวต่อ uFL บนโมดูล WiFi และไม่อยากไปต่อออกจอ TV เลยใช้ Internet Connection Sharing จากฝั่งเครื่อง PC โดยเสียบสาย LAN ระหว่าง PC กับบอร์ดแทน หลังจากบอร์ดบูตเสร็จแล้ว ผมเสียบสาย USB-C เข้ากับบอร์ดแล้วใช้โปรแกรม scrcpy ทำ screen mirroring เพื่อให้สามารถสั่งงาน Android environment ผ่านเมาส์และคีย์บอร์ดบน PC ได้ ตัวโปรแกรม scrcpy จะมาพร้อมกับโปรแกรม adb ด้วย ซึ่งสะดวกในแง่ที่ไม่อยากไปดาวน์โหลดชุดพัฒนาตัวเต็ม (Android Studio) มาลงในเครื่อง (อยากประหยัดพื้นที่ใน SSD หน่อย)
ผมยังไม่อยากไปนั่งอ่าน Android dev โดยใช้ Kotlin/Java เลยอยากลองไอเดียว่า เขียน Python หรือ Node-RED ใน Android env ของบอร์ด ASUS Tinker Board 2S ได้ไหม ลองสแกนวิธีที่เคยทำดูจึงเห็นว่าแอพพลิเคชัน Termux (Linux terminal) ย้ายออกจาก Play store ให้มาดาวน์โหลด apk โดยตรง หรือผ่านแอพพลิเคชัน F-Droid (ใช้ติดตั้ง FOSS) ได้แล้ว ขั้นตอนให้ทำตามนี้
- เข้า developer mode (เข้า Settings เลือก About tablet แล้วไปคลิกซ้ำๆที่หัวข้อ Build number)
- เปิดใช้งาน System > Advanced > Developer options > Install unknown apps โดยเปิดให้ Explorer สามารถใช้ติดตั้งได้
- เปิดเบราเซอร์ Lightning (ไอคอนรูปเมฆมีสายฟ้า) แล้วค้น F-Droid หรือ Termux แล้วดาวน์โหลดมาที่บอร์ด
- ใช้แอพพลิเคชัน Explorer เปิดไปที่โฟลเดอร์ Download แล้วติดตั้งไฟล์ apk ที่ดาวน์โหลดมา
- ย้อนกลับไปที่ Install unknown apps แล้วไปเปิดสิทธิให้ Termux ด้วย
พอเสร็จขั้นตอนนี้ก็เปิดใช้แอพพลิเคชัน Termux ซึ่งก็จะเห็น terminal ที่คุ้นเคย สามารถใช้คีย์บอร์ด PC เลยสะดวกกว่าจิ้มบน soft keyboard แน่นอน
การติดตั้งซอฟต์แวร์ใน Termux จะใช้คำสั่ง pkg ด้วยรูปแบบเหมือนกับ apt คือ
- คำสั่ง
pkg update
สำหรับ sync รายการของซอฟต์แวร์กับ repository - ดูข้อมูลของซอฟต์แวร์ด้วยคำสั่ง
pkg info XXX
- ติดตั้งด้วยคำสั่ง
pkg install XXX
- อัพเกรดรุ่นของซอฟต์แวร์ที่ติดตั้งไปแล้วด้วยคำสั่ง
pkg upgrade
ทดลองดู 2 ตัวเลือกของเครื่องมือพัฒนาก่อนคือ Python และ Node.js เลยเจอว่ามีทั้งสองตัวและยังเป็นรุ่นที่ ok ด้วย โดย Python เป็น 3.10.4 ส่วน Node.js เป็น 17.8.0 และ 16.14.2 (nodejs-lts)
ลองเขียนโค้ด Python
การเขียนโค้ด Python คงไม่สนุกหากต้องใช้การพิมพ์ผ่าน Terminal เลยต้องลองแบบสะดวกหน่อยคือ Jupyter ซึ่งมี trick นิดหน่อยเพื่อหลบปัญหา build ไม่ผ่านในการติดตั้งดังนี้
- ติดตั้งไลบรารี ZMQ ด้วยคำสั่ง
pkg install libzmq
- ติดตั้งโมดูล PyZMQ ด้วยคำสั่ง
pip install --user pyzmq
- ติดตั้งโมดูล Jupyter ด้วยคำสั่ง
pip install jupyter
หลังจากนั้นจึงเรียกใช้ Jupyter แบบเปิด public ข้ามการใช้ token และไม่มี credential ด้วยคำสั่ง
jupyter notebook --ip='*' --NotebookApp.token='' --NotebookApp.password=''
ผลลัพธ์ก็ออกมา ok มี warning หลุดมาหน่อย เดี๋ยวค่อยไปว่ากันอีกทีตอนใช้งานจริงจัง
หันมาลอง Node-RED บ้าง
เมื่อ Python มี Jupyter เอาไว้ทดลองไอเดียแบบเร็วๆ ฝั่ง Node.js คงต้องเป็นชื่อนี้ Node-RED ซึ่งเป็น GUI app สำหรับพัฒนา Flow สำหรับการประมวลผล การติดตั้งต้องย้อนกลับไปรุ่น 1.3.6 ด้วยขั้นตอนดังนี้
- ติดตั้งซอฟต์แวร์ที่จำเป็นด้วยคำสั่ง
pkg install termux-api coreutils nano
- ติดตั้ง Node-RED รุ่น 1.3.6 ด้วยคำสั่ง
npm i -g --unsafe-perm node-red@1.3.6
พอติดตั้งเสร็จก็เรียกใช้ node-red
แล้วใช้เบราเซอร์มาที่ Android พอร์ต 1880 ได้เลย ทดลอง Inject > Debug ก็ดูเรียบร้อยดี
เว็บของ Node-RED จะอธิบายขั้นตอนในการ customize ตัว Node-RED ให้เชื่อมต่อฮาร์ดแวร์ รวมทั้งการ start อัตโนมัติที่น่าสนใจมาก แนะนำให้ลองไปศึกษาและทดลองเพิ่มเติมครับ
終わりに (ในตอนท้าย)
โพสต์นี้หันมาลอง Android 11 บนบอร์ด ASUS Tinker Board 2S ในอีกมุมมองหนึ่ง ซึ่งอาจจะเป็นประโยชน์หากคิดถึงการเชื่อมต่อฮาร์ดแวร์อื่นๆ รวมถึงการใช้ไลบรารีในภาษา Python หรือ Node.js แทนที่จะต้องไปตะลุยเขียน Kotlin/Java เหมือนการพัฒนาโมไบล์แอพพลิเคชันบน Android ทั่วไป อยากเรียกว่าเป็นทางเลือกในการใช้งานบอร์ดที่ออกไปทาง embedded มากขึ้นหน่อย (อยากฮาร์ดคอร์ก็ไปเขียน C/C++ ได้ด้วยการติดตั้ง gcc) ซึ่งน่าจะไปเสริมกับส่วน UI ของ Android ได้