Android智能硬件开发心得总结(一)

前言:转向Android智能硬件开发近一年了,一路过来也经历过几个大大小小的项目,从对Android智能硬件一无所知到现在算是略有小成,期间踩了很多坑,也接触到了许多非Android方面的知识,现用文章的方式将之记录下来,与大家分享。

1.Android智能硬件的定义与应用领域

关于智能硬件的定义,以我理解的角度来看,首先这是一个不同于移动手机的硬件,它本质还是一个可触碰的实质物体;其次关于智能,只要是基于Android系统开发的硬件就可称之为智能,因为智能硬件最关键的特性就是与外部连接通信,也称之为物联网,而Android系统自带优秀的外部连接通信体系。

我们最常听到与见到的智能硬件有手环、智能音箱、智能家居这些比较成熟的消费级商品,这些智能硬件大部分都是没有界面的,与我从事的领域有所不同。没有界面的智能硬件大部分都不是Andriod系统,而有触屏界面的智能硬件我敢说80%以上都是Android系统,因为Android的交互体系绝对是最好的。

市面上成熟的Android智能硬件有:手持POS机、自动售货机、政务自助机、人脸识别门禁、收银机、汽车多媒体、电子班牌、快递柜、影院取票机、广告视频机等等。

2.一款智能硬件产品开发的全流程

  1. 导入需求,分析确定需求细节,讨论方案的技术可行性。
  2. 确定项目负责人、产品经理、硬件工程师、软件工程师、结构工程师、UI设计师。
  3. 由需求确定使用哪些外设,对外设进行选型,需充分考虑性能、质量、结构设计、价格、供应商支持度等各方面的因素。
  4. 优先确认使用什么Android主板,确认主板与外设选型后告知结构工程师进行结构外形设计。
  5. 硬件工程师负责外接设备的控制板开发并提供接入协议,硬件工程师还须将外设接入Android主板的线材适配好。
  6. UI设计师提供界面给软件工程师(Android),开始进入进行软件开发阶段。
  7. 产品样品建模制作出外壳,打磨、喷漆后进行所有元件的组装。
  8. 样品烧入程序,开始交予测试。
  9. 程序bug修改,稳定性测试。
  10. 所有测试通过后,撰写用户文档与操作手册。
  11. 一款智能硬件样品全部制作完毕。

3.智能硬件开发所涉及的技术体系概述

  • Android UI
    • 列表(RecycleView)
    • 弹窗(Dialog)
    • 动画(Animation)
    • 文字与按钮(TextView)
    • 手势(Gesture)
  • 外部通信
    • 串口通信(UART)
    • 以太网
    • Wifi、热点
    • 4G
    • 蓝牙
    • USB
    • NFC
    • I2C
    • GPIO
  • 存储
    • TF卡
    • U盘
    • FTP
  • Linux系统
    • 脚本
    • 点亮屏幕
    • 固件升级
  • NDK
    • 音视频播放
    • 设备通讯协议加密
    • 接入已有的C库
    • 语音识别
    • 人脸识别
  • 外接设备
    • 二维码
    • 摄像头
    • 红外感应器
    • 喇叭、麦克风
    • 触摸屏
    • LCD液晶屏
    • 打印机
    • NFC模块
    • IC类读卡器

4.关于主板选型

Android主板的选型一定要放在首位,因为这是整个产品的控制中心,核心元件,如果不能自己定制主板,那就只能依赖于供应商提供方案。现行市面上非常多做安卓工业主板的,不愁找不到主板,但想要很特殊的定制可能会比较麻烦,除非你的量很大,否则只能用人家的标准板。依赖供应商还有一个特别麻烦的事情,就是系统功能定制的沟通,这是一个特别漫长而痛苦的过程。

4.1 Anroid系统在智能硬件中所必要的功能

结合多个项目的经验,总结出智能硬件在安卓系统中所基本必要的功能。

序号 功能 说明
1 开机自启 智能硬件一般只运行一个应用,且开机就要自动打开
2 保证应用永远在前台运行 让用户永远不会看到除了应用之外的其它安卓界面
3 有接口设置系统时间 有些局域网场景无法连接外网,需要同步局域网服务器时间
4 定时开关机(带RTC电池) 为了让系统更好运行,可能需要每隔几天重启一次
5 静默安装应用,完成后直接拉起应用 更新安装应用过程必须是无感的
6 系统固件更新接口 将新的系统固件放入系统后能用有方法更新
7 支持U盘、TF卡且有路径检测 对于非联网管理的产品必须要能检测到外部存储插入
8 设置静态以太网IP接口 对于某些依赖于IP地址进行管理的产品必须要能设置IP
9 开启/关闭背光电源接口 有些场景可能要求节能环保,关背光很必要
10 读写IO口接口 IO口是控制外设开关的关键功能
11 设置屏幕显示方向 横竖屏根据项目会有不同要求

4.2 主板CPU芯片的选择

CPU芯片是一块主板最核心的元件,对于智能硬件而言CPU价格是不能太高的,不然会导致产品成本过高竞争力下降,但CPU性能又不能太差以让产品毫无竞争力可言。从我观察的情况来看,现在市面上的智能硬件基本是三家芯片厂商占据了绝大部分市场,它们分别是:

瑞芯微是我接触比较多的,在百度搜安卓主板出来的广告厂商基本都是采用瑞芯微方案的,总体来说瑞芯微方案是最成熟的。

全志的安卓主板给我的感觉就是很便宜但系统都是4.2或4.4,说实话有点落后时代,不是5.0系统以上的主板我都不想碰,界面太丑系统还有点卡。

最后关于飞思卡尔,这是一个国外厂商,我手上还没接触过这个芯片的板子,很少见搭载这个芯片的安卓主板,也许在某些特定应用场景才会考虑这个芯片吧。

下面重点介绍下瑞芯微(下面简称RK芯片)系列4款常见的芯片。

芯片 定位 特性
RK3188 低端 四核Cortex-A9(32位),频率最高1.6GHz,四核Mali-400MP4 GPU,支持OpenGL ES1.1/2.0,1080P视频编解码 (H.264)
RK3288 中端 四核Cortex-A17(32位),主频最高达1.8GHz,Mali-T764 GPU,支持OpenGL ES 1.1/2.0/3.1, OpenCL, DirectX9.3,1080P视频编解码 (H.264/265)
RK3368 中低端 八核64位Cortex-A53,主频最高达1.5GHz,PowerVR G6110 GPU,支持 OpenGL ES 1.1/2.0/3.1,OpenCL,DirectX9.3,1080P视频编解码 (H.264/265)
RK3399 高端 双Cortex-A72+四Cortex-A53大小核CPU结构,主频最高达1.8GHz,Mali-T864 GPU,支持OpenGL ES1.1/2.0/3.0/3.1,OpenVG1.1,OpenCL,DX11,1080P视频编解码

目前RK3288工业主板的价格大概在350~500 之间,RK3399价格在500~700之间,RK3188比3288便宜,RK3368介于3288与3399之间。

对于绝大多数应用场景而言,RK3288绝对能满足需求,价格也比较适中,系统一般是Android5.1不用进行运行时权限适配。RK3399主要用于对于运算能力要求比较高的场景,比如人脸识别,3399还有一大优势就是板子面积相对而言比较小。我目前基本都是采用3288进行开发的,对于智能硬件而言成本还是首要考虑因素,毕竟制造业利润低,苦笑~

下图是一块3288的主板示意图及规格说明
在这里插入图片描述
在这里插入图片描述

5.关于串口通信

串口通信是Android智能硬件开发所必须具备的能力,市面上类型众多的外设基本都是通过串口进行数据传输的,所以说不会串口通信根本就做不了智能硬件开发。
首先来看一张RK3288的架构图,在ConnectActivity那一个模块可以发现UART*5的字样,这就表示3288有5个串口可用,其中串口2一般是调试口不开放使用。
在这里插入图片描述

5.1 UART定义

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种串行异步收发协议。

UART串口有三种工作方式:单工、半双工、全双工。硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,可参考此文章

我们常见的串口通讯设置的界面如下所示,
在这里插入图片描述
主要有下列几个参数;

  • Speed(baud) 波特率
  • Data bits 数据位
  • Stop bits 停止位
  • Parity 奇偶校验位
  • Flow Control 流控

我们的设置基本都是8位数据位,1位停止位,无校验无流控,就如上图所示。对于程序开发而言,主要关注的参数就是波特率。

上述的那篇参考文章博主关于波特率是有点误解的,他将比特率理解成波特率,其实两者是有区别的。

波特率表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标,它用单位时间内载波调制状态改变的次数来表示。在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。

1波特即指每秒传输1个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个bit位信息),1比特每秒是指每秒传输1比特(bit)。单位“波特”本身就已经是代表每秒的调制数,以“波特每秒”(Baud per second)为单位是一种常见的错误。

按照上述的基本设置,其实一个码元总共传输了10个比特,1个起始位+1个停止位+8个数据位,如波特率为9600,那每秒一共传输了9600*10 = 96000个比特,换算成字节为12000 byte,约合11.72kb。

需要注意的是这12000byte指的是串口实际一共传输的数据位,但对于我们程序而言,真正能处理的数据就是除去起始位与停止位的数据位,对于传输8位数据位的设置而言,波特率是多少则传输的字节就是多少。如9600的波特率表示每秒传输9600个字节,每毫秒9.6字节。

安卓主板中一个串口端子的定义如下图所示
在这里插入图片描述

几乎所有安卓主板上的串口都是这种4pin的形式,这里有一个特别重要的点,就是对外设接线时,RX要对上外设的TX口,TX则对应RX口,否则是接收不到数据传输的。

在我所接触的众多外设中,安卓的常用串口有三种标准接口。

  • RS232
  • RS485
  • TTL

UART所指的是硬件接口,是硬件层次的描述。而TTL与RS232、485则指的是数据传输的电平标准,计算机的存储单位是二进制位(bit),也就是0和1,而0和1怎么用电压来表示呢?不同的表示方法于是对应了不同的标准,这就是TTL、RS232这些电平标准之间的区别。

所有CPU芯片的UART数据传输的电平都是采用TTL标准的,我们所看到的安卓主板上RS232或485的接口都是要再需要经过一次电平转换才能与CPU进行通信的。可以这样说,安卓主板CPU直接引出来的串口管脚都是TTL标准的,如需要其它的接口则要中间再增加一个电平转换芯片以满足要求。

参考文章:
https://www.jianshu.com/p/f1bfc7f6059b
https://blog.csdn.net/zhuyongxin_6688/article/details/78001767

5.2 三种UART接口介绍

TTL

TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑),TTL电路的工作电压是5V,它的输出可以是高电平(3.6V)或者低电平(0.3V)。为了用这种模拟量的电压来表示数字量的逻辑1和逻辑0,TTL电平规定:

  • 对于输出电路:电压大于等于(≥)2.4V为逻辑1;电压小于等于(≤)0.4V为逻辑0;
  • 对于输入电路:电压大于等于(≥)2.0V为逻辑1;电压小于等于(≤)0.8V为逻辑0;

参考:https://blog.csdn.net/wofreeo/article/details/82389002

RS232

它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”,该标准规定采用一个25个脚的DB-25连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。

后来IBM的PC机将RS232简化成了DB-9连接器,从而成为事实标准。而工业控制的RS-232口一般只使用RXD、TXD、GND三条线。如下图所示。
在这里插入图片描述

采用负逻辑,规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V。选用该电气标准的目的在于提高抗干扰能力,增大通信距离。RS -232的噪声容限为2V,接收器将能识别低至+3V的信号作为逻辑“0”,将高到-3 V的信号作为逻辑“1”。

全双工通信,传输距离较短,其通讯距离小于15 m,传输速率小于20 kb/s。

RS485

RS-485总线标准规定了总线接口的电气特性标准即对于2个逻辑状态的定义:正电平在+2V~+6V之间,表示一个逻辑状态;负电平在-2V~-6V之间,则表示另一个逻辑状态;

数字信号采用差分传输方式,即是A-B两者的电压差用以表示逻辑状态,能够有效减少噪声信号的干扰。

RS-485工业总线标准能够有效支持多个分节点和通信距离远,总共可接收32个设备,且对于信息的接收灵敏度较高,均采用屏蔽双绞线传输。采用半双工(两线制)最大传输距离约1219米,传输速度最高达10Mbps。
在这里插入图片描述

发布了92 篇原创文章 · 获赞 68 · 访问量 25万+

猜你喜欢

转载自blog.csdn.net/pigdreams/article/details/103654565
今日推荐