一、物料準備
- Raspberry Pi 3 Model B with Android Things -- 怎樣刷入Android Things
- Android Studio 2.2+
- 面包板一個
- LED一個
- 470Ω電阻一個
- 母對公杜邦線2條
- 公對公杜邦線1條
二、鏈接硬件
1. 樹莓派端口

樹莓派端口分布圖
通過該圖可以了解樹莓派各個端口的分布
2. 通過面包板將LED鏈接到樹莓派
- 選擇一個可用的GPIO端口(如:BCM21) -- 如何查看可用的GPIO端口
- 將所選GPIO端口連接到電阻的一側
- 將LED的正極(較長的引線)連接到電阻的另一側
- 將LED的負極(較短的引線)鏈接到樹莓派的Ground端口(任何一個Ground端口都可以)

面包板示意圖
三、編碼
創建Android Things項目 -- 如何創建Android Things項目
使用PeripheralManagerService打開所選的GPIO端口
-
配置該GPIO端口為輸出端口
使用setDirection()將端口配置為輸出
- DIRECTION_OUT_INITIALLY_HIGH 初始狀態為高電平的輸出端口
- DIRECTION_OUT_INITIALLY_LOW 初始狀態為低電平的輸出端口
創建一個Runnable用來執行切換LED的狀態
通過將GPIO的getValue()方法的值取反傳遞給setValue()方法來切換LED的狀態
使用Handler將Runnable發送到消息隊列
在Runnable執行完切換LED狀態后,延遲1秒重新發送Runnable到消息隊列
在應用退出后移除消息隊列中的Runnable,并關閉GPIO資源
public class BlinkActivity extends Activity {
private static final String TAG = "BlinkActivity";
// 閃爍間隔時間
private static final int INTERVAL_BETWEEN_BLINKS_MS = 1000;
// 所選的GPIO端口
private static final String GPIO_PIN_NAME = "BCM21";
// Handler實例,用來執行計劃事件
private Handler mHandler = new Handler();
// GPIO端口實例
private Gpio mLedGpio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 創建PeripheralManagerService的實例
PeripheralManagerService service = new PeripheralManagerService();
try {
// 根據所選的GPIO端口名打開GPIO資源
mLedGpio = service.openGpio(GPIO_PIN_NAME);
// 配置該GPIO端口為輸出端口
mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
// 使用handler發送一個runnable到消息隊列
mHandler.post(mBlinkRunnable);
} catch (IOException e) {
Log.e(TAG, "onCreate: Error on PeripheralIO API", e);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// 移除消息隊列中帶處理的runnable
mHandler.removeCallbacks(mBlinkRunnable);
try {
// 關閉GPIO資源
mLedGpio.close();
} catch (IOException e) {
Log.e(TAG, "onDestroy: Error on PeripheralIO API", e);
}
}
private Runnable mBlinkRunnable = new Runnable() {
@Override
public void run() {
// 如果GPIO為空(已關閉)則退出
if (mLedGpio == null) {
return;
}
try {
// 設置GPIO的值,切換LED的狀態
mLedGpio.setValue(!mLedGpio.getValue());
// 延遲1秒后發送另一個runnable到消息隊列
mHandler.postDelayed(mBlinkRunnable, INTERVAL_BETWEEN_BLINKS_MS);
} catch (IOException e) {
Log.e(TAG, "run: Error on PeripheralIO API", e);
}
}
};
}
四、運行效果

運行效果