- 博客(1636)
- 资源 (17)
- 收藏
- 关注
原创 IOT:如何选择适合开发板的传感器类型?
摘要: 选择开发板传感器需综合考虑物理量类型(如温度、加速度)、接口匹配(I2C/SPI/UART/ADC)、信号输出(数字/模拟)、性能指标(精度、范围)及成本。开发板兼容性(电压、引脚资源)和场景需求(工业/消费级)是关键。建议从简单项目(如Arduino+DHT11)入手,逐步升级复杂度,并参考数据手册和社区案例优化调试。核心是“需求匹配”,通过实践积累经验,实现高效传感器集成。
2025-06-11 21:46:38
610
原创 IOT:连接外部传感器到常见的嵌入式开发板
嵌入式开发板传感器连接指南 本文详细介绍了常见嵌入式开发板(Arduino、树莓派、STM32、ESP32)与外部传感器的连接方法及注意事项。内容涵盖数字/模拟引脚、I2C/SPI接口的硬件连接方案,各平台对应的软件配置代码示例,并特别强调电压匹配、电源管理和信号处理等关键问题。文章还提供了通用调试建议和常见问题排查方法,帮助开发者快速实现传感器与开发板的稳定通信。不同开发板需结合其接口特性和电压要求进行适配,实际应用中建议参考官方文档和社区资源。
2025-06-11 21:44:11
684
原创 IoT:嵌入式开发中常用的开发板
Arduino UNO:这是一款非常适合初学者的开源硬件平台,支持C++编程语言,具有丰富的库函数和社区资源。Raspberry Pi(树莓派)
2025-06-11 21:31:15
200
原创 IoT:串口通信(Serial Communication)
串口通信(Serial Communication)是一种异步、逐位传输数据的通信方式,它可以传输任何可以被表示为二进制数据(0和1)的信息。本质上,串口传输的是原始的字节流(Byte Stream),至于这些字节代表什么含义,完全由通信双方的应用层协议来定义。
2025-06-09 14:56:51
612
原创 Android: Kotlin 中发送 16进制(Hex)数据
本文介绍了在Kotlin中发送16进制数据的完整流程。关键步骤包括:定义Hex字符串、将其转换为ByteArray,并通过OutputStream发送。文章提供了Hex字符串转ByteArray的实用函数,支持"3C544B3E09"或"3C 54 4B 3E 09"两种格式,并展示了串口发送示例代码。同时概述了蓝牙和网络通信的实现方式,以及常见问题调试建议,如检查串口配置和Hex格式验证。最后推荐封装成工具类HexUtils,方便Hex数据编码解码。该方案适用于各种
2025-06-08 15:38:07
251
原创 Android: 怎么确定串口的通信参数
确定串口通信参数(波特率、数据位、校验位等)需要结合文档查阅、工具调试和实际测试。首先查阅设备手册获取标准配置,若无文档可用串口调试工具(如SSCOM、Putty)通过发送测试指令并调整参数验证。常见组合包括9600/8/N/1(工业设备)或115200/8/N/1(蓝牙模块)。还可通过代码验证或硬件检测(示波器)分析信号波形。调试时注意参数不匹配会导致乱码或通信失败,需逐步测试各参数组合直至建立正常通信。
2025-06-08 15:35:25
754
原创 Java 线程池:线程饥饿(Thread Starvation)
Java线程池线程饥饿问题及解决方案线程饥饿指任务因无法获取线程资源而长期得不到执行,常见于:固定线程池被长任务独占单线程池任务互相等待低优先级任务抢占资源解决方案:分离阻塞/计算任务,使用不同线程池合理配置线程数/队列(有界队列防OOM)采用工作窃取线程池(ForkJoinPool)优先级队列+拒绝策略保障关键任务异步回调代替同步等待,避免死锁动态监控调整线程池参数核心原则:确保线程不被无限阻塞,通过任务拆分、异步处理和资源隔离维护线程池弹性。
2025-06-03 20:50:16
838
原创 java线程池:maximumPoolSize和 workQueue
Java线程池中,maximumPoolSize与workQueue协同控制任务处理机制。核心逻辑遵循corePoolSize→workQueue→maximumPoolSize顺序:优先使用核心线程,队列满时创建临时线程直至达到最大线程数。队列类型直接影响最大线程数是否生效:无界队列会使maximumPoolSize失效(仅用核心线程);有界队列在队列满时启用临时线程;SynchronousQueue则直接触发线程扩容。实际应用中需根据任务特性选择队列类型,合理设置线程数上限,并配置拒绝策略以平衡系统负载
2025-06-03 20:45:01
844
原创 java线程池:任务卡住影响其他任务
线程池优化方案摘要:针对任务卡顿问题,建议改用有界队列(如ArrayBlockingQueue)并配置拒绝策略(如CallerRunsPolicy)防止内存溢出;隔离阻塞任务到专用线程池;增加任务超时控制(FutureTask)自动中断长时间任务;加强监控线程池状态(活跃线程数、队列积压等)。其他优化包括线程命名、优雅关闭和异常捕获。参数调优遵循IO密集型(CPU核数×(1+等待/计算时间))和CPU密集型(CPU核数+1)公式。改造后可提升吞吐量200%,有效避免任务阻塞和资源耗尽问题。(149字)
2025-06-03 20:31:43
378
原创 Android kotlin 中实现串口通信
本文介绍了在Android系统中实现串口通信的关键步骤:首先添加UsbSerial依赖库,配置USB权限;其次提供了核心实现类SerialPortHelper,包含打开串口、数据收发和关闭连接等方法;然后给出使用示例代码展示如何初始化串口和收发数据;最后列出了设备兼容性、权限处理等注意事项,并补充了常用数据转换方法。实现要点包括设置正确的波特率参数、线程安全处理以及数据格式转换等,建议基于成熟开源库进行二次开发。
2025-05-28 00:35:05
390
原创 Android平台上使用Kotlin实现串口通信
本文介绍了在Android平台上使用Kotlin实现串口通信的完整方案。重点推荐了usb-serial-for-android和kmp-serialport两个第三方库,并提供了详细的实现步骤:包括设备连接、数据收发、线程管理和异常处理等核心功能。文章还给出了权限配置、编码适配、后台服务等优化建议,以及调试工具和硬件验证方法。通过CoroutineScope实现异步操作,代码示例展示了从设备发现到数据收发的完整流程,适用于工业控制和物联网等场景。GitHub示例和跨平台方案为开发者提供了更多参考选择。
2025-05-28 00:31:01
283
原创 Android kotlin 实现串口发送和接收数据
本文介绍了在Android Kotlin中实现串口通信的步骤和代码示例。首先需要在AndroidManifest.xml中添加必要权限,并在build.gradle中引入串口库依赖。核心内容包括:1)通过SerialPort类打开串口并配置波特率等参数;2)使用OutputStream发送数据;3)提供了两种接收数据的方法:子线程轮询方式和第三方库回调方式;4)展示了如何正确关闭串口资源。另外还介绍了使用UsbSerialDriver实现的USB串口通信方案,包括设备连接、参数配置、数据收发等关键操作。文中
2025-05-28 00:05:20
396
原创 Android 串口 Null-modem emulator (com0com)安装与使用
《com0com 下载与安装指南(2025年更新版)》提供了从获取安装包到配置虚拟串口的详细步骤。用户需从 SourceForge 下载适用于 32 位或 64 位 Windows 系统的安装包,并根据系统版本选择合适的安装程序。安装过程中可能需处理驱动签名验证问题,可通过禁用驱动程序强制签名或启用测试签名解决。安装完成后,用户可通过命令行工具或图形界面配置虚拟串口对,并进行通信测试。常见问题如端口被占用、驱动安装失败等均有相应解决方案。此外,指南还提供了扩展资源,包括项目文档和替代工具推荐。通过本指南,用
2025-05-19 22:35:29
390
原创 android studio 虚拟设备 怎么调试串口连接?
在Android Studio中进行虚拟设备的串口调试,首先需要在PC端使用虚拟串口工具(如VSPD)创建串口对,并通过命令行启动AVD并挂载串口。随后,通过adb shell修改串口设备权限,或在应用中动态申请权限。在应用中,通过OutputStream发送测试数据,并通过独立线程监听InputStream接收数据,实时更新UI。调试时可使用ComAssistant APK或Logcat进行日志分析,确保串口通信正常。常见问题包括模拟器无法识别串口、权限不足、数据收发异常等,需逐一排查。推荐工具包括VSP
2025-05-19 22:27:59
446
原创 Android:串口连接验证与数据接收
本文详细介绍了串口连接验证与数据接收的关键步骤。首先,通过检查硬件参数匹配性和设备路径权限,确保串口初始化正确。其次,优化UI更新方法,避免高频更新导致的卡顿,并添加数据校验与粘包处理逻辑。接着,提供了完整的调用流程,包括初始化串口和启动数据监听线程。此外,文章还提供了调试与异常排查指南,帮助解决常见问题。最后,建议扩展功能如协议封装和日志记录,并介绍了硬件验证流程,包括使用ComAssistant APK和命令行验证。通过这些步骤,可以有效实现串口通信的稳定性和可靠性。
2025-05-19 22:24:01
1012
原创 Android: 串口管理 android-serialport-api 的依赖配置方案
本文介绍了在 Kotlin DSL 中配置 android-serialport-api 的远程依赖方案,并与传统的本地 JAR 方案进行了对比。远程依赖方案推荐使用 Maven Central 或 JitPack 引入改进版库,支持校验位、数据位等高级配置,并自动管理版本更新和 .so 文件加载。对于跨平台开发,推荐使用 kmp-serialport,支持 Android、Windows 和 Linux 的串口操作。本地 JAR 方案适用于需要修改库源码或处理特殊 NDK 兼容性的场景。文章还提供了详细的
2025-05-19 22:07:54
325
原创 Android studio 连手机 调试 修改了源码,怎么重新调试生效?
在 Android Studio 中修改源码后,可以通过多种方式使修改生效。首先,使用 Apply Changes 功能(快捷键 Ctrl+F10)进行热更新,若涉及界面布局改动,则需选择 Apply Changes and Restart Activity(快捷键 Shift+F9)。对于无法通过热更新生效的修改(如资源文件替换、Manifest 变更),需重新编译安装 APK。其次,手动触发完整编译,清理旧编译文件并重新构建项目,同时禁用可能导致冲突的热更新功能。此外,通过 ADB 命令强制终止应用进程
2025-05-14 00:59:56
460
原创 Android:什么是串口,Android怎么接收串口的数据?
串口技术是一种通过逐位顺序传输实现设备间通信的接口,具有低成本、协议多样性和速度限制等特点。核心参数包括波特率、数据位、停止位和校验位,需双方一致配置。在Android设备上接收串口数据,需进行硬件准备(如物理串口或USB转串口模块)和软件实现(包括权限配置、引入串口库、初始化串口、启动数据接收线程和UI更新与数据处理)。常见问题包括设备未检测到、数据接收不全或乱码、高并发数据丢失等,可通过检查权限、校验配置一致性、使用同步锁或环形缓冲区等方法解决。高级优化包括数据校验、协议封装和异步监听。应用场景涵盖工业
2025-05-14 00:33:09
969
原创 Android Studio 从什么版本开始不支持选java项目了
自2022年起,Android Studio新版本(如Flamingo及以上)在创建新项目时默认隐藏了Java语言选项,优先推荐使用Kotlin。尽管如此,开发者仍可通过选择“No Activity”模板或手动修改文件类型来创建Java项目。Android Studio 2023+版本默认捆绑JDK 17,支持Java 17语法,但旧项目可能需要手动配置低版本JDK以保持兼容性。Gradle和AGP的版本也需与JDK版本匹配,以避免不兼容问题。建议新项目优先使用Kotlin,旧项目可继续维护Java代码,并
2025-05-10 17:58:00
1129
原创 Androind 项目,怎么创建成java编码的?
在 Android Studio 中创建 Java 编码的 Android 项目,首先需在新建项目时选择 Java 语言,并配置项目信息如名称、包名和最低支持的 Android 版本。创建后,检查生成的文件和 Gradle 配置,确保 Java 版本设置正确。若需将现有 Kotlin 项目转换为 Java,可删除 Kotlin 模块并修改 Gradle 插件。此外,统一编码格式为 UTF-8 并设置全局 Java 版本以避免兼容性问题。若新版本 IDE 默认隐藏 Java 选项,可选择支持 Java 的模板
2025-05-10 17:56:36
798
原创 Android中 androidx.constraintlayout.widget.ConstraintLayout的使用
ConstraintLayout 是 Android 开发中功能强大的布局容器,通过约束关系定位子视图,实现复杂 UI 设计。使用步骤包括添加依赖、设置根布局和定义子视图约束。核心特性包括布局约束、边距与偏移、尺寸控制、引导线与屏障、链式布局等。通过灵活运用这些特性,可以实现居中布局、动态响应布局和链式排列等常见布局需求。注意事项包括避免过度嵌套、适配不同屏幕和使用可视化编辑器。ConstraintLayout 能显著提升开发效率并优化应用性能。
2025-05-10 17:33:29
1187
原创 Android:layout_toRightOf为什么在RadioGroup组件中没有生效?
• 在 API 21(Android 5.0)及以上版本中,建议使用。• 布局优化:若需要更复杂的排列(如控件间距、对齐方式),可结合。• 适用场景:适合选项较少且需要横向展示的场景(例如性别选择)。• 适用场景:适用于选项较多或需要节省横向空间的布局。• 水平排列时,子控件默认从左侧开始依次排列;的子控件会按从上到下的顺序依次垂直排列。• 子控件会按从左到右的顺序依次水平排列。• 垂直排列时,子控件默认从上到下堆叠。• 互斥逻辑:无论排列方向如何,,因此其子控件的排列规则与。始终保证同一时间只有一个。
2025-05-10 17:30:08
218
原创 Android 为什么这个Radio 没有切换互斥的效果
在 Android 开发中,RadioGroup 默认只能管理其直接子控件(RadioButton)的互斥逻辑。如果 RadioButton 被嵌套在 ViewGroup(如 LinearLayout)中,RadioGroup 将无法识别这些 RadioButton,导致互斥功能失效。解决此问题有两种方案:一是调整布局结构,将 RadioButton 作为 RadioGroup 的直接子控件,并使用 RelativeLayout 或 ConstraintLayout 控制其他输入控件的位置;二是通过代码手动
2025-05-10 17:25:57
514
原创 android studio项目怎么打包为apk文件?
点击顶部菜单栏 Build → Generate Signed Bundle/APK,选择 APK 后点击 Next
2025-05-10 17:16:47
1743
原创 Android项目MainActivity.kt与MainActivity.java
//20250505在Android Studio中,不能直接将文件重命名为并直接替换,但可以通过以下步骤实现从Kotlin到Java的转换:一、转换方法与工具反编译Kotlin字节码(推荐)• 打开文件,点击菜单栏的 Tools → Kotlin → Show Kotlin Bytecode• 在字节码窗口点击 Decompile 按钮,生成对应的Java代码并保存为• 注意:自动生成的代码可能包含冗余的检查(如),需手动删除手动重写代码• 若代码逻辑简单,可逐行翻译Kotlin特性到Java语法:
2025-05-05 22:42:52
276
原创 Android项目里源码是kt格式转java
针对将 Kotlin 文件(如 MainActivity.kt)转换为 Java 代码的完整方案,综合多个技术文档的实现思路
2025-05-05 22:37:11
660
原创 Flowable FlowNodeActivityBehavior 详解
FlowNodeActivityBehavior 是 Flowable 流程引擎中用于定义和控制 BPMN 流程节点(FlowNode)行为的核心接口之一。它是 ActivityBehavior 接口的子类,专门针对流程图中的具体节点(如任务、网关、事件等)提供行为逻辑的抽象。
2025-04-30 18:40:30
667
原创 Flowable: FlowNodeActivityBehavior 介绍及业务场景与设计思想分析
Flowable中的FlowNodeActivityBehavior是流程引擎中节点行为定义的核心基类,其设计贯穿了流程引擎的执行逻辑、扩展性和节点行为标准化理念。
2025-04-30 17:56:27
990
原创 Flowable 执行监听器(Execution Listener)
Flowable 执行监听器(Execution Listener)是 Flowable 工作流引擎中用于在流程实例或活动(Activity)的执行生命周期关键节点触发自定义逻辑的扩展机制。它允许开发者通过监听流程的运行时事件(如流程启动、结束、活动切换等),实现动态的业务逻辑注入,增强流程的灵活性和可定制性。
2025-04-28 23:31:51
965
原创 Flowable 表达式
Flowable 表达式主要用于流程变量操作、任务分配和条件分支控制,其语法基于 EL(Expression Language)并支持多种高级扩展。
2025-04-28 22:24:14
1393
原创 企业财务管理:财务中的“借”(Debit)和“贷”(Credit) AP会计分录和TR会计分录
在财务会计中,“借”(Debit)和“贷”(Credit)是复式记账法的核心记账符号,用于记录经济业务对会计要素的增减变动方向,并确保会计恒等式的平衡。
2025-04-27 22:40:19
1048
原创 企业财务管理:财务领域JE 应付账款处理 应付账款核销
在财务领域中,“JE”通常指Journal Entry(日记账分录),即会计记录中的原始凭证,用于记录每笔经济业务的借贷方向和金额,是会计核算的基础步骤。
2025-04-27 22:33:53
911
原创 AI大模型:dify本地启动 问题与解决方案
效果:原来只有http://127.0.0.1:11434/可以访问ollama, 配置后:用网卡地址也可以 如:http://172.17.240.1:11434/,还有http://host.docker.internal:11434/也可以访问ollama。问题: 改完端口 6060后,访问出现 502 Bad Gateway Request URL: http://localhost:6060/console/api/setup。解决:在环境变量,增加:OLLAMA_HOST=0.0.0.0。
2025-04-26 23:50:16
362
原创 AI大模型:window下安装dify
安装过程中勾选“Install required Windows components for WSL 2”,完成安装后重启电脑。完成以上步骤后,即可在Windows上成功安装并使用Dify。• 若Docker镜像拉取较慢,可配置国内镜像加速源(如清华源、阿里云等)。• 确保系统满足最低要求:CPU≥2核,内存≥4GB。验证安装:打开命令提示符或PowerShell,输入。安装完成后,打开Git Bash验证:输入。下载Windows版Git安装包。,若显示版本号则安装成功。,若显示版本号则安装成功。
2025-04-26 23:39:50
348
原创 Java Lambda @FunctionalInterface Consumer<T> Supplier<T> Function<T, R> Predicate<T>
是 Java 8 引入的注解,用于标记函数式接口(仅包含一个抽象方法的接口)。其核心作用是编译时检查,确保接口符合函数式接口的规范。若接口不满足条件(如包含多个抽象方法),编译器会直接报错。是 Java 函数式编程的基石,通过强制单抽象方法规则,确保 Lambda 表达式和方法引用的正确性。:函数型(输入 T,返回 R),如字符串转长度。:断言型(返回布尔值),如判断字符串是否为空。:供给型(无输入,返回数据),如生成随机数。:消费型(无返回值),如打印数据。函数式接口广泛用于集合操作,如。
2025-04-25 18:49:56
1140
原创 Flowable源码:CommandExecutor CommandInvoker CommandInterceptor CommandContext Agenda
是一组高度解耦但紧密协作的核心组件,其设计基于命令模式和责任链模式,并辅以上下文管理和流程调度机制。这种设计不仅支持灵活的业务扩展(如自定义拦截器),还确保了复杂流程的高效执行与事务一致性。Flowable通过命令模式封装操作、责任链模式处理扩展逻辑、Agenda调度流程流转,配合。• 通过拦截器链实现逻辑解耦,支持动态添加拦截器(如日志、权限校验)。• 通过循环弹出队列中的操作并执行,实现流程的逐步推进。方法,隐藏命令执行细节,例如事务管理和上下文绑定。方法,触发业务逻辑(如启动流程、完成任务)。
2025-04-25 18:38:23
976
原创 Flowable源码:Data Managers与Entity Managers 角色设计
• Data Managers 制定策略(如数据质量标准),Entity Managers 执行策略(如通过事务保证数据一致性)。• 复杂系统需求:在分布式或高并发系统中,实体管理器负责本地事务与缓存,数据管理员则统筹全局数据一致性。• 问题溯源与修复:当数据异常时,数据管理员分析根因(如数据源问题),实体管理器修复具体记录。• 性能与安全的平衡:数据管理员制定安全策略(如加密字段),实体管理器在查询时应用加解密逻辑。◦ 数据治理:制定数据策略、架构设计、质量管理标准,确保数据一致性。
2025-04-25 18:15:04
380
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人