麒麟linux + java + JSSC 串口通信

RXTXComm在使用時(shí)總是不正常,在使用JSSC后串口收發(fā)數(shù)據(jù)OK猖吴。

一、JSSC相關(guān)

package com.demo;

import jssc.SerialPort;

import jssc.SerialPortEvent;

import jssc.SerialPortEventListener;

import jssc.SerialPortException;

public class JSSC {

public static SerialPort openSerialPort(String portName,int baudRate)throws SerialPortException {

final SerialPort serialPort =new SerialPort(portName);//串口號(hào);

? ? ? ? serialPort.openPort();

serialPort.setParams(baudRate,8,1,0);

if(serialPort.isOpened()) {

System.out.println("打開(kāi)串口:" + serialPort.getPortName());

}

serialPort.addEventListener(new SerialPortEventListener() {

public void serialEvent(SerialPortEvent serialPortEvent) {

if (serialPortEvent.isRXCHAR()) {

try {

if (serialPortEvent.getEventValue() >0) {

byte[] bytes =serialPort.readBytes(serialPortEvent.getEventValue());

//以16進(jìn)制的方式讀取串口返回?cái)?shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("串口:" + serialPortEvent.getPortName() +"宽气,接收數(shù)據(jù):" +serialPort.readHexString(serialPortEvent.getEventValue()));

}

Thread.sleep(50);

}catch (Exception e) {

e.printStackTrace();

}

}

}

});

return serialPort;

}

/**

? ? *發(fā)送串口命令

? ? */

? ? public static void sendData(SerialPort serialPort,byte[] bytes) {

if (serialPort !=null && serialPort.isOpened()) {

try{

serialPort.writeBytes(bytes);

System.out.print("---發(fā)送數(shù)據(jù):");

for(byte item : bytes) {

System.out.print(item +" ");

}

System.out.println("---");

}catch (SerialPortException e) {

e.printStackTrace();

}

}

}

/**

? ? * 字節(jié)轉(zhuǎn)十六進(jìn)制

? ? * @param b 需要進(jìn)行轉(zhuǎn)換的byte字節(jié)

? ? * @return? 轉(zhuǎn)換后的Hex字符串

? ? */

? ? public static String byteToHex(byte b){

String hex = Integer.toHexString(b &0xFF);

if(hex.length() <2){

hex ="0" + hex;

}

return hex;

}

/**

? ? * 字節(jié)數(shù)組轉(zhuǎn)十六進(jìn)制

? ? * @param bytes 需要轉(zhuǎn)換的byte數(shù)組

? ? * @return? 轉(zhuǎn)換后的Hex字符串

? ? */

? ? public static String bytesToHex(byte[] bytes) {

StringBuffer sb =new StringBuffer();

for(int i =0; i < bytes.length; i++) {

String hex = Integer.toHexString(bytes[i] &0xFF);

if(hex.length() <2){

sb.append(0);

}

sb.append(hex);

}

return sb.toString();

}

/**

? ? * Hex字符串轉(zhuǎn)byte

? ? * @param inHex 待轉(zhuǎn)換的Hex字符串

? ? * @return? 轉(zhuǎn)換后的byte

*/

? ? public static byte hexToByte(String inHex){

return (byte)Integer.parseInt(inHex,16);

}

/**

? ? * hex字符串轉(zhuǎn)byte數(shù)組

? ? * @param inHex 待轉(zhuǎn)換的Hex字符串

? ? * @return? 轉(zhuǎn)換后的byte數(shù)組結(jié)果

? ? */

? ? public static byte[] hexToBytes(String inHex){

int hexlen = inHex.length();

byte[] result;

if (hexlen %2 ==1){

//奇數(shù)

? ? ? ? ? ? hexlen++;

result =new byte[(hexlen/2)];

inHex="0"+inHex;

}else {

//偶數(shù)

? ? ? ? ? ? result =new byte[(hexlen/2)];

}

int j=0;

for (int i =0; i < hexlen; i+=2){

result[j] =hexToByte(inHex.substring(i,i+2));

j++;

}

return result;

}

}

二佩憾、使用

package com.demo;

import jssc.SerialPort;

import jssc.SerialPortException;

public class JSSCMain {

public static void main(String[] args)throws InterruptedException {

byte a =intToByte(0x7e);

short b =1600;

byte c =intToByte(0xc4);

byte [] test =new byte[1024];

test[0] = a;

test[1] =intToByte(b%256);

test[2] =intToByte(b/256);

test[3] = c;

final byte[] res =new byte[4];

System.arraycopy(test,0, res,0,4);

SerialPort serialPort =null;

try{

serialPort = JSSC.openSerialPort("/dev/ttyS1",9600);

}catch (SerialPortException e) {

System.out.println("打開(kāi)串口失敗");

}

if(serialPort !=null) {

JSSC.sendData(serialPort, res);

}

}

//byte 與 int 的相互轉(zhuǎn)換

? ? public static byte intToByte(int x) {

return (byte) x;

}

public static int byteToInt(byte b) {

//Java 總是把 byte 當(dāng)做有符處理;我們可以通過(guò)將其和 0xFF 進(jìn)行二進(jìn)制與得到它的無(wú)符值

? ? ? ? return b &0xFF;

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枉昏,一起剝皮案震驚了整個(gè)濱河市陈肛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兄裂,老刑警劉巖句旱,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晰奖,居然都是意外死亡谈撒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)畅涂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)港华,“玉大人,你說(shuō)我怎么就攤上這事午衰。” “怎么了冒萄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵臊岸,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我尊流,道長(zhǎng)帅戒,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮逻住,結(jié)果婚禮上钟哥,老公的妹妹穿的比我還像新娘。我一直安慰自己瞎访,他們只是感情好腻贰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著扒秸,像睡著了一般播演。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伴奥,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天写烤,我揣著相機(jī)與錄音,去河邊找鬼拾徙。 笑死洲炊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尼啡。 我是一名探鬼主播暂衡,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玄叠!你這毒婦竟也來(lái)了古徒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤读恃,失蹤者是張志新(化名)和其女友劉穎隧膘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體寺惫,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疹吃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了西雀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萨驶。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖艇肴,靈堂內(nèi)的尸體忽然破棺而出腔呜,到底是詐尸還是另有隱情,我是刑警寧澤再悼,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布核畴,位于F島的核電站,受9級(jí)特大地震影響冲九,放射性物質(zhì)發(fā)生泄漏谤草。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丑孩。 院中可真熱鬧冀宴,春花似錦、人聲如沸温学。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)枫浙。三九已至刨肃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間箩帚,已是汗流浹背真友。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留紧帕,地道東北人盔然。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像是嗜,于是被迫代替她去往敵國(guó)和親愈案。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • 1. ASCII 編碼 ASCII(American Standard Code for Information ...
    s酸菜閱讀 8,667評(píng)論 0 8
  • DAY 05 1鹅搪、 public classArrayDemo { public static void mai...
    周書(shū)達(dá)閱讀 653評(píng)論 0 0
  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子站绪,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
    趙宇_阿特奇閱讀 1,850評(píng)論 0 2
  • 2 幻燈片內(nèi)容準(zhǔn)備的3個(gè)步驟 內(nèi)容是一份幻燈片的靈魂所在丽柿,是幻燈片制作過(guò)程中恢准,最需要打磨的一部分,也是決定一份幻燈...
    無(wú)天下閱讀 482評(píng)論 0 0
  • 時(shí)間過(guò)得真快甫题!不知不覺(jué)己進(jìn)群學(xué)習(xí)兩個(gè)月了馁筐,期間見(jiàn)證了自己調(diào)和心態(tài)得到親子關(guān)系的融洽,女兒一周比一周有越來(lái)越大的變化...
    周麗1閱讀 278評(píng)論 1 4