java与单片机通信_Java实现串口通信与单片机通信实例..【Pnoter】
一 · 在windows操作系統下,實現Java串口通信,需要用到sun提供的串口通信包,javacomm【可以去Java站點去下載最新版本的壓縮包,然后解壓】。
解壓之后要用到壓縮包中的三個文件,將這三個文件按照如下方式配置【一下路徑為相對路徑,視個人電腦Java安裝路徑不同而異】:
1、comm.jar放置到 JAVA_HOME/jre/lib/ext;【jre/lib(也就是在JAVA文件夾下的jre)】
2、win32com.dll放置到 JAVA_HOME/bin;
3、javax.comm.properties兩個地方都要放;
二 · 在這里我們首先了解一下Java串口通信API說明【CommunicationAPI(包含于javax.comm包中)】,這樣有利進一步了解Java串口通信包,ava提供了 CommunicationAPI(包含于javax.comm包中)用于通過與機器無關的方式,控制各種外部設備。Communications API,是標準的Java的擴展部分,它在JavaAPI中是沒有附帶的。
三 ·?Communications API 簡介:
Communications API 的核心是抽象的CommPort類及其兩個子類:SerialPort類和ParallePort類。其中,SerialPort類是用于串口通信的類,ParallePort類是用于并行口通信的類。CommPort類還提供了常規的通信模式和方法,例如:getInputStream( )方法和getOutputStream( )方法,專用于與端口上的設備進行通信。然而,這些類的構造方法都被有意的設置為非公有的(non-public)。所以,不能直接構造對象,而是先通過靜態的CommPortIdentifer.getPortIdentifiers()獲得端口列表;再從這個端口列表中選擇所需要的端口,并調用CommPortIdentifer對象的Open( )方法,這樣,就能得到一個CommPort對象。當然,還要將這個CommPort對象的類型轉換為某個非抽象的子類,表明是特定的通訊設備。該子類可以是SerialPort類和ParallePort類中的一個。下面將分別對CommPort類,CommPortIdentifier類,串口類SerialPort進行詳細的介紹。
四 ·?CommPortIdentifier類 :
addPortName(String, int, CommDriver) 添加端口名到端口列表里 addPortOwnershipListener(CommPortOwnershipListener) 添加端口擁有的監聽器 removePortOwnershipListener(CommPortOwnershipListener) 移除端口擁有的監聽器 getCurrentOwner() 得到當前占有端口的對象或應用程序 getName() 得到端口名稱 getPortIdentifier(CommPort) 得到參數打開的端口的CommPortIdentifier類型對象 getPortIdentifier(String) 得到以參數命名的端口的CommPortIdentifier類型對象 getPortIdentifiers() 得到系統中的端口列表 getPortType() 得到端口的類型 isCurrentlyOwned() 判斷當前端口是否被占用 open(FileDescriptor) 用文件描述的類型打開端口 open(String, int) 打開端口,兩個參數:程序名稱,延遲時間(毫秒數)
五 ·?SerialPort類:
DATABITS_5 數據位為5 STOPBITS_2 停止位為2 PARITY_ODD 奇檢驗 DATABITS_6 數據位為6 STOPBITS_1 停止位為1 PARITY_MARK 標記檢驗 DATABITS_7 數據位為7 STOPBITS_1_5 停止為1.5 PARITY_NONE 空格檢驗 DATABITS_8 數據位為8 PARITY_EVEN 偶檢驗 PARITY_SPACE 無檢驗 SerialPort對象的關于串口參數的函數 getBaudRate() 得到波特率 getParity() 得到檢驗類型 getDataBits() 得到數據位數 getStopBits() 得到停止位數 setSerialPortParams(int, int, int, int) 設置串口參數依次為(波特率,數據位,停止位,奇偶檢驗) SerialPort關于事件的靜態成員變量 BI Break interrupt中斷 FE Framing error錯誤 CD Carrier detect載波偵聽 OE Overrun error錯誤 CTS Clear to send清除以傳送 PE Parity error奇偶檢驗錯誤 DSR Data set ready數據備妥 RI Ring indicator響鈴偵測 DATA_AVAILABLE 串口中的可用數據 OUTPUT_BUFFER_EMPTY 輸出緩沖區空 SerialPort中關于事件的方法 isCD() 是否有載波 isCTS() 是否清除以傳送 isDSR() 數據是否備妥 isDTR() 是否數據端備妥 isRI() 是否響鈴偵測 isRTS()?? 是否要求傳送 addEventListener(SerialPortEventListener)??? 向SerialPort對象中添加串口事件監聽器 removeEventListener() 移除SerialPort對象中的串口事件監聽器 notifyOnBreakInterrupt(boolean) 設置中斷事件true有效,false無效 notifyOnCarrierDetect(boolean) 設置載波監聽事件true有效,false無效 notifyOnCTS(boolean) 設置清除發送事件true有效,false無效 notifyOnDataAvailable(boolean) 設置串口有數據的事件true有效,false無效 notifyOnDSR(boolean) 設置數據備妥事件true有效,false無效 notifyOnFramingError(boolean) 設置發生錯誤事件true有效,false無效 notifyOnOutputEmpty(boolean) 設置發送緩沖區為空事件true有效,false無效 notifyOnParityError(boolean) 設置發生奇偶檢驗錯誤事件true有效,false無效 notifyOnRingIndicator(boolean) 設置響鈴偵測事件true有效,false無效 getEventType() 得到發生的事件類型返回值為int型 sendBreak(int) 設置中斷過程的時間,參數為毫秒值 setRTS(boolean) 設置或清除RTS位 setDTR(boolean) 設置或清除DTR位 close() 關閉串口 getOutputStream() 得到OutputStream類型的輸出流 getInputStream() 得到InputStream類型的輸入流
六 · 看一段用Java寫的一個往串口寫(Write)字符串的完整程序【如果你的電腦沒有那么多的commport可以去網上搜索一個虛擬端口的軟件,在你的電腦上開幾個虛擬的commport,推薦軟件Virtual Serial Port Driver ,個人表示很好用,可惜是收費的,不過可以試用,你懂!】
如下為往我的電腦com1口發送字符串的實例【已經經過測試,完整無誤!】
七 · 我們再
看一段用Java寫的一個往串口寫(Read)字符串的部分代碼【只是在上面的程序中添加了幾個方法,read()方法和serialEvent()端口監聽方法以及run()計時方法】。
如下為讀取我的電腦com2口字符串的實例【已經經過測試,完整無誤!】
注意事項:關串口很重要,不然會出現運行錯誤【如下為close定義:
public void close() {
serialPort.close();
serialPort = null;
commPort = null;】。
總結
以上是生活随笔為你收集整理的java与单片机通信_Java实现串口通信与单片机通信实例..【Pnoter】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UWB定位技术芯片有什么用
- 下一篇: Java程序 switch语句