# 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来改进这个库!