Android串列埠通訊
關於串列埠通訊的原理這篇部落格講的相對比較簡單易懂: http://blog.csdn.net/qiwenmingshiwo/article/details/49557889,適合剛接觸的同學,本片主要與大家分享一下如果具體使用,使得的自己所要開發的串列埠通訊功能跑起來,也是菜鳥一枚,如果不對的地方請大神指教
一、串列埠除錯工具
最好是下載一個串列埠除錯工具先對自己的板子測試一下,明確自己到底有那些串列埠串列埠及路徑,我使用的這個工具,大家可以嘗試一下:http://www.cr173.com/soft/66999.html
並且找到了相應的原始碼:http://download.csdn.net/download/asqwduanfeng/9676069,其實也就是谷歌提供的,大神改造了成功執行在AS上的,感謝一下大神.
二、如果使用google提供的Serial port API
1.匯入so檔案
在主目錄資料夾下建一個jniLibs資料夾,將需要的依次匯入即可
2、在主目錄下建立cpp,用於儲存JNI相關的C程式碼
之後必須在build.gradle下修改CMakeLists的路徑
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
修改完成之後,如果編譯會自動生成一個如下的檔案,無需修改,提交程式碼的時候ignore就OK
3、修改cpp下的Serialport.c和Serialport.h的內容,修改如下
將包名替換為專案的包名,類名只要是你自己命名的類,一般都是copy的,所以不用改,AS中crtl +R,搜尋包名,然後將其全部替換為自己的包名即可,包名是
AndroidManifest下的,見下圖
4.下載NDK,和CMAKE
使用
開啟串列埠:
串列埠路徑:“/dev/ttMT1”
波特率:9600
這兩個引數必須不配置正確,否則無法使用,一般每個廠商會有自己特定的規定,具體會有文件說明,如果文件說明不清楚,就要主動去溝通,一定得問明白,能不能用就看這兩個引數了
//開啟串列埠 public SerialPort getSerialPort() throws SecurityException, IOException, InvalidParameterException { if (mSerialPort == null) { mSerialPort = new SerialPort(new File("/dev/ttyMT1"), 9600, 0); Log.d(TAG,"getSerialPort執行了"); } return mSerialPort; }
傳送資料和接收資料:一般是16進位制的,具體要根據說明文件按照人家規定的幀格式去操作,包括接收到的資料的處理也是如此,如果接收的有分高8位和低8位的,高8位的一定得左移8位之後和低8位一起處理,這樣的資料才合理:
//傳送資料
public void send(byte[] sendCmd) {
Log.d(TAG,"====sendCmd======" + sendCmd);
if (sendCmd == null && sendCmd.length == 0) {
return;
}
Message message = Message.obtain();
message.obj = sendCmd;
sendingHandler.sendMessage(message);
}
/**
* 讀取流中的資料
*/
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
while (!isInterrupted()) {
int size;
try {
byte[] buffer = new byte[11];
if (mInputStream == null) return;
size = mInputStream.read(buffer);
if (size > 0) {
int i = 0;
i++;
onDataReceived(buffer, size);
Log.d(TAG,"==========i==========" + i);
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
具體的邏輯在onDateReceived中實現,這裡的byte[] buffer = new byte[11], 11是根據我們文件中每次傳送的位元組數來定義的,具體可以根據你自己專案中接收的位元組數處理即可。
關閉串列埠
//關閉串列埠
public void closeSerialPort() {
if (mSerialPort != null) {
mSerialPort.close();
mSerialPort = null;
}
}
注意:在實際開發中可能一下open和close會報紅,大可不必care,只要功能正常就好了,我做的時候糾結了好長時間,發現沒必要
/**
* 開啟串列埠裝置的方法
* @param path 裝置的絕對路徑
* @param baudrate 波特率
* @param flags 標誌
* @return
*/
private native static FileDescriptor open(String path, int baudrate, int flags);
//關閉裝置
public native void close();
本人菜鳥一枚,大多地方也是借鑑前輩的經驗,目前只是在使用這些,具體內部的知識還需再深究,想要走下去NDK這塊是必須瞭解的,如果有好的學習文章或路徑歡迎推薦,如果有需要詳細程式碼的請私信我 29663[email protected],或加我QQ2966325911
相關推薦
android串列埠通訊接受自定義協議資料並解析問題
1.一般自定義的串列埠協議 串列埠傳輸介面底層是按位(bit)傳送的,上層是按byte傳送和接收的,但協議為了方便描述,每個byte用十六進位制數(0x00~0xFF)表示,範相當於十進位制的0~255,而byte為八位且是有符號型別,相當於十進位制的-128~127,明
Android串列埠通訊異常UnsatisfiedLinkError和Please configure your serial port first.
一,異常 使用Google串列埠除錯開源庫App除錯串口出現以下異常: 二,解決辦法: 在Android.mk檔案中加入:LOCAL_LDFLAGS += -fPIC,重新編譯Google開源庫的原始碼,生成.so庫 # # Copyright 2009 Ce
Android串列埠通訊-AndroidStudio
用到谷歌開源serialPort api 下載連結:serialPort-api 以下專案用的so庫是谷歌原庫,沒有做修改 新建專案: 1、先把下載的api中這些檔案拷進專案的相應位置 SerialPort類是咱們Android可以呼叫的類
我的Android NDK之旅(四),android串列埠通訊-mac+串列埠除錯工具
一些關於串列埠的知識 什麼是串列埠 串列埠是計算機上一種非常通用裝置通訊的協議,不要與通用序列匯流排Universal Serial Bus(USB)混淆。大多數計算機包含兩個基於RS232的串列埠。串列埠同時也是儀器儀表裝置通用的通訊協議;很多GP
Android 串列埠通訊開發筆記3
Android串列埠開發 延伸和擴充套件,1.使用JNI Cmake 自己編譯串列埠通訊 的so庫:Android Studio 3.0 實現方式。2.CRC校驗 以及擴充套件設計:a.一(串列埠)對多(硬體通訊);b.多(串列埠)對多(硬體)的實現。1.以串列埠除錯工具為例,使用其原本的原始碼使用JNI C
Android串列埠通訊:串列埠讀寫例項
轉自:http://gqdy365.iteye.com/blog/2188906 在Android串列埠通訊:基本知識梳理(http://gqdy365.iteye.com/admin/blogs/2188846)的基礎上,我結合我專案中使用串列埠的例項,進行總結; An
Android串列埠通訊:串列埠讀寫
公司有個專案要用到串列埠通訊,同事有寫好一個DEMO,用的時候發現會有問題,從jni讀串列埠資料時,經常會被截斷,修改select延時還是無濟於事,於是想到用JAVA直接去讀/寫串列埠檔案,經過搜尋在iteye上的一篇部落格1可以滿足需求,但看到下面留言說有問題
Android 串列埠通訊自定義生成so檔案
串列埠通訊Android裝置通過串列埠與其他裝置進行通訊的一種方式,對於Android串列埠操作基本上就是對應串列埠檔案的讀寫,基本思路就是: 1.對串口檔案進行配置(波特率等),開啟串列埠檔案 2.讀寫串列埠 3.關閉串列埠檔案 但是這裡需要注意的是Android中讀寫串列
Android串列埠通訊
關於串列埠通訊的原理這篇部落格講的相對比較簡單易懂: http://blog.csdn.net/qiwenmingshiwo/article/details/49557889,適合剛接觸的同學,本片主要與大家分享一下如果具體使用,使得的自己所要開發的串列埠通訊功能跑起來,也
android串列埠通訊例項
1、init程式碼 /*************************************************************** ** fun: init uart(/dev/ttymxc1); ** in: ** out: fd sucess, -1 false; **
Android串列埠通訊(Android Studio)
用到谷歌開源serialPort api 下載連結:serialPort-api 以下專案用的so庫是谷歌原庫,沒有做修改 新建專案: 1、先把下載的api中這些檔案拷進專案的相應位置 SerialPort類是咱們Android可以呼叫的類,
谷歌Android開源串列埠通訊使用
Demo下載地址: 谷歌官方串列埠庫使用 引言: 現在的串列埠通訊多用於嵌入裝置中,Android主機板與各種板卡之間的通訊。因此串列埠通訊在未來智慧裝置中應用會很廣泛。 現在市面上幾乎所有的Android串列埠通訊庫都是用的Google開源的https://github.
Android的串列埠通訊測試程式
現在有很多Android屏作為主站給單片機發送命令,第一步就是需要串列埠通訊,這裡主要是記錄232串列埠通訊的方法。只要通訊成功了,就可以進一步研究modbus協議通訊或者其他協議。 長話短
Android中串列埠通訊的問題
公司的專案是要做一個應用於工廠的一個物理網系統,android方面需要應用到串列埠通訊 .通過上網查詢到Google官方api,當時為了快速,把這個demo 依賴了 在application裡面生成了getSerialPort() 函式,用來獲取到S
Android 模擬器串列埠與PC虛擬串列埠通訊
1、開發環境 (1) Android Studio 3.0.1 (2) JDK 1.8 (3) 1、建立SerialPortNDKText 工程 2、在工程的main目錄下,建立jniLibs資料夾,如:E:\androidcod
Android 串列埠藍芽通訊開發Java版本
Android串列埠BLE藍芽通訊Java版 0. 導語 我們都知道,在物聯網中,BLE藍芽是通訊裝置的關鍵裝置。在傳統的物聯網應用中,無線WIFI、藍芽和Zigbee,還有一些其他的2.4GHz的無線網絡卡等。對於一個面向物聯網的嵌入式工程師來講,
Android 之 串列埠通訊
閱讀前提:串列埠通訊是微控制器採用RS232與Android板進行通訊,首先要了解RS232傳送資料的工作原理:RS232傳送資料的時候是通過一個位元組接著一個位元組,將資料傳送出去,所以當接收資料時候也應當一個位元組一個位元組接受 在AndroidMan
MFC串列埠通訊例項
參考MSComm控制元件的用法和函式說明。裡面講得也算詳細了。所以這裡直接獻上原始碼示例。 github下載地址 CSDN下載地址 效果如圖: 需要注意的是: 1.如果想同時recv/send,則必須加個執行緒。 2.奇偶校驗中,引數設定為,無(n),偶校驗(o),
Android串列埠屏(電阻,電容觸控),帶AV輸入,7寸LCD1(800*48...
基本引數:CPU:MT6572 雙核1GHzRAM:512MB儲存:4GB網路:GSM,WCDMA(BAND1)WIFI:2.4G 802.11bgn藍芽:2.0支援GPS定位 擴充套件引數:1.電源輸入8~28V寬電壓輸入。2.可選配電阻觸控式螢幕和電容觸控式螢幕。3.可選配AV攝像頭輸入,CVBS(
C++實現串列埠通訊上位機軟體
串列埠使用的是RS232匯流排進行通訊,通訊方式是半雙工。有兩種方式可以實現串列埠通訊,一種是通過ActiveX控制元件這種方法程式簡單,但欠靈活。第二個是可以通過呼叫Windows的API函式,本例程通過第二種方式。 一般通過四步來完成通訊(1)開啟串列埠(2)配置串列埠(3)讀寫串列埠(4)