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

4.6 KiB
Raw Blame History

开发环境搭建指南

系统要求

  • Python 3.7+
  • Raspberry Pi 或其他兼容的嵌入式Linux系统
  • LoRa通信模块如SX1278
  • RS485通信接口

协议栈架构

本系统采用标准物联网协议栈:

应用层: LwM2M
传输层: CoAP (Constrained Application Protocol)
网络层: LoRaWAN
数据链路层: LoRa
物理层: LoRa

安装步骤

1. 克隆项目

git clone <项目地址>
cd pig-house-controller

2. 创建虚拟环境

python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# 或
venv\Scripts\activate     # Windows

3. 安装依赖

pip install -r requirements.txt

4. LwM2M支持的特殊处理

由于 lwm2m-client 包在 PyPI 上不可用,我们需要手动安装或使用替代方案:

方案一:使用 wakaama-python (推荐)

# 克隆 wakaama-python 仓库
git clone https://github.com/djarek/wakaama-python.git
cd wakaama-python
# 按照项目说明进行安装

方案二:使用 Eclipse Wakaama

Eclipse Wakaama 是一个成熟的 LwM2M 实现,可以作为 C 扩展集成到 Python 项目中。

方案三:自行实现 LwM2M 客户端

根据 LwM2M 规范自行实现必要的功能。

5. 配置系统

复制示例配置文件并根据实际环境进行修改:

cp config.json.example config.json

修改 config.json 文件中的参数,包括:

  • LoRa通信参数
  • 总线配置
  • 设备配置
  • 日志配置

6. 硬件连接

  1. 连接LoRa模块到树莓派的SPI接口
  2. 连接传感器总线RS485模块到树莓派的UART接口
  3. 连接执行器总线RS485模块到树莓派的另一个UART接口

7. 运行系统

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,定义了通信模块的基本操作:

  • connect(): 建立通信连接
  • disconnect(): 断开通信连接
  • send(): 发送数据
  • receive(): 接收数据
  • is_connected(): 检查连接状态

设备接口 (BaseDevice)

位于 devices/base_device.py,定义了设备的基本操作:

  • connect(): 连接设备
  • disconnect(): 断开设备连接
  • read_data(): 读取设备数据
  • write_data(): 向设备写入数据
  • get_status(): 获取设备状态

存储接口 (BaseStorage)

位于 storage/base_storage.py,定义了存储模块的基本操作:

  • save(): 保存数据
  • load(): 加载数据
  • delete(): 删除数据
  • exists(): 检查键是否存在
  • list_keys(): 列出所有键

命令处理器接口 (BaseHandler)

位于 core/base_handler.py,定义了命令处理的基本操作:

  • handle_command(): 处理命令
  • register_command(): 注册命令处理函数
  • unregister_command(): 注销命令处理函数

注意事项

  1. 确保硬件连接正确特别是UART接口不要接反
  2. 根据实际硬件调整配置文件中的串口设备路径
  3. 注意LoRa频段的合法性遵守当地无线电管理规定
  4. 建议在开发阶段使用DEBUG日志级别生产环境使用INFO或更高
  5. LwM2M 功能需要特殊处理,因为标准包不可用