node - serialport串口通讯数据解析说明

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node - serialport串口通讯数据解析说明相关的知识,希望对你有一定的参考价值。

参考技术A 1、10进制、中文、字符转16进制(ascii码)

2、计算长度

3、校验位

4、数据发送

1、数据接收

Android串口通讯

参考技术A 1.打开串口。

2.串口处于监听状态

3.想串口写入数据,串口接收到数据返回数据

SerialPort类所在的包一定要和上图包名一直,因为串口通讯需要使用jni中的函数。

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;

/**

* 构造方法

* @param device 串口地址

* @param baurate 波特率

* @param flags

* @throws IOException

* @throws InterruptedException

*/

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

/*

* 检测是否有访问权限

*/

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

//如果没有读写权限,尝试chmod命令这个文件

L.tag("没有读写权限");

Process su;

try

su = Runtime.getRuntime().exec("/system/bin/su");//获取root读写权限

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");





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";//设备主板的串口地址,地址有所不同

public  void startListener()

SerialPort serialPort = new SerialPort(new File(path), 9600, 0);//9600是波特率,这个也是有所不同,具体要看设备

mFileInputStream = serialPort.getmFileInputStream();

mFileOutputStream = serialPort.getmFileOutputStream();//获取串口写入流

readThread  = new ReadThread();

readThread.start();//开启监听



/**

* 发送指令到串口

*

* @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) //循环监听串口,读取返回的数据

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());//收到串口的返回数据,在日志中打印出来



catch (IOException e)

// TODO Auto-generated catch block

e.printStackTrace();



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







以上是关于node - serialport串口通讯数据解析说明的主要内容,如果未能解决你的问题,请参考以下文章

Node.js笔记:SerialPort(串口)模块使用(基于10.x.x)

Node.js 串口通讯 node-serialport

C#中的串口通信SerialPort

Android串口通讯

Android串口开发与SerialPort工具封装

Java编程系列使用Java进行串口SerialPort通讯