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

Android 之 串口通信

Android 串口通信主要用于与嵌入式设备(如传感器、打印机、工业控制器等)进行数据交互。以下是核心实现方案、代码示例及注意事项。

1. 串口类型​

  • ​直接硬件串口​​:Android 设备自带串口(如 /dev/ttyS0),常见于工业平板或定制设备。
  • ​USB 转串口​​:通过 OTG 连接 USB 转串口适配器(需支持 USB Host 模式)

2、代码实现(以 licheedev 库为例)

1. 添加依赖​

// build.gradle
dependencies {implementation 'com.github.licheedev:Android-SerialPort-API:2.0.0'
}
//仓库配置​​:在 settings.gradle 添加 maven { url "https://jitpack.io" }

2. 封装串口工具类​

import android.serialport.SerialPort;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;public class SerialPortHelper {private SerialPort serialPort;private InputStream inputStream;private OutputStream outputStream;// 打开串口public boolean open(String devicePath, int baudRate, int dataBits, int stopBits, int parity) {try {serialPort = new SerialPort.Builder(new File(devicePath), baudRate).dataBits(dataBits)    // 数据位(5~8).stopBits(stopBits)    // 停止位(1或2).parity(parity)        // 校验位(0:无, 1:奇, 2:偶).build();inputStream = serialPort.getInputStream();outputStream = serialPort.getOutputStream();return true;} catch (IOException e) {e.printStackTrace();return false;}}// 发送数据(十六进制指令)public void send(String hexCommand) {try {byte[] data = hexStrToBytes(hexCommand);outputStream.write(data);outputStream.flush();} catch (IOException e) {e.printStackTrace();}}// 接收数据(循环监听)public void startReading(DataReceivedListener listener) {new Thread(() -> {byte[] buffer = new byte[1024];while (!Thread.interrupted()) {try {int size = inputStream.read(buffer);if (size > 0) {byte[] received = new byte[size];System.arraycopy(buffer, 0, received, 0, size);listener.onDataReceived(received);}} catch (IOException e) {break;}}}).start();}// 关闭串口public void close() {if (serialPort != null) {serialPort.close();}}// 十六进制字符串转字节数组private byte[] hexStrToBytes(String hex) {// 转换逻辑(参考[8](@ref))}public interface DataReceivedListener {void onDataReceived(byte[] data);}
}

3. Activity 调用示例​


public class MainActivity extends AppCompatActivity {private SerialPortHelper serialHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);serialHelper = new SerialPortHelper();// 打开串口(参数需根据硬件手册设置)boolean success = serialHelper.open("/dev/ttyS1", 9600, 8, 1, 0);if (success) {// 发送指令(示例:AA 01 02 DD)serialHelper.send("AA0102DD");// 监听返回数据serialHelper.startReading(data -> {String hex = bytesToHex(data); // 字节转十六进制runOnUiThread(() -> Log.d("SerialPort", "Received: " + hex));});}}@Overrideprotected void onDestroy() {serialHelper.close(); // 关闭串口super.onDestroy();}
}

http://www.lryc.cn/news/608817.html

相关文章:

  • zookeeper分布式锁 -- 读锁和写锁实现方式
  • 【Android】RecyclerView循环视图(2)——动态加载数据
  • 【C 学习】04-了解变量
  • 《volatile 与 synchronized 底层实现与性能比较》
  • 【OD机试题解法笔记】文件缓存系统
  • linux 扩展未分配的磁盘空间到home下
  • 【从零开始速通C语言1】 - 汇编语言1
  • RAG 知识库实战指南:基于 Spring AI 构建 AI 知识问答应用
  • 第N个泰波那契数
  • Coze 打通飞书多维表格,实现数据增删改查操作实战详解
  • 机器学习sklearn:支持向量机svm
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——9. 接入真实硬件:驱动USB摄像头
  • 李宏毅深度学习教程 第8-9章 生成模型+扩散模型
  • 【Unity3D实例-功能-镜头】俯视角
  • JVM-垃圾回收器与内存分配策略详解
  • [创业之路-530]:创业公司五维架构设计:借鉴国家治理智慧,打造敏捷型组织生态
  • 智变时代:AI 如何重构工作边界与行业生态?
  • 【MySQL安全】什么是SQL注入,怎么避免这种攻击:前端防护、后端orm框架、数据库白名单
  • 计算机网络:如何在实际网络中进行子网划分
  • 从零开始学Express,理解服务器,路由于中间件
  • C#模式匹配用法与总结
  • Supergateway教程
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各类垃圾的分类检测识别(C#代码UI界面版)
  • 玩转 Playwright 有头与无头模式:消除差异,提升爬虫稳定性
  • LLM - 智能体工作流设计模式
  • 小红书开源dots.ocr:单一视觉语言模型中的多语言文档布局解析
  • 【设计模式】5.代理模式
  • [LeetCode优选算法专题一双指针——有效三角形的个数]
  • Python 程序设计讲义(60):Python 的函数——递归函数
  • 从“配置地狱”到“云端乐园”——Nacos 如何成为分布式微服务配置中心的“定海神针”