1. 程式人生 > >Android串列埠通訊

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)