最后,如果大伙有什么好的学习方法或建议欢迎大家在评论中积极留言哈,希望大家能够共同学习、共同努力、共同进步。
小编在这里祝小伙伴们在未来的日子里都可以 升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰!!
不论遇到什么困难,都不应该成为我们放弃的理由!
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
何为总线
总线,总线,就是总让你陷进去
请原谅我不会搞笑还胡说的坏毛病。
树莓派支持的总线类型: GPIO,I2C,I2S,SPI,PWM,UART
关于总线我也不是专业的。以我的理解就是为了控制不同的硬件设备,而对电信号做不同的处理而划分的标准。这里我们先混个脸熟,后面用的最多的是GPIO,也就是以名称BCM开通的针脚,后面我们会通过名称去控制这个针脚上的设备。 关于总线详细的介绍,大家可以参考下这篇文章: https://blog.csdn.net/haima1998/article/details/18729929
如何刷写ats到树莓派开发板上
关于这方面的介绍,网上还是挺多的,我搜了一下最不缺的就是这类文章,所以这里就不做详细介绍了,简单介绍下 步骤:
- 进入android things console,创建属于自己硬件的rom,这是google的云管理平台(在这里可以创建硬件设备的rom,发布ota更新等) 地址为: https://partner.android.com/things/console/
2. 通过软件刷写rom到内存卡上,这里推荐使用Etcher这个软件
这个软件的使用还是很简单的,一键式的。 3. 刷写完成后通电,插入显示器,不出什么意外就可以正常开机了 至此刷写rom的工作就完成了
- 这里推荐另一种更简便的方式:使用官方提供工具的:android-things-setup-utility 下载地址: https://partner.android.com/things/console/#/tools 解压完了以后如图:
可以根据自己的平台选择操作。
如何操作Android Things
由于物联网设配的特殊性,我们没有像安卓一样的触摸屏和按键等外设来操作设备,所以我们需要通过如下两种方式去连接设备。
1.通过usb转ttl设备直接连接
具体如何操作,可以自行百度
2.通过局域网连接(推荐方式) 先让ats设备连接到路由器,这里推荐连接显示器鼠标键盘可视化操作连接网络等操作,连接上显示器如下图:
常用的adb 命令
通过这些命令我们可以更好的管理和使用ats
- 连接AndroidThings adb connect
- 断开AndroidThings adb disconnect
- 关机 adb shell reboot -p 4.卸载应用 adb shell uninstall 使用adb connect 命令连接到ats设备后就可以像开发app一样用android studio去开发部署和调试了。
Demo展示及硬件搭建-light
这是一个操作LED让其闪烁的demo, 我们通过这个demo来介绍基本的操作硬件的方法 先看下最终效果:
硬件搭建步骤:
- 通过面包板串联一个电阻和一个LED灯并连接到面包板的正极
- 面包板的正极连接到树莓派一个GPIO总线端口
- LED另一个针脚通过跳线连接到树莓派的GROUND针脚上 附上我的连接图:
至此硬件模块的搭建就完毕了。
更直观一点的参考如下官方图片:
这里需要着重说明是:Ground为地线,用来模拟零电压线,GPIO总线端口可以根据所加的电阻以及LED选择不同的电压,我这里选择的是电压3.3v名为BCM2的端口
light代码分析
public class LightActivity extends Activity {
Handler mHandler;
PeripheralManager mPeripheralManager;
Gpio mLightGpio;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_light);
mHandler = new Handler();
mPeripheralManager = PeripheralManager.getInstance();
try {
mLightGpio = mPeripheralManager.openGpio(“BCM2”);
mLightGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
mHandler.post(mBlinkRunnable);
} catch (IOException e) {
e.printStackTrace();
}
}
private Runnable mBlinkRunnable = new Runnable() {
@Override
public void run() {
try {
if (mLightGpio == null)
return;
mLightGpio.setValue(!mLightGpio.getValue());
mHandler.postDelayed(mBlinkRunnable, 1000);
} catch (IOException e) {
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (mLightGpio != null) {
try {
mLightGpio.close();
mLightGpio = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
代码不多,就全贴上去了,下面我们分析下代码。
mPeripheralManager=PeripheralManager.getInstance();
mLightGpio= mPeripheralManager.openGpio(“BCM2”);
我们通过PeripheralManager单例后调用openGpio方法,传入的参数为GPIO端口对应的名称,这样就拿到这个端口控制对象Gpio的一个实例mLightGpio。
mLightGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_HIGH);
这句话代码有两个作用:1.设置电平方向为输出方向;2设置初始电平为高电平并立即激活。 这句代码执行后,LED会变为常亮状态。 我们还可以通过以下三行代码实现跟上面一句同样的效果:
//设置电平方向为输出方向,设置初始电平为低电平并立即激活
mLightGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
//设置激活状态为高电平
mLightGpio.setActiveType(Gpio.ACTIVE_HIGH)
//进行激活
mLightGpio.setValue(true);
在mBlinkRunnable中通过 mLightGpio.setValue(!mLightGpio.getValue()) 来循环改变电平的激活状态来实现LED的闪烁,至此LED就可以blingbling的闪了。
最后看下ats项目和标准安卓有和区别 主要区别有两点:
- ats项目权限不需要用户动态授权,直接在manifest中声名即可,如访问GPIO总线端口以及下面需要讲到的注册用户驱动所需要的权限
- ats项目部署到硬件后可以设置其意外关闭重启和开机自启动,这样可以保证物联网设备的高可用状态,不至于程序崩溃导致设备无法使用 具体步骤只需要在入口Activity加入如下intent-filter:
用户驱动-userdriver
所谓用户驱动就是ats允许你把相应的硬件的电信号转化成系统事件,比如按钮的点按事件注册成系统的键盘按键事件,温度感应器的电信号注册成系统已存在的感应器事件,这样各个组件都可以很方便的使用标准的framework api去操作硬件了。
举个栗子
本例展现的内容是把按钮的点按事件电信号注册成键盘的key事件,这样按钮就变成一个键盘了,可以点击和长按。注册成系统事件后可以在应用程序的各个组件中进行使用了。 演示效果:
硬件安装图:
看下代码:
package com.androfarmer.button;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.view.KeyEvent;
import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.GpioCallback;
import com.google.android.things.pio.PeripheralManager;
import com.google.android.things.userdriver.UserDriverManager;
import com.google.android.things.userdriver.input.InputDriver;
import com.google.android.things.userdriver.input.InputDriverEvent;
import java.io.IOException;
public class KeyCodeDriverService extends Service {
private InputDriver mDriver;
private Gpio mButtonGpio;
private static final int KEY_CODE = KeyEvent.KEYCODE_A;
文末
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
95)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!