1. 程式人生 > >第一個Android things應用

第一個Android things應用

轉載請註明出處。

上一篇部落格完成了android things的搭建,按照國際慣例,該來個hello word應用了,還好這一切都在android studio中進行,對於安卓軟體開發人員來講,應該是很熟悉的。
開啟Android studio,選擇新建一個專案,填名字、包名。
下一步,只選擇android things,API版本最好和你的樹莓派刷入的版本一致,這些資訊都可以外接螢幕和滑鼠檢視。
這裡寫圖片描述
下一步,選擇Peripheral Activity,因為很多android things 的智慧裝置是不需要介面的,選擇Empty Activity的話還是會自動生成介面,並setcontview的。
這裡寫圖片描述


之後的頁面用預設值就可以了:
這裡寫圖片描述
生成的新的專案相比較普通的安卓專案簡單很多,少了很多檔案和資料夾。先不管這些,先開始hellword的編寫。
第一個android things的應用要實現一個閃爍的led燈,官方的例子也是這樣的。不過還是推薦大家直接自己建立專案並手敲以下程式碼,因為第一個專案都很簡單。
,首先是MainActivity,定義幾個量:

Handler handler=new Handler();//用於迴圈操作
Gpio gpio;//通用輸入輸出埠
boolean ledState=false;//用於標記led的亮起狀態

這裡只有一個新的東西:Gpio,通用輸入輸出。可能這個對安卓軟體開發者比較陌生,可以直接理解成一個led燈物件;
然後是MainActivity的onCreate方法:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            gpio= PeripheralManager.getInstance().openGpio("BCM21");//獲取通用輸入輸出,板子的BCM6這個位置連線led
            gpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//設定gpio為輸出的裝置,並且指定初始值為低,此處即為false;
handler.post(runnable);//開始迴圈 } catch (IOException e) { e.printStackTrace(); } }

這裡相當於是通過“BCM21”這個介面,開啟為一個裝置,設定這個裝置的方向是out,即為輸出裝置,同時指定了這個輸出裝置的初始值為low,Gpio通用輸入輸出是二進位制的,相當於只有0/1兩種值,對於led燈來說,只有亮和不亮兩種狀態。然後是runnable:

Runnable runnable=new Runnable() {
        @Override
        public void run() {
            if (gpio==null)return;
            try {
                ledState=!ledState;//改變led狀態
                gpio.setValue(ledState);//控制led狀態
                handler.postDelayed(this,1000);//1秒後再執行本初操作
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    };

因為裝置已經定義為輸出裝置,是不能讀取led燈的狀態的,所以我們為了達到閃爍的目的,通過本地一個boolean值標識led燈的狀態,每次迴圈只要讓等的狀態改變就可以了。亮燈與否就很簡單的,led燈物件gpio直接設定值為true或者fale即可。
最後,在onDestory中釋放掉資源:


    @Override
    protected void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(runnable);//停止迴圈
        try {
            gpio.close();//關閉通用輸入輸出
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

整個MainActivity程式碼如下:

package wang.buxiang.myandroidthings;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;

import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.PeripheralManager;

import java.io.IOException;

public class MainActivity extends Activity {
    Handler handler=new Handler();//用於迴圈操作
    Gpio gpio;//通用輸入輸出埠
    boolean ledState=false;//用於標記led的亮起狀態

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            gpio= PeripheralManager.getInstance().openGpio("BCM21");//獲取通用輸入輸出,板子的BCM6這個位置連線led
            gpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//設定gpio為輸出的裝置,並且指定初始值為低,此處即為false;
            handler.post(runnable);//開始迴圈
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(runnable);//停止迴圈
        try {
            gpio.close();//關閉通用輸入輸出
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    Runnable runnable=new Runnable() {
        @Override
        public void run() {
            if (gpio==null)return;
            try {
                ledState=!ledState;//改變led狀態
                gpio.setValue(ledState);//控制led狀態
                handler.postDelayed(this,1000);//1秒後再執行本初操作
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    };

}

最後不要忘記新增相關的許可權:

    <uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO"/>

程式碼準備就緒,現在需要將led燈連線到對應“BCM21”針腳了。
另外,在連線led燈的時候,都需要串聯一個電阻,這是因為考慮到壽命和正常工作,led燈最好在一個固定的電流範圍內運轉,電阻的作用就是為led創造舒適的電流環境。
連線電路如下圖所示:
這裡寫圖片描述
主要關注右邊的led燈,對於左邊的裝置可以忽略。
上面的電路圖上插led燈和電阻的東西叫麵包板,麵包板可以讓我們通過線的拔插來機動性的改變電路連線,入門開發必備;麵包本的工作原理也很簡單,首先是最上面兩行,每一行都是接通的,經常用於接電源,只要在這兩行的末端接通電源,那麼後面的裝置的電源都可以通過插入這兩行來獲取電源。再往下5行,每一列是聯通的,每一列上也經常有列的序號。再往下5行的區域類似,再往下又是兩行電源了。
然後是樹莓派3B的介面示意圖:
這裡寫圖片描述
這張圖和針腳詳細資訊可以在這個網址獲取,一定要收藏,因為之後會經常用到:
https://developer.android.google.cn/things/hardware/raspberrypi-io
我們看到接線是從GPIO區域出來,這裡就是我們定義的“BCM21”的位置,在樹莓派3B的最右下角,之後出來接電阻,然後是led燈的長腳,這裡注意了,可能安卓軟體開發者會忽略這樣的問題,led燈長腳是正極,短腳是負極。短腳出來直接接地了,也就是負極。整體效果如下:
這裡寫圖片描述
ok,執行一下,可以看到led燈已經按照我們的程式碼,開始每隔一秒亮一下了。
好了,到這,andoid things的hello world專案完成了,你已經建立了正確的開發環境,以後的專案只需要編寫程式碼並連線對應硬體裝置到板子上就可以了。歡迎來到android things的世界。