AndroidThings之Blink Demo With Raspberry Pi 3

一、物料準(zhǔn)備

  • Raspberry Pi 3 Model B with Android Things -- 怎樣刷入Android Things
  • Android Studio 2.2+
  • 面包板一個
  • LED一個
  • 470Ω電阻一個
  • 母對公杜邦線2條
  • 公對公杜邦線1條

二、鏈接硬件

1. 樹莓派端口

樹莓派端口分布圖
樹莓派端口分布圖

通過該圖可以了解樹莓派各個端口的分布

2. 通過面包板將LED鏈接到樹莓派

  1. 選擇一個可用的GPIO端口(如:BCM21) -- 如何查看可用的GPIO端口
  2. 將所選GPIO端口連接到電阻的一側(cè)
  3. 將LED的正極(較長的引線)連接到電阻的另一側(cè)
  4. 將LED的負(fù)極(較短的引線)鏈接到樹莓派的Ground端口(任何一個Ground端口都可以)
面包板示意圖
面包板示意圖

三、編碼

  1. 創(chuàng)建Android Things項目 -- 如何創(chuàng)建Android Things項目

  2. 使用PeripheralManagerService打開所選的GPIO端口

  3. 配置該GPIO端口為輸出端口

    使用setDirection()將端口配置為輸出

    • DIRECTION_OUT_INITIALLY_HIGH 初始狀態(tài)為高電平的輸出端口
    • DIRECTION_OUT_INITIALLY_LOW 初始狀態(tài)為低電平的輸出端口
  4. 創(chuàng)建一個Runnable用來執(zhí)行切換LED的狀態(tài)

  5. 通過將GPIO的getValue()方法的值取反傳遞給setValue()方法來切換LED的狀態(tài)

  6. 使用Handler將Runnable發(fā)送到消息隊列

  7. 在Runnable執(zhí)行完切換LED狀態(tài)后,延遲1秒重新發(fā)送Runnable到消息隊列

  8. 在應(yīng)用退出后移除消息隊列中的Runnable,并關(guān)閉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實例,用來執(zhí)行計劃事件
    private Handler mHandler = new Handler();
    // GPIO端口實例
    private Gpio mLedGpio;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 創(chuàng)建PeripheralManagerService的實例
        PeripheralManagerService service = new PeripheralManagerService();
        try {
            // 根據(jù)所選的GPIO端口名打開GPIO資源
            mLedGpio = service.openGpio(GPIO_PIN_NAME);
            // 配置該GPIO端口為輸出端口
            mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
            // 使用handler發(fā)送一個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 {
            // 關(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ā)送另一個runnable到消息隊列
                mHandler.postDelayed(mBlinkRunnable, INTERVAL_BETWEEN_BLINKS_MS);
            } catch (IOException e) {
                Log.e(TAG, "run: Error on PeripheralIO API", e);
            }
        }
    };
}

四、運(yùn)行效果

運(yùn)行效果
運(yùn)行效果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容