in Blog

มาเล่น Android Things กัน

หลังจาก Brillo เปิดตัวไปเมื่อปีที่แล้ว และหายไปนานมากกกกก ล่าสุด Google ปัดฝุ่นเอา Android มาใช้กับงาน IoT ใช้ชื่อว่า Android Things โดยโครงสร้างของระบบปฏิบัติการจะเป็น Android ขนาดเล็ก สามารถเขียน App เชื่อมต่อกับ Hardware ได้

หน้าตา Android Things SDK

ช่วงนี้ยังอยู่ใน Developer Preview และ DevKit ที่รองรับยังมีแค่ Intel Edison, NXP Pico i.MX6UL และ Raspberry Pi 3 น่าจะมีอุปกรณ์รองรับมากขึ้นเรื่อยๆ (ทิ้งท้ายไว้เหมือน Brillo เลยจะรอดมั๊ย)

วิธีการเขียน App ก็ง่ายมาก อันดับแรกต้องมีอุปกรณ์ที่ run Android Things กันก่อน ผมมี Raspberry Pi 3 :) ดาวน์โหลด system image จากนั้นแตกไฟล์แล้ว flash ลง SDCard ตามปกติ :) เสียบสาย LAN เสียบ usb power แล้ว boot ได้เลย แนะนำให้ต่อสาย LAN เพื่อเชื่อมต่อกับ Internet ให้ได้ก่อนเผื่อมีอัพเดทครับ

เมื่อบูตเสร็จดูหน้า Android Things Launcher จะมีข้อมูลสำหรับการเชื่อมต่อผ่าน ADB อยู่

ใช้คำสั่ง adb เพื่อเชื่อมต่อไปยังอุปกรณ์ได้เลย

adb connect ip-address

หรือจะใช้ผ่าน mDNS ชื่อ Android.local ก็ได้

adb connect Android.local

กรณีที่ต้องการใช้ Wifi ให้สั่ง intent Wifi service ได้ดังนี้

adb shell am startservice \
-n com.google.wifisetup/.WifiSetupService \
-a WifiSetupService.Connect \
-e ssid <Network_SSID> \
-e passphrase <Network_Passcode>

ดู log จาก logcat ว่า Wifi เชื่อมต่อได้หรือไม่

adb logcat -d | grep Wifi

มาลงมือเขียน App ต้องเข้าใจก่อนว่า Android Things SDK มีอะไรใช้เล่นบ้าง ถ้าดูจากโครงสร้าง

เราจะพบว่ามี Google Service ให้เล่นแน่นอน และ Things Support Library เอาไว้เรียกใช้ I/O ต่างๆ สำหรับ Content Provider จะไม่มีใน Android Things นะครับ สามารถใช้งาน UI Toolkit แสดงผลผ่านจอภาพได้ แต่ไม่มี System Bar หรือ Navigation UI มาให้ ให้เขียนเล่นกันเอง

สำหรับ Google Service ที่เรียกใช้ได้มีดังนี้

  • Cast
  • Drive
  • Firebase Analytics
  • Firebase Cloud Messaging (FCM)
  • Firebase Crash Reporting
  • Firebase Realtime Database
  • Firebase Remote Config
  • Firebase Storage
  • Fit
  • Instance ID
  • Location
  • Nearby
  • Places
  • Mobile Vision

สำหรับการเรียกใช้งาน service หรืออุปกรณ์ต่างๆ ไม่ต้องเรียกผ่าน runtime permission เพราะเป็น embeded app

สำหรับ I/O ใน Android Things สามารถเขียน App เพื่อเชื่อมต่อกับ I/O ต่างๆ ได้ เช่น GPIO, PWM, I2C, SPI และ UART ได้ สำหรับ Driver อื่นๆ ก็มีเช่นกันลองค้นหาดูได้จาก drivers samples ได้ สำหรับ IO ของ Raspberry Pi 3 เป็นแบบนี้

มาลองเขียน Blink กัน วิธีการเขียนก็ไม่ได้ยุ่งยากอะไร คล้ายๆ กับการเขียน Android App ทั่วไป แต่มีข้อแตกต่างเล็กน้อย เช่นเรียกใช้ dependencied ใน App Build Gradle เป็น

สำหรับไฟล์ AndroidManifest เราจะเรียกใช้ library ชื่อ com.google.android.things

ถ้ากลัวลืมให้ clone template มาใช้ก็ได้ มาลองเขียน Blink กัน เราจะใช้ GPIO6 ใน Android Thing จะใช้ชื่อว่า BCM6

วิธีการเรียกใช้ GPIO ก็ง่ายมากๆ มีขั้นตอนดังนี้

  • เรียกใช้ PeripheralManagerService
  • ระบุ GPIO ที่จะใช้ในกรณีนี้เราจะต่อ LED ไว้ที่ BCM6
  • กำหนดว่า GPIO จะเป็น input/output
  • ส่งค่า/อ่านค่า

มาลองดูโค้ดกันทีละส่วน Android App เริ่มจาก onCreate

สั่ง handler.post จะมาทำงานที่ blink runnable และ set ค่าให้ GPIO สลับไปมา

เราก็จะได้ blink app แล้ว สั่ง run โปรแกรมก็จะ flash ไปยัง Android Things ที่เชื่อมต่อไว้

เท่านี้ก็เรียบร้อย สำหรับ Android Things ยังอยู่ในช่วง Developer Preview ต้องรอสักระยะคงจะมี library ออกมารองรับอุปกรณ์ต่างๆ มากขึ้น สำหรับท่านที่สนใจลองไปดูใน drivers samples ก่อนได้ สำหรับตัวอย่างการเชื่อมต่ออื่นๆ ดูได้จาก git repository ครับ