Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Android Things: Dự án đầu tiên của bạn

by
Difficulty:BeginnerLength:MediumLanguages:
This post is part of a series called Android Things.
Introduction to Android Things
Android Things: Peripheral Input/Output

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Android Things, nền tảng mới của Google để tạo ra các thiết bị kết nối Internet of Things (IOT), là một cách dễ dàng để lần đầu tiên trải nghiệm một trong những công nghệ quan trọng của tương lai. Trong hướng dẫn này, bạn sẽ tìm hiểu cách làm thế nào để thiết lập với Android Things. Bạn sẽ tạo ra dự án đơn giản đầu tiên của bạn và bước đầu sử dụng GPIO (General Purpose Input/Output) để đọc nút bấm và ánh sáng của một đèn LED.

Để tìm hiểu cơ bản về Android Things, hãy đọc bài viết của tôi ở đây trên Envato Tuts+.

Flash Bo mạch của bạn

Trước khi bạn có thể bắt đầu lập trình cho Android Things, bạn sẽ cần phải thiết lập một bo mạch vật lý để chạy hệ điều hành.

Hiện tại có ba tùy chọn bo mạch:

  • Raspberry Pi
  • Intel Edison cùng với Arduino Breakout Board
  • NXP Pico i.MX6UL

Trong bài này, tôi sẽ hướng dẫn cho bạn cách làm thế nào để thiết lập với Raspberry Pi, vì nó là phổ biến nhất và giá cả phải chăng so với các mẫu bo mạch hiện đang được hỗ trợ. Nếu bạn đang sử dụng một môi trường phát triển khác, bạn có thể tìm thấy hướng dẫn cụ thể để flash bo mạch của bạn trên trang tài liệu hướng dẫn Android Things chính thức.

Raspberry Pi

Để đặt Android Things lên trên Pi, bạn sẽ cần Raspberry Pi 3 B và phần cứng bổ sung sau đây:

  • Cáp HDMI và một màn hình (giống như một màn hình máy tính)
  • Cáp Ethernet để kết nối internet của bạn
  • Cáp Micro-USB
  • Thẻ nhớ Micro SD với ít nhất 8GB trống, và một bộ chuyển đổi thẻ SD
SD card and adapter
  • Một máy tính có thể đọc và ghi vào một thẻ SD

Một khi bạn đã tập hợp tất cả các thành phần cần thiết, bạn sẽ cần phải tải về tập tin hệ thống mới nhất cho Raspberry Pi từ Google. Tất cả những tập tin hệ thống mới nhất có thể được tìm thấy trên trang Android Things System Image Downloads.

Một khi bạn đã tải về tập tin, bạn sẽ cần phải giải nén nó để lấy tập tin .img. Do kích thước của tập tin, một số chương trình có thể gặp vấn đề về giải nén, chẳng hạn như Archive Utility tiêu chuẩn trên OS X, sẽ trả về một .cpgz hoặc .zip trong một vòng lặp đi lặp lại. Nếu điều này xảy ra, bạn có thể cài đặt Unarchiver cho OS X hoặc 7zip cho Windows để giải nén tập tin chính xác.

Với tập tin .img đã được giải nén, bạn sẽ cần phải đặt nó trên thẻ SD của bạn. Quá trình này có thể khác tùy theo hệ điều hành. Phần này sẽ thực hiện trên OS X, mặc dù hướng dẫn cũng có cho LinuxWindows.

Đầu tiên, lắp thẻ SD vào máy tính của bạn. Nếu thẻ SD của bạn không được định dạng là FAT-32, thì bạn sẽ cần phải làm điều này ngay bây giờ. Tiếp theo, bạn sẽ cần phải chạy lệnh diskutil list để tìm đường dẫn đến thẻ SD của bạn.

Terminal output from diskutil list command

Trong hình trên, toàn bộ thẻ SD có đường dẫn /dev/disk3 (không nên nhầm lẫn với định danh phân vùng disk3s1). Sử dụng đường dẫn này, chạy lệnh diskutil unmountDisk để đĩa có thể được flash.

Terminal output from diskutil unmountDisk command

Bước cuối cùng trong việc flash Android Things cho Raspberry Pi là sao chép tập tin hệ thống vào thẻ SD của bạn với lệnh sau đây (cập nhật đường dẫn chính xác cho tập tin và số ổ đĩa của bạn): sudo dd bs=1m if=image.img of=/dev/rdisk# from diskutil>

Terminal output from checking progress on Android Things image copying to sd card

Điều quan trọng cần lưu ý là hoạt động này có thể mất một vài phút. Bạn có thể kiểm tra tiến độ hiện tại với lệnh Control-T.

Khi tập tin hệ thống của bạn đã được flash vào thẻ SD, hãy tháo thẻ micro SD khỏi adapter của bạn và nhét nó vào dưới cùng của Raspberry Pi.

Raspberry Pi with inserted SD card

Tiếp theo, kết nối Raspberry Pi của bạn đến màn hình thông qua cáp HDMI, kết nối mạng với cáp ethernet, và một nguồn điện (như máy tính của bạn) bằng cáp micro USB type-B.

Raspberry Pi with minimum connections necessary to finish setup

Khi Raspberry Pi của bạn đã khởi động, bạn sẽ thấy những thứ sau đây trên màn hình của bạn.

Android Things display screen with IP address shown

Bạn sẽ thấy địa chỉ IP của thiết bị ở dưới cùng của màn hình. Bạn sẽ cần điều này để kết nối đến bo mạch Android Things của bạn với lệnh adb connect <địa chỉ IP>.

Tại thời điểm này, bạn sẽ có thể kết nối đến bo mạch Android Things vừa mới được flash của bạn và tải các ứng dụng vào trong đó, đó là những gì mà chúng ta sẽ thảo luận trong phần tiếp theo. Nếu bạn muốn ngắt kết nối Raspberry Pi của bạn khỏi kết nối mạng và sử dụng chip WiFi tích hợp, bạn sẽ cần phải chạy lệnh sau đây.

Điều này sẽ cho phép bạn khởi động lại thiết bị của bạn và truy cập qua mạng WiFi mà không cần kết nối Ethernet.

Một dự án đơn giản đầu tiên

Trước khi bạn bắt đầu viết code cho ứng dụng Android Things mới của bạn, bạn nên chắc chắn rằng phần cứng của bạn được thiết lập cho dự án mà bạn muốn xây dựng. Đối với dự án giới thiệu của chúng tôi, chúng tôi sẽ tạo ra một thiết bị đơn giản cho phép người dùng nhấn một nút, mà sẽ bật một đèn LED. Khi thôi nhấn nút, đèn LED sẽ tắt. Bạn sẽ cần các thành phần phần cứng như sau:

  • một bo mạch tương thích với Android Things được flash với phiên bản mới nhất của hệ điều hành
  • một đèn LED
  • một nút bấm
  • một điện trở 10k Ω (điện trở có dải màu nâu, đen, cam)
  • một điện trở 470 Ω (điện trở có dải màu vàng, tím, nâu)
  • dây nối
  • bảng cắm dây

Một khi bạn đã có đủ các thành phần, bạn có thể bắt đầu cắm mọi thứ vào. Tôi đã bao gồm hai sơ đồ cho dự án đầu tiên của bạn: một sơ đồ nối dây cho Intel Edison với Arduino Breakout Board, và một cho Raspberry Pi.

Wiring diagram for project using Intel Edison with Arduino breakout board
Wiring diagram for Raspberry Pi

Một khi bo mạch của bạn đã được nối dây, là lúc để viết ứng dụng đầu tiên của bạn.

Thiết lập ứng dụng

Android Things đòi hỏi dự án được xây dựng với SDK tối thiểu là 24. Bạn có thể bắt đầu hướng dẫn này bằng cách tạo ra một dự án mới với yêu cầu tối thiểu đó và một Activity rỗng.

Khi dự án cơ bản của bạn đã được tạo ra, hãy mở tập tin build.gradle trong mô-đun của ứng dụng. Ở dưới dependencies, bao gồm thư viện Android Things. Tại thời điểm viết bài này, thư viện vẫn còn trong phiên bản developer preview.

Tiếp theo, mở tập tin AndroidManifest.xml của bạn. Bạn sẽ cần phải khai báo rằng ứng dụng của bạn sử dụng thư viện Android Things bằng cách thêm dòng sau đây vào trong phần application.

Điều cuối cùng cần làm trong tập tin manifest của bạn là thêm một intent-filter vào MainActivity của bạn cho phép thiết bị của bạn biết rằng nó phải chạy Activity này khi khởi động. Bởi vì Android Things chạy ứng dụng lúc khởi động, nên bạn sẽ thường chỉ muốn một ứng dụng được cài đặt trên một thiết bị tại một thời điểm.

Một khi bạn đã thực hiện xong với manifest, bạn có thể mở MainActivity.java, vì đây là nơi đặt logic cốt lõi cho dự án Android Things đầu tiên. Đối tượng sẽ khởi tạo các kết nối đầu vào và đầu ra của bạn được gọi là PeripheralManagerService, vì vậy, hãy bắt đầu bằng cách lấy một tham chiếu đến nó trong onCreate().

Bây giờ bạn có PeripheralManagerService, hãy làm một điều nữa trước khi đi vào viết code kiểm soát của chúng ta. Trước đó bạn đã nối dây tất cả các thành phần với nhau vào bo mạch sử dụng các chân kế nối cụ thể. Để kiểm soát các thiết bị ngoại vi mà bạn đã gắn vào các chân cắm này, bạn sẽ cần phải biết tên của mỗi chân trên bo mạch của bạn. Bạn có thể in một danh sách của mỗi thành phần sử dụng PeripheralManagerService như sau:

Dòng ở trên sẽ in ra những thứ sau đây trên một Raspberry Pi:

Trong sơ đồ nối dây của Raspberry Pi trước đó, bạn kết nối nút vào BCM21 và đèn LED vào BCM6. Trong Intel Edison với sơ đồ nối dây Arduino Breakout, bạn kết nối nút vào IO12 và LED vào IO13. Hãy lưu các giá trị này như là các phần tử String ở phía trên của Activity. Mẫu này sẽ sử dụng các giá trị Raspberry Pi, mặc dù bạn có thể sử dụng bất cứ tên chân nối thích hợp cho hệ thống dây và bo mạch của bạn.

Trong hai phần tiếp theo, chúng ta sẽ sử dụng thông tin này để giao tiếp với cả hai thành phần.

Xuất sang đèn LED

Các thành phần cơ bản, chẳng hạn như đèn LED, có thể được truy cập bằng cách sử dụng đối tượng Gpio của Android Things. Ở phía trên cùng của Activity, tạo ra một đối tượng Gpio. Điều này sẽ được sử dụng để tham chiếu kết nối tới các đèn LED trong ứng dụng của chúng ta.

Một khi bạn đã có đối tượng tham chiếu, bạn sẽ cần phải khởi tạo nó trong onCreate(). Bạn có thể làm điều này bằng cách gọi openGpio với tên chân nối từ đối tượng PeripheralManagerService của bạn. Bạn cũng sẽ cần khai báo trạng thái ban đầu của thành phần, mà trong trường hợp này là DIRECTION_OUT_INITIALLY_LOW (cơ bản là "tắt"). Bạn sẽ cần phải bọc việc gọi thiết lập I/O trong một khối try/catch trong trường hợp một IOException xảy ra.

Bây giờ thì chúng ta đã tạo ra tham chiếu đến đèn LED của chúng ta, bạn sẽ cần phải có khả năng thay đổi trạng thái của đèn LED (bật và tắt). Bạn có thể sử dụng phương thức setValue(boolean) trên Gpio để thay đổi trạng thái của một thành phần.

Cuối cùng, khi Activity của bạn bị phá hủy, bạn sẽ cần phải đóng tất cả các kết nối và vô hiệu hóa các tham chiếu phần cứng của bạn trong onDestroy().

Và đó là tất cả để ghi vào một thành phần cơ bản. Mặc dù ứng dụng có thể điều khiển một đèn LED, nhưng không có logic để thay đổi trạng thái của đèn LED. Trong bước tiếp theo, chúng ta sẽ đọc việc bấm nút để bật hoặc tắt thành phần này.

Đọc đầu vào của nút

Mặc dù các nút là các thành phần khá đơn giản, nhưng Google vẫn phát hành một tập các thư viện điều khiển giúp dễ dàng sử dụng các nút và các thành phần khác. Đối với phần này bạn sẽ sử dụng trình điều khiển nút bấm để kết nối tới nút bấm và đọc trạng thái của nó, nhưng trước tiên bạn cần phải nhập trình điều khiển nút bấm vào trong tập tin build.gradle của bạn.

Tiếp theo, khai báo một đối tượng ButtonInputDriver như là một biến thành viên cho lớp MainActivity của bạn.

Bạn có thể khởi tạo đối tượng này và đăng ký nó bên trong khối try được sử dụng trong phương thức onCreate() cho thành phần LED của bạn.

Khi ButtonInputDriver của bạn được tạo ra, nó sẽ gửi các sự kiện bấm nút cho các phương thức onKeyDown()onKeyUp() với code mà bạn chỉ định lúc tạo trình điều khiển, nó có thể được override trong Activity của bạn để thay đổi trạng thái của đèn LED.

Cuối cùng, bạn sẽ cần phải hủy đăng ký và vô hiệu hóa ButtonInputDriver của bạn trong onDestroy(), giống như bạn đã làm với LED của bạn.

Tổng kết

Trong hướng dẫn này, bạn đã học được cách để flash một Raspberry Pi với Android Things, thiết lập một mạch đơn giản bao gồm một nút và đèn LED, và viết một ứng dụng Android để điều khiển đèn LED dựa trên việc bấm nút bằng cách sử dụng một thư viện trình điều khiển.

Tại thời điểm này, bạn sẽ có thể sử dụng các thư viện trình điều khiển khác và tạo ra các mạch phức tạp hơn của riêng bạn. Trong phần tiếp theo của loạt bài này, chúng ta sẽ xem xét các kiểu khác nhau của đầu vào/đầu ra trên thiết bị ngoại vi mà có sẵn trong Android Things, và sau đó chúng ta tiếp tục tạo ra trình điều khiển của riêng mình cho các thành phần!

Trong lúc đó, hãy kiểm tra một số khóa học và hướng dẫn khác của chúng tôi về phát triển Android!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.