AndroidThings之Blink Demo With Raspberry Pi 3

一、物料準備

  • 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端口連接到電阻的一側
  3. 將LED的正極(較長的引線)連接到電阻的另一側
  4. 將LED的負極(較短的引線)鏈接到樹莓派的Ground端口(任何一個Ground端口都可以)
面包板示意圖
面包板示意圖

三、編碼

  1. 創建Android Things項目 -- 如何創建Android Things項目

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

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

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

    • DIRECTION_OUT_INITIALLY_HIGH 初始狀態為高電平的輸出端口
    • DIRECTION_OUT_INITIALLY_LOW 初始狀態為低電平的輸出端口
  4. 創建一個Runnable用來執行切換LED的狀態

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

  6. 使用Handler將Runnable發送到消息隊列

  7. 在Runnable執行完切換LED狀態后,延遲1秒重新發送Runnable到消息隊列

  8. 在應用退出后移除消息隊列中的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);
            }
        }
    };
}

四、運行效果

運行效果
運行效果
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容