Android串口通訊

?串口通訊的步驟:

1.打開串口。

2.串口處于監(jiān)聽狀態(tài)

3.想串口寫入數(shù)據(jù)吁讨,串口接收到數(shù)據(jù)返回數(shù)據(jù)

串口的一個基本結(jié)構(gòu):


SerialPort類所在的包一定要和上圖包名一直峦朗,因為串口通訊需要使用jni中的函數(shù)。

SerialPort類:

package android_serialport_api;

import java.io.File;

import java.io.FileDescriptor;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import com.fx.serialporttest.L;

public class SerialPort {

/*

* Do not remove or rename the field mFd: it is used by native method

* close();

*/

private FileDescriptor mFd;

private FileInputStream mFileInputStream;

private FileOutputStream mFileOutputStream;

/**

* 構(gòu)造方法

* @param device 串口地址

* @param baurate 波特率

* @param flags

* @throws IOException

* @throws InterruptedException

*/

public SerialPort(File device,int baudrate,int flags) {

/*

* 檢測是否有訪問權(quán)限

*/

if(!device.canRead()||!device.canWrite()){

//如果沒有讀寫權(quán)限橄维,嘗試chmod命令這個文件

L.tag("沒有讀寫權(quán)限");

Process su;

try {

su = Runtime.getRuntime().exec("/system/bin/su");//獲取root讀寫權(quán)限

String cmd = "chmod 777"+device.getAbsolutePath()+"\n"+"exit\n";

su.getOutputStream().write(cmd.getBytes()); //向此路徑文件寫入命令

if((su.waitFor()!=0||!device.canRead()||!device.canWrite())){

throw new SecurityException();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

mFd = open(device.getAbsolutePath(),baudrate,flags);

if(mFd==null){

mFd = open(device.getAbsolutePath(),baudrate,flags);

L.tag("native open return null");

}

mFileInputStream = new FileInputStream(mFd);

mFileOutputStream = new FileOutputStream(mFd);

}

public FileInputStream getmFileInputStream() {

return mFileInputStream;

}

public void setmFileInputStream(FileInputStream mFileInputStream) {

this.mFileInputStream = mFileInputStream;

}

public FileOutputStream getmFileOutputStream() {

return mFileOutputStream;

}

public void setmFileOutputStream(FileOutputStream mFileOutputStream) {

this.mFileOutputStream = mFileOutputStream;

}

//JNI

private native static FileDescriptor open(String path,int baudrate,int flags);

public native void close();

static {

System.loadLibrary("serial_port");

}

}



SerialPortFinger類:

package android_serialport_api;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import com.fx.serialporttest.L;

public? class SerialPortFinger {

private static ReadThread readThread;

private static FileInputStream mFileInputStream;

private static FileOutputStream mFileOutputStream;

static String path = "/dev/ttyS0";//設(shè)備主板的串口地址争舞,地址有所不同

public? void startListener(){

SerialPort serialPort = new SerialPort(new File(path), 9600, 0);//9600是波特率澈灼,這個也是有所不同,具體要看設(shè)備

mFileInputStream = serialPort.getmFileInputStream();

mFileOutputStream = serialPort.getmFileOutputStream();//獲取串口寫入流

readThread? = new ReadThread();

readThread.start();//開啟監(jiān)聽

}

/**

* 發(fā)送指令到串口

*

* @param cmd

* @return

*/

public boolean sendCmds(String cmd) {

boolean result = true;

byte[] mBuffer = (cmd+"\r\n").getBytes();

try {

if (mFileOutputStream != null) {

mFileOutputStream.write(mBuffer);

} else {

result = false;

}

} catch (IOException e) {

e.printStackTrace();

result = false;

}

return result;

}

static class ReadThread extends Thread{

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

int len;

StringBuffer sb = new StringBuffer("");

while(true){ //循環(huán)監(jiān)聽串口,讀取返回的數(shù)據(jù)

byte[] buffer = new byte[1024];

if(mFileInputStream==null){

return;

}

try {

len = mFileInputStream.read(buffer);

if(len>0){

sb.append(new String(buffer, 0, len));

}

if(!sb.toString().equals(""))

{

L.tag(sb.toString());//收到串口的返回數(shù)據(jù)者疤,在日志中打印出來

}

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

L.tag("接受完成");

}

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驹马,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子算利,更是在濱河造成了極大的恐慌泳姐,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缎患,死亡現(xiàn)場離奇詭異阎肝,居然都是意外死亡,警方通過查閱死者的電腦和手機判导,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門眼刃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摇肌,“玉大人,你說我怎么就攤上這事篮条。” “怎么了涉茧?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵伴栓,是天一觀的道長。 經(jīng)常有香客問我钳垮,道長,這世上最難降的妖魔是什么歧焦? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任绢馍,我火速辦了婚禮肠套,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘你稚。我一直安慰自己,他們只是感情好搁痛,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布落追。 她就那樣靜靜地躺著涯肩,像睡著了一般巢钓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上症汹,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天背镇,我揣著相機與錄音泽裳,去河邊找鬼破婆。 笑死柜裸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裳扯。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼亿鲜,長吁一口氣:“原來是場噩夢啊……” “哼冤吨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起其馏,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤爆安,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后褐奥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翘簇,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年呜笑,在試婚紗的時候發(fā)現(xiàn)自己被綠了叫胁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汞幢。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖输钩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情买乃,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布哼绑,位于F島的核電站抖韩,受9級特大地震影響疫铜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜壳咕,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一谓厘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竟稳,春花似錦、人聲如沸聂宾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纪他。三九已至许赃,卻和暖如春馆类,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咳胃,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓销睁,卻偏偏與公主長得像存崖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子冗栗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 一隅居、流的概念和作用葛虐。 流是一種有順序的,有起點和終點的字節(jié)集合屿脐,是對數(shù)據(jù)傳輸?shù)目偝苫虺橄蟆<磾?shù)據(jù)在兩設(shè)備之間的傳輸...
    布魯斯不吐絲閱讀 10,023評論 2 95
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法赞季,類相關(guān)的語法奢驯,內(nèi)部類的語法,繼承相關(guān)的語法撒遣,異常的語法管跺,線程的語...
    子非魚_t_閱讀 31,602評論 18 399
  • IO簡單概述 IO解決問題 : 解決設(shè)備與設(shè)備之間的數(shù)據(jù)傳輸問題(硬盤 -> 內(nèi)存 內(nèi)存 -> 硬盤) 讀和寫文...
    奮斗的老王閱讀 3,430評論 0 53
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理豁跑,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,637評論 18 139
  • 璀璨高中宠纯。清月從里面走出來便看到了停在學(xué)校對面的黑色私家車婆瓜,以及,車旁倚著的簡薄熙廉白。 他穿著和她一樣的校服乖寒。...
    Entrust閱讀 324評論 0 1