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