Android智能硬件开发经验总结一
前言:开始开发Android智能硬件已经快一年了。 一路走来,我经历了几个大大小小的项目。 从对Android智能硬件一无所知到现在,我已经取得了一点小成就。 这期间,我踩过很多坑,遇到很多挑战。 学到了很多非Android的知识,现在以文章的形式记录下来分享给大家。
一、Android智能硬件的定义及应用领域
关于智能硬件的定义,从我的理解来看,首先这是一个不同于手机的硬件。 它本质上是一个可以触摸的物理对象; 其次,关于智能,只要是基于Android系统开发的硬件,就叫智能,因为智能硬件最关键的特点就是与外部连接的通信,也叫物联网,而Android系统自带了一个优良的外部连接通讯系统。
我们最常听到和看到的智能硬件包括手环、智能音箱、智能家居等相对成熟的消费级产品。 这些智能硬件大部分都是没有界面的,这和我从事的领域不同。没有界面的智能硬件大部分都不是安卓系统,但我敢说有触摸屏界面的智能硬件80%以上都是安卓系统,因为Android的交互系统绝对是最好的。
市场上成熟的Android智能硬件包括:手持POS机、自动售货机、政务自助机、人脸识别门禁、收银机、车载多媒体、电子班证、快递柜、影院取票机、广告影音机等。
2. 将需求引入智能硬件产品开发的全流程,分析确定需求细节,讨论解决方案的技术可行性。 确定项目负责人、产品经理、硬件工程师、软件工程师、结构工程师、UI设计师。 要求决定了使用哪些外围设备。 选择外设时,必须充分考虑性能、质量、结构设计、价格、供应商支持等因素。 优先考虑使用哪种 Android 主板。 确认主板及外设选型后,通知结构工程师设计结构外形。 硬件工程师负责开发外部设备的控制板并提供访问协议。 硬件工程师还必须调整用于将外围设备连接到 Android 主板的电缆。 UI设计师向软件工程师(Android)提供界面,开始进入软件开发阶段。 对产品样品进行建模以生产外壳,然后在组装所有组件之前对其进行抛光和喷漆。 样本被烧录到程序中并开始提交测试。 程序bug修改和稳定性测试。 全部测试通过后,编写用户文档和操作手册。 智能硬件样品已经制作完成。 3、智能硬件开发涉及的技术体系概述 外部通讯存储 Linux系统 NDK 外部设备 4、关于主板选型
Android主板的选择一定是首要的,因为它是整个产品的控制中心和核心部件。 如果自己无法定制主板,就只能依靠供应商提供解决方案。 目前市场上有很多Android工业主板。 你不必担心找不到主板,但如果定制得非常具体可能会很麻烦。 除非你的量很大,否则只能用别人的标准板。 依赖供应商还有一个特别麻烦的事情就是关于系统功能定制的沟通,这是一个特别漫长和痛苦的过程。
4.1 Android系统在智能硬件中必备的功能
结合多个项目的经验,总结了Android系统中智能硬件的基本必备功能。
序列号功能说明
开机时自动启动
智能硬件一般只运行一个应用程序,并且在计算机开机时自动打开。
确保应用程序始终在前台运行
让用户永远看不到除应用程序之外的其他Android界面
有一个设置系统时间的界面
在某些局域网场景下,无法连接外网,需要同步局域网服务器时间。
定时开关(带RTC电池)
为了让系统更好地运行,您可能需要每隔几天重新启动一次。
静默安装应用程序并在完成后直接启动应用程序
更新和安装应用程序的过程必须是无缝的
系统固件更新接口
将新的系统固件放入系统后,可以通过一定的方式进行更新
支持U盘、TF卡并具有路径检测
对于非网管产品,必须检测外部存储插入。
设置静态以太网 IP 接口
对于某些依赖IP地址进行管理的产品,必须设置IP
打开/关闭背光电源接口
有些场景可能需要节能环保,所以有必要关闭背光。
10
读写IO口接口
IO口是控制外设开关的关键功能
11
设置屏幕显示方向
根据项目的不同,横屏和竖屏会有不同的要求。
4.2 主板CPU芯片的选择
CPU芯片是主板的核心部件。 对于智能硬件来说,CPU价格不能太高,否则产品成本太高,竞争力下降。 但CPU性能不能太差,以免产品失去竞争力。 。 据我观察,目前市场上智能硬件的绝大部分市场由三大芯片厂商占据。 他们是:
Rockchip是我接触比较多的公司。 在百度搜索Android主板时发现的广告商大多采用瑞芯微解决方案。 总体来说,瑞芯微的解决方案是最成熟的。
我感觉全志的安卓主板很便宜,但是系统都是4.2或者4.4的。 说实话,他们有点落后于时代了。 我不想碰非5.0以上的主板。 界面太丑了,系统有点滞后。
最后,关于飞思卡尔,这是一家国外厂商。 我从来没有接触过带有这个芯片的板子。 搭载该芯片的Android主板很少见。 也许在某些特定的应用场景下会考虑这款芯片。
下面重点介绍Rockchip(以下简称RK芯片)系列中的四款常见芯片。
芯片定位特点
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绝对可以满足需求,而且价格也比较适中。 系统一般为Android 5.1,不需要运行时权限适配。 RK3399主要应用于对算力要求比较高的场景,比如人脸识别。 RK3399的另一个优点是电路板面积相对较小。 目前我基本使用3288进行开发。 对于智能硬件来说,成本仍然是首要考虑的因素。 毕竟制造利润低,苦笑~
下图是3288主板的原理图和规格。
5. 关于串口通讯
串口通信是Android智能硬件开发必备的能力。 市场上很多类型的外设基本上都是通过串口来传输数据的。 因此,没有串行通信就不可能开发智能硬件。
首先看RK3288的架构图。 在ConnectActivity模块中可以找到UART*5字样,这意味着3288有5个可用的串口,其中串口2一般不开放作为调试口使用。
5.1 串口定义
通用异步接收器/发送器(Universal Asynchronous Receiver/Transmitter),通常称为UART,是一种串行异步接收和发送协议。
UART串口有单工、半双工、全双工三种工作模式。 硬件连接比较简单,只需要3根线。 连接时注意两个设备的UART电平。 如果电平范围不一致,请在连接前进行电平转换。 你可以参考这篇文章。
我们常见的串口通讯设置界面如下:
主要有以下几个参数;
我们的设置基本上是8个数据位,1个停止位,无奇偶校验,无流量控制,如上图所示。 对于程序开发来说,主要关心的参数是波特率。
上面参考文章中的博主对波特率有一点误解。 他将比特率理解为波特率。 事实上,两者是有区别的。
波特率代表每秒传输的符号数,是数据传输速率的指标。 用单位时间内载波调制状态变化的次数来表示。 在信息传输通道中,承载数据信息的信号单元称为符号,每秒通过通道传输的符号数称为符号传输率,简称波特率。
1波特是指每秒传输1个符号symbol(通过不同的调制方式,可以在一个符号symbol上加载多位信息),1比特每秒是指每秒传输1比特(bit)。 单位“波特”本身已经代表每秒的调制次数,使用“每秒波特率”作为单位是一个常见的错误。
根据上述基本设置,一个符号实际上传输了总共10位,1个起始位+1个停止位+8个数据位。 如果波特率为9600,那么每秒总共传输9600*10=9600*10=。 96,000位,换算成字节就是12,000字节,大约是11.72kb。
需要注意的是,这个12000byte指的是串口实际传输的总数据位,但对于我们的程序来说,真正能处理的数据是除去起始位和停止位的数据位。 对于传输8位数据位的设置,即传输的字节数与波特率相同。 例如,波特率为 9600 意味着每秒传输 9600 个字节,即每毫秒传输 9.6 个字节。
Android主板上串口终端的定义如下图
Android 主板上的几乎所有串口都是这种 4 针格式。 这里特别重要的一点是,在对外设进行接线时,RX必须与外设的TX端口相匹配,TX必须与RX端口相对应,否则将无法接收。 数据传输。
在我接触过的众多外设中,Android常用的串口有三种标准接口。
UART是指硬件接口,是对硬件层面的描述。 TTL、RS232、485是指数据传输的电平标准。 计算机的存储单元是二进制位(bit),即0和1。0和1怎么能用电压来表示呢? 不同的表示方法对应不同的标准。 这就是TTL和RS232等电平标准的区别。
所有CPU芯片的UART数据传输电平均采用TTL标准。 我们在Android主板上看到的RS232或485接口需要另一级转换才能与CPU通信。 可以说,直接源自Android主板CPU的串口引脚都是TTL标准。 如果需要其他接口,必须在中间添加电平转换芯片才能满足要求。
参考文章:
5.2 三种UART接口TTL介绍
TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑),TTL电路的工作电压为5V,其输出可以是高电平(3.6V)或低电平(0.3V)。 为了用这个模拟电压来表示数字量的逻辑1和逻辑0,TTL电平规定:
参考:
RS232
它的全称是“数据终端设备(DTE)和数据通信设备(DCE)之间串行二进制数据交换接口技术标准”。 该标准指定使用 25 针 DB-25 连接器。 规定了各个引脚的信号内容,也规定了各种信号的电平。
后来IBM的PC将RS232简化为DB-9连接器,成为事实上的标准。 工控的RS-232口一般只用RXD、TXD、GND三根线。 如下所示。
采用负逻辑,规定逻辑“1”的电平为-5V~-15V,逻辑“0”的电平为+5V~+15V。 选择该电气标准的目的是为了提高抗干扰能力,增加通信距离。 RS-232 的噪声容限为 2V,接收器能够将低至 +3V 的信号识别为逻辑“0”,将高至 -3V 的信号识别为逻辑“1”。
全双工通信,传输距离短,通信距离小于15m,传输速率小于20kb/s。
RS485
RS-485总线标准规定了总线接口的电气特性标准,即两种逻辑状态的定义:正电平在+2V和+6V之间,表示逻辑状态; 负电平在-2V到-6V之间,代表另一种逻辑状态;
数字信号采用差分传输方式,即用AB与AB之间的电压差来表示逻辑状态,可以有效减少噪声信号的干扰。
RS-485工业总线标准可有效支持多子节点和长通讯距离。 总共可以接收32个设备。 接收信息灵敏度高,采用屏蔽双绞线传输。 采用半双工(两线制),最大传输距离约1219米,传输速度可达10Mbps。