首页 >> 大全

第一个Android things应用

2023-06-21 大全 50 作者:考证青年

上一篇博客完成了 的搭建,按照国际惯例,该来个hello word应用了,还好这一切都在 中进行,对于安卓软件开发人员来讲,应该是很熟悉的。

打开 ,选择新建一个项目,填名字、包名。

下一步,只选择 ,API版本最好和你的树莓派刷入的版本一致,这些信息都可以外接屏幕和鼠标查看。

这里写图片描述

下一步,选择 ,因为很多 的智能设备是不需要界面的,选择Empty 的话还是会自动生成界面,并的。

这里写图片描述

之后的页面用默认值就可以了:

这里写图片描述

生成的新的项目相比较普通的安卓项目简单很多,少了很多文件和文件夹。先不管这些,先开始的编写。

第一个 的应用要实现一个闪烁的led灯,官方的例子也是这样的。不过还是推荐大家直接自己创建项目并手敲以下代码,因为第一个项目都很简单。

,首先是,定义几个量:

Handler handler=new Handler();//用于循环操作
Gpio gpio;//通用输入输出端口
boolean ledState=false;//用于标记led的亮起状态

这里只有一个新的东西:Gpio,通用输入输出。可能这个对安卓软件开发者比较陌生,可以直接理解成一个led灯对象;

然后是的方法:

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);try {gpio= PeripheralManager.getInstance().openGpio("BCM21");//获取通用输入输出,板子的BCM6这个位置连接ledgpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//设置gpio为输出的设备,并且指定初始值为低,此处即为false;handler.post(runnable);//开始循环} catch (IOException e) {e.printStackTrace();}}

这里相当于是通过“BCM21”这个接口,打开为一个设备,设置这个设备的方向是out,即为输出设备,同时指定了这个输出设备的初始值为low,Gpio通用输入输出是二进制的,相当于只有0/1两种值,对于led灯来说,只有亮和不亮两种状态。然后是:

Runnable runnable=new Runnable() {@Overridepublic void run() {if (gpio==null)return;try {ledState=!ledState;//改变led状态gpio.setValue(ledState);//控制led状态handler.postDelayed(this,1000);//1秒后再执行本初操作} catch (IOException e) {e.printStackTrace();}}};

因为设备已经定义为输出设备,是不能读取led灯的状态的,所以我们为了达到闪烁的目的,通过本地一个值标识led灯的状态,每次循环只要让等的状态改变就可以了。亮灯与否就很简单的,led灯对象gpio直接设置值为true或者fale即可。

最后,在中释放掉资源:

@Overrideprotected void onDestroy() {super.onDestroy();handler.removeCallbacks(runnable);//停止循环try {gpio.close();//关闭通用输入输出} catch (IOException e) {e.printStackTrace();}}

整个代码如下:

package wang.buxiang.myandroidthings;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.PeripheralManager;import java.io.IOException;public class MainActivity extends Activity {Handler handler=new Handler();//用于循环操作Gpio gpio;//通用输入输出端口boolean ledState=false;//用于标记led的亮起状态@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);try {gpio= PeripheralManager.getInstance().openGpio("BCM21");//获取通用输入输出,板子的BCM6这个位置连接ledgpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//设置gpio为输出的设备,并且指定初始值为低,此处即为false;handler.post(runnable);//开始循环} catch (IOException e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {super.onDestroy();handler.removeCallbacks(runnable);//停止循环try {gpio.close();//关闭通用输入输出} catch (IOException e) {e.printStackTrace();}}Runnable runnable=new Runnable() {@Overridepublic void run() {if (gpio==null)return;try {ledState=!ledState;//改变led状态gpio.setValue(ledState);//控制led状态handler.postDelayed(this,1000);//1秒后再执行本初操作} catch (IOException e) {e.printStackTrace();}}};}

最后不要忘记添加相关的权限:

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

代码准备就绪,现在需要将led灯连接到对应“BCM21”针脚了。

另外,在连接led灯的时候,都需要串联一个电阻,这是因为考虑到寿命和正常工作,led灯最好在一个固定的电流范围内运转,电阻的作用就是为led创造舒适的电流环境。

连接电路如下图所示:

这里写图片描述

主要关注右边的led灯,对于左边的设备可以忽略。

上面的电路图上插led灯和电阻的东西叫面包板,面包板可以让我们通过线的拔插来机动性的改变电路连接,入门开发必备;面包本的工作原理也很简单,首先是最上面两行,每一行都是接通的,经常用于接电源,只要在这两行的末端接通电源,那么后面的设备的电源都可以通过插入这两行来获取电源。再往下5行,每一列是联通的,每一列上也经常有列的序号。再往下5行的区域类似,再往下又是两行电源了。

然后是树莓派3B的接口示意图:

这里写图片描述

这张图和针脚详细信息可以在这个网址获取,一定要收藏,因为之后会经常用到:

我们看到接线是从GPIO区域出来,这里就是我们定义的“BCM21”的位置,在树莓派3B的最右下角,之后出来接电阻,然后是led灯的长脚,这里注意了,可能安卓软件开发者会忽略这样的问题,led灯长脚是正极,短脚是负极。短脚出来直接接地了,也就是负极。整体效果如下:

这里写图片描述

ok,运行一下,可以看到led灯已经按照我们的代码,开始每隔一秒亮一下了。

好了,到这, 的hello world项目完成了,你已经建立了正确的开发环境,以后的项目只需要编写代码并连接对应硬件设备到板子上就可以了。欢迎来到 的世界。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了