上个月Google推出Android Things 嵌入式系统取代“Brillo”,这意味着Google看好IoT(物联网)发展,要与Apple的HomeKit抗衡。我本人是先学51单片机,然后是ARM的stm32嵌入式开发,再到Android客户端开发。因此,对于Android中的嵌入式开发比较感兴趣。其实,Android Things是Android的一个分支版本,类似于可穿戴手表,为开发者提供丰富的API接口,使用java语言开发。其框架结构如下:

可以看出,它与Android的框架是大致相同的。只是应用框架层换成特定的Java API Framework,另外增加了Google Services和Things Support Library。既然要用到Google Services,那么需要在AndroidManifest.xml添加:

<uses-library android:name="com.google.android.things"/>

另外,在gradle添加依赖,注意不是compile,而是provided:

provided 'com.google.android.things:androidthings:0.1-devpreview'

接下来,可以在Activity的onCreate里面创建一个外设管理服务对象PeripheralManagerService:

PeripheralManagerService pioService = new PeripheralManagerService();

该服务提供获取GPIO(通用IO口)、SPI(串行外设接口)、Uart(串口)、I2C(串行总线)、PWM(脉冲宽度调节)列表,与打开对应的外设。在这里主要介绍下GPIO控制LED灯开关:

//使用外设管理服务对象获取GPIO列表
List<String> gpioList = pioService.getGpioList();
if(gpioList != null && gpioList.size() > 0) {try {//打开列表中的第一个GPIOGpio ledPin = pioService.openGpio(gpioList.get(0));//设置边沿触发类型ledPin.setEdgeTriggerType(Gpio.EDGE_NONE);//设置激活类型ledPin.setActiveType(Gpio.ACTIVE_HIGH);//设置方向ledPin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//设置为高电平,使能该GPIO端口ledPin.setValue(true);} catch (IOException e) {e.printStackTrace();}
}

如果你曾经接触过单片机或者嵌入式ARM开发,看到上面GPIO的操作是不是很熟悉呢?其实,在GPIO类里面定义有关常量:

    public static final int ACTIVE_HIGH = 1;//高电平public static final int ACTIVE_LOW = 0;//低电平public static final int DIRECTION_IN = 0;//输入public static final int DIRECTION_OUT_INITIALLY_HIGH = 1;//输出并且初始化为高电平public static final int DIRECTION_OUT_INITIALLY_LOW = 2;//输出并且初始化为低电平public static final int EDGE_BOTH = 3;//上升、下降沿同时触发public static final int EDGE_FALLING = 2;//下降沿触发public static final int EDGE_NONE = 0;//无触发public static final int EDGE_RISING = 1;//上升沿触发

再来对比下ARM中stm32系列的GPIO初始化(库函数操作版本):

   void GPIO_init (){GPIO_InitTypeDef GPIO_InitStructure; //声明结构体GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//选择GPIO_Pin_0端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置为推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//设置时钟频率GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能时钟
}

可以看出,ARM比Android Things的多了时钟频率设置与使能。ARM中的时钟分为内部低速、内部高速、外部低速与外部高速,主要是为了节约功耗,可灵活根据需求选择时钟并且单独使能。我猜测,Android Things操作系统应该是默认了时钟频率,才不需要单独配置的。
其实,ARM的库函数是基于寄存器操作的,来看下寄存器操作初始化GPIO:

void LED_Init(void)
{RCC->APB2ENR|=1<<2; //使能PORTA时钟             GPIOA->CRH&=0XFFFFFFF0; //选中PA8端口GPIOA->CRH|=0X00000003;//PA8推挽输出     GPIOA->ODR|=1<<8; //PA8输出高电平
}

上面寄存器操作涉及了指针、左移、与运算、或运算,这很符合C语言的特征,这样效率也是相当比较高的。可以想象到,Android Things底层也是基于寄存器操作;然后是Native 硬件抽象层调用底层方法,为上层提供接口;再是框架层使用java语言进行封装,为应用层提供API接口。

目前存在开发平台的局限性:“树莓派3”、英特尔微型可穿戴设备“爱迪生”(Edison)以及恩智浦半导体的Pico平台。但是,Google致力于增加更多认证设备。相信不久的将来,Android的IoT操作系统会得到广泛应用,让我们共同期待属于Android的物联网时代的到来吧!

google迈向IoT的开端——推出Android Things操作系统相关推荐

  1. Google 推出 Android 11 的 Developer Preview 3 版本

    作者 | Emil Protalinski 译者 | 刘畅,责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 以下为译文: 谷歌今天发布了第三款Android 11开发人员预览版,其中主 ...

  2. 比尔·盖茨承认犯下 4000 亿美元大错:误给 Google 推出 Android 机会!

    作者 | 素年清时 责编 | 伍杏玲 出品 | 程序人生(ID:coder_life) 近日在Village Global举办的座谈会上,比尔·盖茨(Bill Gates)承认犯下最大的错误就是给了谷 ...

  3. Google I/O 大会上的 Android Things 亮点汇总

    借助 Android Things,您可以大规模构建和维护 IoT 设备.我们最近发布了 Android Things 1.0 正式版,它将为生产设备提供长期支持,帮助您轻松地将 IoT 设备从原型设 ...

  4. 岁末年初3Q大战惊现高潮,360震撼推出Android 3Q IM即时通讯

    岁末年初3Q大战惊现高潮,360震撼推出Android "3Q" IM即时通讯 看过了QQ和360斗争的开端高潮,当然现在还不能说这场斗争已经结束,在我看来这次的事件未尝不是一个适 ...

  5. 【历史上的今天】9 月 11 日:Adobe 公司联合创始人出生;现代游戏机鼻祖诞生;谷歌推出 Android Pay

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 9 月 11 日,21 年前,一起事件除了改变美国的许多家庭,也一定程度上改变了全世界以航天业为主的 ...

  6. Google I/O 2014? No,Android I/O 2014

    "你当然能够不相信理想,可是你也应该相信.有一些人相信理想"  google I/O今日公布了很多新品,罗列为: Android Wear,Android Auto.Android ...

  7. 3Q大战现高潮,360 推出Android 3Q IM即时通讯,岁末年初3Q大战惊现高潮

    岁末年初3Q大战惊现高潮,360震撼推出Android "3Q" IM即时通讯 看过了QQ和360斗争的开端高潮,当然现在还不能说这场斗争已经结束,在我看来这次的事件未尝不是一个适 ...

  8. Google I/O 2014 - Keynote for Android

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jingxia2008/article/details/34809467 Google I/O 201 ...

  9. android n模拟器,BlueStacks推出Android N模拟器

    原标题:BlueStacks推出Android N模拟器 IT之家1月23日消息,相信有不少玩家都有过在电脑上玩手游的经历,打怪升级这类游戏在操作似乎还是交给键盘和鼠标比较高效,电脑端体验安卓游戏自然 ...

最新文章

  1. java selenium后报错Element not found in the cache元素定位要重新赋值之前的定义
  2. Attention技术应用的最新进展概述
  3. 先装vs还是先装sql_【家装话题】装修师先装门还是先装地板?
  4. 怎么查看页面跳转过程_fastcapture注册码怎么获取?FastStone注册码分享
  5. 《软件测试与质量保证》期末复习重点
  6. linux下MySQL使用方法
  7. HDU1108 最小公倍数【欧几里得算法】
  8. 微软BI 之SSIS 系列 - 通过设置 CheckPoints 检查点来增强 SSIS Package 流程的重用性...
  9. SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引
  10. Sp_15_极限定理
  11. Chrome浏览器查看Axure原型图文件,提示Axure RP Extension for Chrome
  12. 本特利探头330101-00-40-10-02-CN
  13. office2016鼠标右键没有新建word等
  14. 游戏开发入门(一)游戏发展史
  15. 高等教育学:教育目的与教育制度
  16. python mysql 优化_Python之MySQL优化(上)
  17. python中fact_python中fact函数使用
  18. 基金投资基本常识【狂神说】
  19. 解决加载高德地图闪白框及logo问题
  20. 由于无法验证发布者,Windows已经阻止此软件

热门文章

  1. SQL SERVER 服务器登录名、数据库用户名、服务器角色、数据库角色、DENY、sp_addlogin ETC.
  2. Python中正确显示中文和负号
  3. ArcEngine10 ecp 授权
  4. html5中的td tr,html5 表格标签 table tr td
  5. 50件关于学霸与学渣的小事
  6. c++ mupdf 提取pdf文件里面图片
  7. 计算机认知训练效果,为轻度认知功能障碍的人保持认知功能而进行的计算机化认知训练...
  8. 盘点2021款iPad Pro 5个增强功能,与上一代有什么区别?
  9. mysql_affect_array_Mysql代理类 支持Master/Slave 读写分离
  10. PDF转Word免费的软件有哪些?教给你三种转换方法