Files
pig-house-controller/DEVELOPMENT.md

173 lines
4.6 KiB
Markdown
Raw Normal View History

2025-09-07 15:46:10 +08:00
# 开发环境搭建指南
## 系统要求
- Python 3.7+
- Raspberry Pi 或其他兼容的嵌入式Linux系统
- LoRa通信模块如SX1278
- RS485通信接口
## 协议栈架构
本系统采用标准物联网协议栈:
```
应用层: LwM2M
传输层: CoAP (Constrained Application Protocol)
网络层: LoRaWAN
数据链路层: LoRa
物理层: LoRa
```
## 安装步骤
### 1. 克隆项目
```bash
git clone <项目地址>
cd pig-house-controller
```
### 2. 创建虚拟环境
```bash
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
```
### 3. 安装依赖
```bash
pip install -r requirements.txt
```
### 4. LwM2M支持的特殊处理
由于 `lwm2m-client` 包在 PyPI 上不可用,我们需要手动安装或使用替代方案:
#### 方案一:使用 wakaama-python (推荐)
```bash
# 克隆 wakaama-python 仓库
git clone https://github.com/djarek/wakaama-python.git
cd wakaama-python
# 按照项目说明进行安装
```
#### 方案二:使用 Eclipse Wakaama
Eclipse Wakaama 是一个成熟的 LwM2M 实现,可以作为 C 扩展集成到 Python 项目中。
#### 方案三:自行实现 LwM2M 客户端
根据 LwM2M 规范自行实现必要的功能。
### 5. 配置系统
复制示例配置文件并根据实际环境进行修改:
```bash
cp config.json.example config.json
```
修改 [config.json](file:///C:/Users/divano/Desktop/work/AA-Pig/pig-house-controller/config.json) 文件中的参数,包括:
- LoRa通信参数
- 总线配置
- 设备配置
- 日志配置
### 6. 硬件连接
1. 连接LoRa模块到树莓派的SPI接口
2. 连接传感器总线RS485模块到树莓派的UART接口
3. 连接执行器总线RS485模块到树莓派的另一个UART接口
### 7. 运行系统
```bash
python main.py
```
## 开发工具推荐
- **IDE**: PyCharm 或 VS Code
- **版本控制**: Git
- **调试工具**: Python内置pdb或IDE调试器
- **日志查看**: tail命令或专业日志查看工具
## 测试环境
建议在实际部署前进行充分测试:
1. 单元测试: 验证各模块功能
2. 集成测试: 验证模块间协作
3. 系统测试: 验证完整功能流程
4. 硬件测试: 验证实际硬件连接和通信
## 协议栈实现说明
### LoRaWAN层
使用SX1278等LoRa芯片通过SPI接口与树莓派通信。实现基本的LoRaWAN功能
- OTAA/ABP入网
- 数据加解密
- 数据包重传机制
### CoAP层
实现CoAP协议栈支持
- GET/POST/PUT/DELETE方法
- 资源发现
- 块传输
- 观察者模式
### LwM2M层
实现LwM2M客户端功能
- 设备注册与管理
- 固件更新
- 参数配置
- 数据上报
注意:由于 `lwm2m-client` 包不可用,需要使用替代方案实现 LwM2M 功能。
### SenML数据格式
所有传感器数据使用SenML格式进行编码和传输确保数据标准化和互操作性。
## 抽象接口开发说明
系统定义了以下抽象接口,开发者在实现具体功能时需要继承这些基类:
### 通信接口 (BaseComm)
位于 [comms/base_comm.py](file:///C:/Users/divano/Desktop/work/AA-Pig/pig-house-controller/comms/base_comm.py),定义了通信模块的基本操作:
- `connect()`: 建立通信连接
- `disconnect()`: 断开通信连接
- `send()`: 发送数据
- `receive()`: 接收数据
- `is_connected()`: 检查连接状态
### 设备接口 (BaseDevice)
位于 [devices/base_device.py](file:///C:/Users/divano/Desktop/work/AA-Pig/pig-house-controller/devices/base_device.py),定义了设备的基本操作:
- `connect()`: 连接设备
- `disconnect()`: 断开设备连接
- `read_data()`: 读取设备数据
- `write_data()`: 向设备写入数据
- `get_status()`: 获取设备状态
### 存储接口 (BaseStorage)
位于 [storage/base_storage.py](file:///C:/Users/divano/Desktop/work/AA-Pig/pig-house-controller/storage/base_storage.py),定义了存储模块的基本操作:
- `save()`: 保存数据
- `load()`: 加载数据
- `delete()`: 删除数据
- `exists()`: 检查键是否存在
- `list_keys()`: 列出所有键
### 命令处理器接口 (BaseHandler)
位于 [core/base_handler.py](file:///C:/Users/divano/Desktop/work/AA-Pig/pig-house-controller/core/base_handler.py),定义了命令处理的基本操作:
- `handle_command()`: 处理命令
- `register_command()`: 注册命令处理函数
- `unregister_command()`: 注销命令处理函数
## 注意事项
1. 确保硬件连接正确特别是UART接口不要接反
2. 根据实际硬件调整配置文件中的串口设备路径
3. 注意LoRa频段的合法性遵守当地无线电管理规定
4. 建议在开发阶段使用DEBUG日志级别生产环境使用INFO或更高
5. LwM2M 功能需要特殊处理,因为标准包不可用