Android智能硬件开发心得总结(一)
前言:轉向Android智能硬件開發近一年了,一路過來也經歷過幾個大大小小的項目,從對Android智能硬件一無所知到現在算是略有小成,期間踩了很多坑,也接觸到了許多非Android方面的知識,現用文章的方式將之記錄下來,與大家分享。
1.Android智能硬件的定義與應用領域
關于智能硬件的定義,以我理解的角度來看,首先這是一個不同于移動手機的硬件,它本質還是一個可觸碰的實質物體;其次關于智能,只要是基于Android系統開發的硬件就可稱之為智能,因為智能硬件最關鍵的特性就是與外部連接通信,也稱之為物聯網,而Android系統自帶優秀的外部連接通信體系。
我們最常聽到與見到的智能硬件有手環、智能音箱、智能家居這些比較成熟的消費級商品,這些智能硬件大部分都是沒有界面的,與我從事的領域有所不同。沒有界面的智能硬件大部分都不是Andriod系統,而有觸屏界面的智能硬件我敢說80%以上都是Android系統,因為Android的交互體系絕對是最好的。
市面上成熟的Android智能硬件有:手持POS機、自動售貨機、政務自助機、人臉識別門禁、收銀機、汽車多媒體、電子班牌、快遞柜、影院取票機、廣告視頻機等等。
2.一款智能硬件產品開發的全流程
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性能又不能太差以讓產品毫無競爭力可言。從我觀察的情況來看,現在市面上的智能硬件基本是三家芯片廠商占據了絕大部分市場,它們分別是:
- 瑞芯微 Rockchip,簡稱RK
- 全志 AllWinner
- 飛思卡爾 FreeScale
瑞芯微是我接觸比較多的,在百度搜安卓主板出來的廣告廠商基本都是采用瑞芯微方案的,總體來說瑞芯微方案是最成熟的。
全志的安卓主板給我的感覺就是很便宜但系統都是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。
總結
以上是生活随笔為你收集整理的Android智能硬件开发心得总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2379):加入git管理
- 下一篇: Android应用文本字体设置