当前位置: 首页 > news >正文

Android Studio USB串口通信

文章目录

    • 概要
    • 流程
    • 技术名词解释
    • 技代码
    • 小结

概要

最近突然要Android环境中串口通信

流程

1:获取USB中的File名称
2:连接
3:发送数据
4:接受数据

技术名词解释

例如:

  • 波特
  • 端口
  • GPT-2
  • GPT-3
  • ChatGPT

技代码

  • API
  • 支持模型类型
    1:添加依赖
implementation 'com.licheedev:android-serialport:2.1.3'

2:获取所有的串口

 Vector<File> mDevices = null;public List<File> devFile=new ArrayList<>();//----------------------
if (mDevices == null) {mDevices = new Vector<File>();File dev = new File("/dev");File[] files = dev.listFiles();if (files != null) {vint i;for (i = 0; i < files.length; i++) {if (files[i].getAbsolutePath().startsWith(mDeviceRoot)) {Log.v(TAG, "device: " + files[i]);devFile.add(files[i]);mDevices.add(files[i]);}}}}

2:连接

import com.nfgk.xx.usb.utils.ByteUtil;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class SerialHelper {private static final String TAG="SerialHelper";private SerialPort mSeriaPort;private OutputStream mOutputStream;private InputStream mInputStream;private ReadThread mReadThread;// 打开串口public boolean open(String devicePath, int baudRate) {// 1. 检查设备节点是否存在File device = new File(devicePath);if (!device.exists()) {Log.e(TAG, "device is null:" + devicePath);return false;}try {//  打开串口(参数:设备、波特率、校验位等)// 第三个参数:0表示无校验,1表示奇校验,2表示偶校验mSeriaPort = new SerialPort(device, baudRate); //8, 0, 1, 0// 获取读写流mOutputStream = mSeriaPort.getOutputStream();mInputStream = mSeriaPort.getInputStream();mReadThread = new ReadThread();mReadThread.start();return true;} catch (IOException e) {Log.e(TAG, device+" open:" + e.getMessage());return false;}}private class ReadThread extends Thread {@Overridepublic void run() {super.run();byte[] buffer = new byte[1024]; int bytes;while (!isInterrupted() && mInputStream != null) {try {bytes = mInputStream.read(buffer);if (bytes > 0) {byte[] data = new byte[bytes];System.arraycopy(buffer, 0, data, 0, bytes);onDataReceived(data);}} catch (IOException e) {Log.e(TAG, "error:" + e.getMessage());break;}}}}// 数据接收回调(需在主线程处理)private void onDataReceived(byte[] data) {// 示例:转换为十六进制字符串String hexData = bytesToHex(data);Log.d(TAG, "收到数据:" + hexData);// 通知UI更新(可通过Handler或接口回调)}// 字节数组转十六进制字符串(便于调试)private String bytesToHex(byte[] bytes) {StringBuilder sb = new StringBuilder();for (byte b : bytes) {String hex = String.format("%02X ", b);sb.append(hex);}return sb.toString();}public void send(byte[] bOutArray) {try {if(mOutputStream==null){Log.v(TAG,"mOutputStream is null");return;}this.mOutputStream.write(bOutArray);} catch (IOException e) {e.printStackTrace();}}public void sendHex(String sHex) {byte[] outArray = ByteUtil.HexToByteArr(sHex);send(outArray);}public void sendTxt(String txt) {byte[] outArray = txt.getBytes();send(outArray);}
public class ByteUtil {public static int isOdd(int num) {return num & 0x1;}public static int HexToInt(String inHex) {return Integer.parseInt(inHex, 16);}public static byte HexToByte(String inHex) {return (byte) Integer.parseInt(inHex, 16);}public static String Byte2Hex(Byte inByte) {return String.format("%02x", new Object[]{inByte}).toUpperCase();}public static String ByteArrToHex(byte[] inBytArr) {StringBuilder strBuilder = new StringBuilder();int j = inBytArr.length;for (int i = 0; i < j; i++) {strBuilder.append(Byte2Hex(Byte.valueOf(inBytArr[i])));strBuilder.append("");}return strBuilder.toString();}public static String ByteArrToHex(byte[] inBytArr, int offset, int byteCount) {StringBuilder strBuilder = new StringBuilder();int j = byteCount;for (int i = offset; i < j; i++) {strBuilder.append(Byte2Hex(Byte.valueOf(inBytArr[i])));}return strBuilder.toString();}public static byte[] HexToByteArr(String inHex) {int hexlen = inHex.length();byte[] result;if (isOdd(hexlen) == 1) {hexlen++;result = new byte[hexlen / 2];inHex = "0" + inHex;} else {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;}
}
 serialHelper=new SerialHelper();String fileUsb=devFile;//"/dev/xxx"
boolean op= serialHelper.open(fileUsb,9600);
if(op)serialHelper.sendTxt("#0000");

小结

先上传代码

http://www.dtcms.com/a/491156.html

相关文章:

  • 数据结构的复习(1):
  • Python爬虫第5课:正则表达式与数据清洗技术
  • 自己做背景的网站app商城软件
  • 网页网站模板2023重大新闻事件10条
  • h5游戏免费下载:极限超车
  • Linux之认识理解目录
  • HarmonyOS Next 学习文档总览 [特殊字符]
  • 织梦微信网站模板wordpress4.9.4漏洞
  • oracle删除表与表空间清理机制
  • 企业怎么样上各大网站做宣传网站pv统计方法
  • 如何建网站挣钱广告公司加盟代理哪家好
  • 渗透测试前期信息收集节点的网址和工具简单总结
  • 从ChatGPT到新质生产力:一份数据驱动的AI研究方向指南
  • 企业建站系统信息求好的设计网站
  • IntelliJ IDEA 打包 Web 项目 WAR 包(含 Tomcat 部署+常见问题解决)
  • AI代码审查:SonarQube插件开发实战
  • 地方战友网站建设什么网站可以做告白的网页版
  • ODB-Mysql API接口(常用类与函数)
  • AI视频修复技术入门:从Sora水印谈起,我们如何“抹去”未来影像的瑕疵?
  • 佛山中小企业网站制作濮阳网络
  • 招生网站建设方案烟台网站建设首推企汇互联见效付款
  • 第12章:Spring AI Alibaba 可观测性—深入追踪AI应用的“黑盒”行为与性能瓶颈
  • 策略模式:让算法选择像点菜一样简单
  • 10.16 作业
  • 上海企业工商查询拼多多seo是什么意思
  • 国外人像摄影网站国内建站平台
  • 详细的Linux系统更新yum源的教程
  • 余姚做网站设计的淄博网站制作价格低
  • HolmesGPT 正式上线 丨 KubeSphere 助力云原生智能排障新体验
  • 【开题答辩过程】以《基于微信小程序教学评价平台的设计与实现》为例,不会开题答辩的可以进来看看