java zigbee 串口_基于java的zigbee串口通讯的多线程.docx

该文档介绍了如何使用Java进行Zigbee串口通信的多线程实现。通过`gnu.io`库,设置串口参数如波特率、数据位等,并打开指定端口。程序不断读取串口数据,解析并更新空气温度、湿度、土壤温度、湿度和风速等环境参数,同时处理可能出现的IOException和其他异常情况。
摘要由CSDN通过智能技术生成

41528d3028836879cd698677c3999917.gif基于java的zigbee串口通讯的多线程.docx

importgnu.io.CommPortIdentifier;importgnu.io.PortInUseException;importgnu.io.SerialPort;importjava.io.BufferedStream;importjava.io.IOException;importjava.io.Stream;importjava.io.OutputStream;importjava.util.Enumeration;importjava.util.concurrent.CountDownLatch;importcom.serotonin.io.serial.SerialParameters;publicclassSerialCommcationimplementsRunnable{//对象的声明privateStringresult=““;staticSerialPortserialPort;staticOutputStreamout;staticStreamin;StringportName=null;privatestaticintportID=2;privatefloatairtemperature;privatefloatairhumidity;privatefloatsoiltemperature;privatefloatsoilmoisture;privatefloatwindvelocity;privatedoublerainfall;privateThreadmyThread;@Overridepublicvoidrun(){//TODOAuto-generatedstub}publicSerialCommcation(){portName=“COM“+portID;SerialParametersserialParameters=newSerialParameters();System.out.println(“系统应用的端口为:“+portName);//设定通讯的串行口serialParameters.setCommPortId(portName);//设定成无奇偶校验serialParameters.setParity(0);//设定数据位是8位serialParameters.setDataBits(8);//设定一个停止位serialParameters.setStopBits(1);serialParameters.setPortOwnerName(“Numbnuts“);//串行口上的波特率serialParameters.setBaudRate(9600);myThread=newThread(){publicvoidrun(){while(true){update();closeSer();try{sleep(1);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblock//e.printStackTrace();System.out.println(“InterruptedException“+e);}}}};myThread.start();}//读取串口数据privatesynchronizedvoidupdate(){//TODOAuto-generatedstubtry{try{EnumerationportList=CommPortIdentifier.getPortIdentifiers();CommPortIdentifierportId=null;while(portList.hasMoreElements()){portId=(CommPortIdentifier)portList.nextElement();if(portId.getName().equalsIgnoreCase(“COM2“)){serialPort=(SerialPort)portId.open(““,2000);//open方法打开通讯端口,得到一个CommPort对象,它使程序独占端口//System.out.print(serialPort);}}}catch(PortInUseExceptione){//TODO:handleexceptionSystem.out.println(“PortInUseException“+e);}//用字节输入流in调用read()方法读出串口中的数据try{String[]recive=newString[55];Floattemp=null;while(true){in=newBufferedStream(serialPort.getStream());if(in.available()>0){for(inti=0;i100){//airhumidity=100;//}//System.out.println(airhumidity);//土壤温度/*result=recive[39]+recive[40]+recive[42]+recive[43];result=result.substring(1,2)+result.substring(3,4)+“.“+result.substring(5,6)+result.substring(7,8);System.out.println(“传感器值为:“+result);temp=newFloat(result);soiltemperature=(float)(Math.round((temp*11.875-90.50)*10))/10;if(soiltemperature=60000){rainfall=0.0;//count=0.0;//minFlag=0;//}//}catch(IOExceptionioe){//TODO:handleexceptionSystem.out.println(“Exception“+ioe);}result=“/“+String.valueOf(airtemperature)+“/“+String.valueOf(airhumidity)+“/“+String.valueOf(soiltemperature)+“/“+String.valueOf(soilmoisture)+“/“+String.valueOf(windvelocity)+“/“+String.valueOf(rainfall);System.out.println(result);}catch(Exceptione){//TODO:handleexceptionSystem.out.println(“Exception“+e);}}publicStringreadPort(){System.out.println(result);returnresult;}publicvoidcloseSer(){try{in.close();}catch(IOExceptione){//TODO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值