AndroidThings之Blink Demo With Ra

作者: zly394 | 来源:发表于2017-01-20 17:19 被阅读292次

    一、物料准备

    • 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);
                }
            }
        };
    }
    

    四、运行效果

    运行效果运行效果

    相关文章

      网友评论

        本文标题:AndroidThings之Blink Demo With Ra

        本文链接:https://www.haomeiwen.com/subject/zqoibttx.html