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

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

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

運(yùn)行效果