一、串口基础知识
1、串口通信是指通过串行通信串口进行的数据传输方式,在计算机中广泛应用,其中包括安卓系统。
2、串口通信的基础是数据位、停止位、校验位的设置。
3、串口通信中数据的传输是按照位(bit)的方式进行的。
4、串口通信使用不同的波特率进行数据传输,常用的波特率有9600、115200等。
二、Android串口通信的实现
在安卓系统中,以USB串口转接线连接串口设备,在进行串口通信。
Android系统提供了serialPort类,用于实现串口通信。
三、Android串口通信的步骤
1、获取串口访问权限。Android系统规定只有ROOT用户才能访问串口设备,所以需要通过jni层来实现串口的访问权限。
private static String serial_port;//串口号
private static int speed = 115200;//波特率
private static int bits = 8;//数据位
private static String event = "N";//校验位
private static int stop = 1;//停止位
static {
System.loadLibrary("serial_port");
}
public static native FileDescriptor open(String path, int baudrate, int num_data, char even_judg, int num_stop);
public static native void close();
public void setSpeed(int speed) throws Exception {
this.speed = speed;
}
public void setPath(String path) throws Exception {
this.serial_port = path;
}
public void setBits(int data_bits) {
this.bits = data_bits;
}
public void setStop(int stop_bit) {
this.stop = stop_bit;
}
public void setEvent(char event_judg) {
this.event = String.valueOf(event_judg);
}
public void open() throws Exception {
mFd = open(serial_port, speed, bits, event.charAt(0), stop);
}
public void closeDev() {
close();
}
2、读取和发送数据。
public class SerialPortUtil {
private ReadThread mReadThread;
private static OnDataReceiveListener onDataReceiveListener = null;//数据接收监听
private OutputStream mOutputStream;
private InputStream mInputStream;
private byte[] mBuffer = new byte[512];
private boolean exit = false;
/**
* 打开串口
* @throws SecurityException
* @throws IOException
* @throws InvalidParameterException
*/
public void openSerialPort() throws SecurityException, IOException, InvalidParameterException {
File device = new File("/dev/ttyS4");
SerialPort serialPort = new SerialPort(device, 115200, 0);
mOutputStream = serialPort.getOutputStream();
mInputStream = serialPort.getInputStream();
}
/**
* 发送数据
* @param data
*/
public void sendSerialPort(byte[] data) {
try {
if (mOutputStream != null) {
mOutputStream.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读取串口数据
*/
public void startReadSerialPort() {
mReadThread = new ReadThread();
mReadThread.start();
}
/**
* 停止读取串口数据
*/
public void stopReadSerialPort() {
if (mReadThread != null) {
mReadThread.interrupt();
mReadThread = null;
}
}
/**
* 设置数据监听的回调
* @param onDataReceiveListener
*/
public static void setOnDataReceiveListener(OnDataReceiveListener onDataReceiveListener) {
SerialPortUtil.onDataReceiveListener = onDataReceiveListener;
}
/**
* 串口数据监听接口
*/
public interface OnDataReceiveListener {
void onDataReceive(byte[] buffer, int size);
}
private class ReadThread extends Thread {
@Override
public void run() {
super.run();
while (!isInterrupted() && !exit) {
int size;
try {
byte[] buffer = new byte[64];
if (mInputStream == null) return;
size = mInputStream.read(buffer);
if (size > 0) {
if (onDataReceiveListener != null) {
onDataReceiveListener.onDataReceive(buffer, size);
}
}
} catch (IOException e) {
e.printStackTrace();
return;
}
}
}
}
}
四、Android串口通信的注意事项
1、在进行串口通信前,先确保串口设备连接到Android设备上。
2、在使用串口时,需要同时打开读和写操作。
3、在Android应用中使用串口时,需要获取应用程序权限。
4、在Android7.0及以上版本,需要使用内容提供者或文件共享方式操作串口。
5、为确保数据正确性,建议在数据传输结束后,加上停止位。
五、代码示例
代码中演示了如何使用Android串口通信读取和发送数据。
SerialPortUtil serialPortUtil = new SerialPortUtil();
serialPortUtil.setOnDataReceiveListener(new SerialPortUtil.OnDataReceiveListener() {
@Override
public void onDataReceive(byte[] buffer, int size) {
//处理接收到的串口数据
}
});
serialPortUtil.openSerialPort();
serialPortUtil.startReadSerialPort();
serialPortUtil.sendSerialPort("hello".getBytes());
serialPortUtil.stopReadSerialPort();
serialPortUtil.closeSerialPort();
六、小结
本文详细介绍了Android串口通信的原理和实现方法,希望对读者理解安卓串口通信有所帮助。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/184062.html
微信扫一扫
支付宝扫一扫