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