Android操作系統是Google 基于開源的Linux 操作系統開發的移動操作平臺,由操作系統、中間件、用戶界面和應用軟件組成,是專門為移動終端打造的開放和完整的移動操作系統。Android 軟件平臺包含Java Application、Application Framework、Libraries、Runtime 與LinuxOS 等層。用戶可根據產品的不同需求對系統進行裁剪,從而適應多樣的產品需求,Android 系統就如同積木一樣通過組合不同的軟硬件實現不同的應用產品。藍牙的出現為移動設備的互聯提供了一個方便快捷的選擇,Android 設備和以單片機為處理器的控制器聯接使兩者的功能得到了互補。
1 系統架構
基于藍牙與Android 設備的控制系統由Android 設備和下位機組成。Android設備(Android 智能手機或Android 平板)安裝有專門編制的軟件。下位機采用ATMEL 公司高效的RISC 內核的ATMEGA 8 為核心,并集成藍牙串行模塊為通信信道。Android 設備通過藍牙將數據發送至下位機,下位機根據接收到數據,完成相應的控制功能,并將處理結果上傳,實現實時監測、實時控制功能。下位機只負責數據的采集和實現控制功能,數據的存儲和處理在Android 設備上實現。
2 下位機設計
2.1 控制模塊的設計
下位機由ATMEAG8、數字溫度傳感器、電機驅動電路等組成,其中CPU 部分電路如圖1 所示。下位機處理器串口連接藍牙模塊。數字溫度傳感器將當前溫度直接轉換成數字信號。藍牙模塊設置為從工作模式。
圖1 CPU 電路原理圖
系統上電后藍牙模塊處于等待連接狀態, 當Android 設備第一次發出連接請求時需要輸入藍牙模塊的內置密碼,以后再連接時則不需要輸入密碼,只有密碼匹配成功才能后成功建立藍牙連接。藍牙模塊為Android 設備和ATMEAG8 的通信信道,實現Android 設備和下位機的雙向數據連接。用戶通過Android 設備向下位機發送命令,下位機接收到命令后,控制相應的執行模塊,實現設定的控制功能。K1 和K2 為低電平,電機兩端電壓為0V,電機停止;K1 為高電平,K2為低電平電機兩端為5V,電機正向轉動;K1 為低電平,K2 為高電平電機兩端為-5V,電機反向轉動;K1 和K2 不能同時為高電平,電機驅動電路如圖2 所示
圖2 電機驅動電路原理圖
2.2 藍牙模塊
藍牙模塊型號為IDS-BM4A, 模塊有主/ 從兩種工作模式,通過PIO2 電平來選擇模塊的工作,PIO2 為高電平,模塊工作在從模式。模塊可以有兩種應用方式,方式1 :從模塊上電即開始工作,用戶可以通過Android 設備查找模塊,模塊設備名稱為”SPP”, 查到設備后選擇連接,電腦端將提示輸入密碼,此時輸入“0000”,電腦將與模塊建立透明連接。方式2 :需要兩個藍牙模塊,一個設置為主模式,一個設置為從模式,分別與兩個MCU 連接,上電后主從模塊會自動配對連接,連接成功后主從模塊將建立透明數據傳輸,兩個設備之間可以直接互發數據。
工作狀態指示:模塊PIO0 用來連接LED,指示當前工作方式。
主模式:未連接,LED 間隔1 秒鐘快速閃爍2次;已連接,LED 常亮。
從模式:未連接,LED 快速閃爍;已連接,LED 常亮。
連接狀態指示:模塊PIO1 為連接狀態指示,連接成功PIO1 為高電平,連接斷開PIO1 為低電平。
波特率設定表:
3 Android 設備軟件設計
Android2.2 版本以上才能很好的支持藍牙功能,Android 上的應用程序一般采用Java 語言開發,編程環境一般采用Eclipse。
Android 應用程序需要使用藍牙功能, 必須在AndroidManifest.xml 中要申請兩個權限:BLUETOOTH_ADMIN 和BLUETOOTH。具體格式如下:
me="android.permission.BLUETOOTH"/>
BLUETOOTH_ADMIN 權限允許Android 應用程序啟動發現設備或者進行藍牙功能的設置;BLUETOOTH 權限是Android 應用程序執行藍牙通信必須具有的權限,例如接受連接和傳送數據。大多數應用程序都需要這個權限,才能查找當地的藍牙設備。
由于需要和下位機的藍牙模塊連接,在應用程序中需要實現主設備功能。具體的連接流程是:
(1)在應用程序中檢查設備的藍牙功能是否開啟,如果未開啟,則打開藍牙功能;
(2)查找設備附近等待連接的藍牙設備,顯示查找到的藍牙設備的物理地址(以前沒有連接過的設備)或藍牙設備的名稱;
(3)選擇想要連接的藍牙設備,如果是第一次連接這個目標設備系統會自動發起一個配對過程,彈出輸入連接密碼的對話框,輸入“0000”,等待對方校驗密碼,完成配對,然后進行連接。
(4)應用程序接收到連接成功,就可以通過生成的BluetoothServerSocke 和下位機進行數據傳輸。需要連接的藍牙模塊是藍牙串口,因此應用程序中定義的UUID 必須符合藍牙串口的UUID,這樣連接才會被接受。因為accept() 調用是一個阻塞的調用,應用程序所有響應在調用返回之前會被阻塞,因此一定不能在主線程中進行調用, 通常是在一個新的線程中做所有的工作從而避免應用程序主線程的阻塞。主要代碼如下;
(5)關閉server socket,釋放serversocket 和它占用的資源,結束應用程序。
4 結束語
本文提出了基于藍牙與Android 設備的無線控制系統模型,分析了藍牙網絡的一般結構, 采用通用的藍牙模塊實現了無線終端設計,給出了Android 設備的藍牙串行通訊軟件框架。憑借藍牙的傳輸高效并且快速等特點,該系統具有很好的靈活性,能廣泛應用于工業現場控制等多個領域,尤其是一些需要數據傳輸又不能很方便的布設通訊電纜的場合,具有廣闊的發展空間。
主要代碼
-
Android
+關注
關注
12文章
3935瀏覽量
127344 -
藍牙
+關注
關注
114文章
5809瀏覽量
170191 -
無線
+關注
關注
31文章
5450瀏覽量
173244
發布評論請先 登錄
相關推薦
評論