# AndroidRS485lib **Repository Path**: ukiot/android-rs485lib ## Basic Information - **Project Name**: AndroidRS485lib - **Description**: Android C++ RS485通信库,提供串口通信和GPIO控制功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-28 - **Last Updated**: 2025-09-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android RS485 库 这是一个完整的Android C++ RS485通信库,提供串口通信和GPIO控制功能。 ## 功能特性 - ✅ 串口设备打开/关闭 - ✅ 灵活的波特率配置(1200-4000000) - ✅ 数据位配置(7/8位) - ✅ 奇偶校验配置(无/奇/偶) - ✅ 停止位配置(1/2位) - ✅ GPIO控制DE/RE引脚 - ✅ 自动收发模式切换 - ✅ 超时控制的数据读取 - ✅ 缓冲区管理 - ✅ Java友好的API接口 - ✅ 完整的错误处理 - ✅ 示例应用程序 ## 文件结构 ``` RS485Library/ ├── jni/ # C++源码 │ ├── rs485_lib.h # RS485库头文件 │ ├── rs485_lib.cpp # RS485库实现 │ ├── rs485_jni.cpp # JNI包装器 │ ├── Android.mk # NDK构建配置 │ ├── Application.mk # NDK应用配置 │ └── CMakeLists.txt # CMake构建配置 ├── src/main/java/com/rs485/library/ │ └── RS485.java # Java API封装 └── example/ # 示例应用 └── src/main/java/com/rs485/example/ ├── MainActivity.java # 示例主活动 └── res/layout/activity_main.xml # 示例布局 ``` ## 构建方法 ### 方法1: 使用NDK-Build ```bash cd RS485Library/jni ndk-build ``` ### 方法2: 使用CMake ```bash cd RS485Library/jni mkdir build && cd build cmake .. make ``` ## 使用方法 ### 1. 基本使用 ```java import com.rs485.library.RS485; // 创建RS485实例 RS485 rs485 = new RS485(); // 配置参数 RS485.Config config = new RS485.Config() .setBaudrate(9600) .setDatabits(8) .setParity(RS485.PARITY_NONE) .setStopbits(RS485.STOPBITS_1) .setGpioPin(18); // GPIO引脚号 // 打开串口 int result = rs485.open("/dev/ttyS1", config); if (result == RS485.SUCCESS) { // 成功打开 } // 发送数据 String data = "Hello RS485!"; int bytesWritten = rs485.write(data); // 接收数据 String received = rs485.readString(256, 1000); // 最大256字节,超时1秒 // 关闭串口 rs485.close(); ``` ### 2. 错误处理 ```java int result = rs485.open("/dev/ttyS1", config); if (result != RS485.SUCCESS) { String error = RS485.getErrorDescription(result); Log.e("RS485", "打开失败: " + error); } ``` ### 3. 配置选项 ```java // 波特率配置 config.setBaudrate(115200); // 数据位配置 config.setDatabits(8); // 7 或 8 // 奇偶校验 config.setParity(RS485.PARITY_NONE); // 无校验 config.setParity(RS485.PARITY_ODD); // 奇校验 config.setParity(RS485.PARITY_EVEN); // 偶校验 // 停止位 config.setStopbits(RS485.STOPBITS_1); // 1个停止位 config.setStopbits(RS485.STOPBITS_2); // 2个停止位 // GPIO引脚 config.setGpioPin(18); // 使用GPIO18作为DE/RE控制 config.setGpioPin(-1); // 不使用GPIO控制 ``` ## 硬件连接 ### RS485模块连接 ``` Arduino/树莓派/Android设备 RS485模块 VCC ←→ VCC (3.3V/5V) GND ←→ GND GPIO18 ←→ DE/RE (数据使能/接收使能) UART_TX ←→ DI (数据输入) UART_RX ←→ RO (接收输出) A+ ←→ RS485总线A+ B- ←→ RS485总线B- ``` ### GPIO控制说明 - **DE (Data Enable)**: 高电平时允许发送数据 - **RE (Receive Enable)**: 低电平时允许接收数据 - 通常DE和RE连接在一起,通过一个GPIO引脚控制 - 发送数据时:GPIO输出高电平 - 接收数据时:GPIO输出低电平 ## 权限要求 在Android项目的 `AndroidManifest.xml` 中添加必要权限: ```xml ``` ## 支持的波特率 - 1200, 2400, 4800, 9600 - 19200, 38400, 57600, 115200 - 230400, 460800, 500000, 576000 - 921600, 1000000, 1152000, 1500000 - 2000000, 2500000, 3000000, 3500000, 4000000 ## API参考 ### 错误代码 | 常量 | 值 | 描述 | |------|---|------| | `RS485.SUCCESS` | 0 | 操作成功 | | `RS485.ERROR_OPEN` | -1 | 打开设备失败 | | `RS485.ERROR_CONFIG` | -2 | 配置设备失败 | | `RS485.ERROR_GPIO` | -3 | GPIO配置失败 | | `RS485.ERROR_WRITE` | -4 | 写入数据失败 | | `RS485.ERROR_READ` | -5 | 读取数据失败 | | `RS485.ERROR_INVALID` | -6 | 无效参数 | ### 主要方法 - `int open(String devicePath, Config config)` - 打开RS485端口 - `int close()` - 关闭RS485端口 - `int write(byte[] data)` - 发送字节数据 - `int write(String text)` - 发送字符串数据 - `byte[] read(int bufferSize, int timeoutMs)` - 读取字节数据 - `String readString(int bufferSize, int timeoutMs)` - 读取字符串数据 - `int flush()` - 清空缓冲区 - `int available()` - 获取可读数据数量 - `boolean isOpen()` - 检查端口状态 ## 注意事项 1. **设备权限**: 访问串口设备可能需要root权限或特殊的设备权限 2. **GPIO权限**: 操作GPIO需要适当的系统权限 3. **线程安全**: 这个库不是线程安全的,如需多线程使用请自行加锁 4. **资源释放**: 使用完毕后务必调用 `close()` 方法释放资源 ## 故障排除 ### 常见问题 1. **设备打开失败** - 检查设备路径是否正确(如 `/dev/ttyS1`) - 确认应用有访问设备的权限 - 检查设备是否被其他进程占用 2. **GPIO配置失败** - 确认GPIO引脚号正确 - 检查系统是否支持GPIO sysfs接口 - 确认应用有操作GPIO的权限 3. **数据发送/接收失败** - 检查硬件连接 - 确认波特率等参数配置正确 - 检查RS485总线的终端电阻 ## 联系人 ***UKIOT.group*** ## 许可证 MIT License - 详见 LICENSE 文件 ## 贡献 欢迎提交Issue和Pull Request来改进这个库!