Files
pig-house-controller/DEVELOPMENT.md
2025-09-07 15:46:10 +08:00

173 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开发环境搭建指南
## 系统要求
- 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 功能需要特殊处理,因为标准包不可用