安卓串口通訊三
核心代碼如下:
package com.example.comandroid;import static android.content.ContentValues.TAG;import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;import com.jackiepenghe.serialportlibrary.MultipleSerialPortManager;
import com.jackiepenghe.serialportlibrary.OnSerialPortDataChangedListener;
import com.jackiepenghe.serialportlibrary.SerialPortManager;
import com.sscl.baselibrary.utils.ConversionUtil;
import com.sscl.baselibrary.utils.DebugUtil;
import com.sscl.baselibrary.utils.ToastUtil;import java.nio.charset.Charset;/**
* 功能描述:
* 版权所有:
* 版本:1.0
* 作者:
* 创建时间 ${DATE} ${hour}
* 邮箱 :2848444745@qq.com
*
*/public class MainActivity extends AppCompatActivity {private Button btnOpen;private Button btnClose;private Button btnSend;private TextView text;private String serialPort="/dev/ttyS1";//串口路徑
// private String serialPort="/dev/ttyS2";//串口路徑
// private String serialPort="/dev/ttyS3";//串口路徑
// private String serialPort="/dev/ttyS4";//串口路徑private int baudRate = 9600;//波特率@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnClose=findViewById(R.id.btn_close);btnOpen=findViewById(R.id.btn_open);btnSend=findViewById(R.id.btn_send);text=findViewById(R.id.textView);//打開串口btnOpen.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {openSerialPort();}});//關閉串口btnClose.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {MultipleSerialPortManager.closeSerialPort(serialPort);}});//發送數據btnSend.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {sendData("發送測試");}});}/*** 串口监听*/private final OnSerialPortDataChangedListener onSerialPortDataChangedListener = (data, size) -> {byte[] cache = new byte[size];System.arraycopy(data, 0, cache, 0, size);DebugUtil.warnOut(TAG, "cache = " + ConversionUtil.byteArrayToHexStr(cache));DebugUtil.warnOut(TAG, "cache = " + new String(cache));String result = ConversionUtil.byteArrayToHexStr(cache);text.setText(result);};/*** 打开串口*/private void openSerialPort() {boolean open = MultipleSerialPortManager.openSerialPort(serialPort, baudRate, onSerialPortDataChangedListener);if (open) {ToastUtil.toastLong(this, "串口打開成功");DebugUtil.warnOut(TAG, "串口打開成功");this.serialPort = serialPort;} else {DebugUtil.warnOut(TAG, "串口打開失敗");ToastUtil.toastLong(this, "串口打開失敗");}}/*** 获取串口信息*/private void getSerialPortInfo() {String[] allDevices = MultipleSerialPortManager.getAllDevices();if (allDevices.length == 0) {DebugUtil.warnOut(TAG, "allDevices length == 0");}for (int i = 0; i < allDevices.length; i++) {DebugUtil.warnOut(TAG, "allDevices[" + i + "] = " + allDevices[i]);}String[] allDevicesPath = MultipleSerialPortManager.getAllDevicesPath();if (allDevicesPath.length == 0) {DebugUtil.warnOut(TAG, "allDevicesPath length == 0");}for (int i = 0; i < allDevicesPath.length; i++) {DebugUtil.warnOut(TAG, "allDevicesPath[" + i + "] = " + allDevicesPath[i]);}}// 关闭串口private void closeSerialPort() {if (serialPort == null) {return;}MultipleSerialPortManager.closeSerialPort(serialPort);}// 發送數據private void sendData(String data) {boolean succeed= MultipleSerialPortManager.writeData(serialPort, "1234567890", Charset.forName("UTF-8"));if (!succeed){ToastUtil.toastLong(this, "發生失敗");}else{ToastUtil.toastLong(this, "發送成功");}}@Overrideprotected void onDestroy() {super.onDestroy();closeSerialPort();}
}
想要完整的了解,可以看下完整的dome,這我也給出來了完整dome如下:
https://download.csdn.net/download/qq_41733851/89288862?spm=1001.2014.3001.5503
相关文章:
安卓串口通訊三
核心代碼如下: package com.example.comandroid;import static android.content.ContentValues.TAG;import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;import…...
嵌入式交叉编译:Unable to find arm_neon.h
找到文件 搜索了一下,具体目录是: /opt/linux/x86-arm/aarch64-mix210-linux/lib/gcc/aarch64-linux-gnu/7.3.0/include/arm_neon.h 解决办法 INC_ARM/opt/linux/x86-arm/aarch64-mix210-linux/lib/gcc/aarch64-linux-gnu/7.3.0/include./configure …...
Linux下工具tc详细讲解及限制IP和端口实例
首先纠正某一篇博客,TC并不是只管发包不管收包,之前我也很纳闷 知道最后看到了14年前一位大佬的帖子。是ingress! 这里有个非常重要的点就是ingress,如果父类不是他的话是完不成限制源IP的,这个关键词表明你正在添加一个入口队列规…...
Java | Leetcode Java题解之第73题矩阵置零
题目: 题解: class Solution {public void setZeroes(int[][] matrix) {int m matrix.length, n matrix[0].length;boolean flagCol0 false;for (int i 0; i < m; i) {if (matrix[i][0] 0) {flagCol0 true;}for (int j 1; j < n; j) {if (…...
MySQL#MySql表的操作
目录 一、创建表 二、查看表结构 三、修改表 1.修改表的名字 2.新增一个列 3.修改列 4.删除列 5.修改列的名称 四、删除表 一、创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校…...
git修改版本发布时间
一、场景 发现git版本发布时,服务器时间有误,需要修改。 二、解决 (1)准备 时间戳转换网址:http://shijianchuo.wiicha.com/ (2)SQLite 数据库 连接到安装git的服务器,修改版本表…...
【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计
前言 从今天开始,我们详解介绍制作实时天气时钟项目的方法步骤,主要分以下几个专题分别进行:(1)连接点亮SPI-TFT屏幕和UI布局设计;(2)NodeMCU的WIFI模式设置及连接;&…...
国内首发 | CSA大中华区启动《AI安全产业图谱(2024)》调研
在人工智能(AI)技术的快速发展浪潮中,AI安全已成为全球关注的焦点。为应对AI安全带来的挑战,确保AI技术的健康发展,全球范围内的研究机构、企业和技术社区都在积极探索解决方案。 在这一背景下,CSA大中华区…...
web页面与原生android通信,调用原生android方法
注册初始化方法JsBridge //JS注册事件监听 function connectWebViewJavascriptBridge(callback) {if (window.WebViewJavascriptBridge) {callback(WebViewJavascriptBridge)} else {document.addEventListener(WebViewJavascriptBridgeReady,function() {callback(WebViewJav…...
Linux的编译器
程序编译的过程 程序的编译过程是将源代码转换为可执行文件的一系列步骤。这个过程涉及多个阶段,主要包括预处理、编译、汇编和链接。下面详细介绍每个阶段: 1. 预处理(Preprocessing) 在实际编译之前,源代码文件首…...
redis--安装
简介 官网:RedisInsight - The Best Redis GUI 各个版本官网下载地址:http://download.redis.io/releases/ Redis和Memcached是非关系型数据库也称为NoSQL数据库,MySQL、Mariadb、SQL Server、PostgreSQL Oracle 数据库属于关系型数据 应用…...
魔法程序员的奥妙指南:Java基本语法
作为一名魔法程序员,精通Java语言是至关重要的。Java作为一种强大的编程语言,在编写优质代码和开发强大应用程序时发挥着重要作用。让我们深入探讨Java基本语法的关键要点,从注释到变量,无所不包! Java基本语法的神秘魔…...
SpringMVC传递参数
1.RequestMapping RequestMapping本身可以处理,get或post,指定了get或post之后,就只能处理对应的请求。 RequestMapping(value{"haihiyo","goodMoring"},methodRequestMethod.POST)2.RestFul风格 RestFul是一种风格 比如:网站的访…...
【Scala---04】函数式编程 『 函数 vs 方法 | 函数至简原则 | 函数式编程』
文章目录 1. 函数 vs 方法1.1 方法(1) 定义方法(2) 运算符即方法 1.2 函数(1) 定义函数(2) 匿名函数 1.3 方法转为函数1.4 可变参数&默认参数 2. 函数至简原则3. 函数式编程3.1 函数式编程思想3.3 函数柯里化&闭包3.5 递归 & 尾递归 4. 补充4.1 访问元祖元素4.2 &g…...
[华为OD] B卷 树状结构查询 200
题目: 通常使用多行的节点、父节点表示一棵树,比如 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后,请打印出来树中他的所有下层节点 输入描述 第一行输入行数,下面是多行数据,每行以空…...
基于机器学习的学生学习行为自主评价设计与实现
管理员功能: a)学生学习数据管理:可查看学生学习的详情,编辑学生学习的内容,删除和添加学生学习,设置学生学习库存。 b)角色管理:增加删除学生用户,分配学生用户权限,查看学生用户…...
toml与json联系对比
前言 本文简单介绍toml;并且和json转化做对比,以及我对toml设计的理解。 参考: TOML: 简体中文 v1.0.0 json和toml转化工具 在线JSON转toml-toml转JSON - bejson在线工具 正文 数组 说白了,就是一个变量名,有多个…...
(已解决)org.springframework.amqp.rabbit.support.ListenerExecutionFailedException
报错截图 解决方案 1、登录rabbitMQ网址,删除所有队列 2、重启rabbitMQ 亲测有效!!!亲测有效!!!亲测有效!!!...
基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)
1、前言 在逻辑设计中,为了保证运算结果的正确性,常常需要对结果的位宽进行扩展。比如2个3bits的无符号数相加,只有将结果设定为4bits,才能保证结果一定是正确的。不然,某些情况如77 14(1110),如果结果只…...
基于STM32的宠物箱温度湿度监控系统毕业设计
基于STM32的宠物箱温度湿度监控系统毕业设计 一、项目背景与意义 随着人们生活水平的提高,养宠物已经成为一种流行趋势。然而,对于宠物的居住环境,尤其是温度与湿度的控制,是确保宠物健康的关键。本项目旨在设计一款基于STM32微…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
