# ai嵌入式开发系列1 **Repository Path**: user_ye/485_wsd_oled ## Basic Information - **Project Name**: ai嵌入式开发系列1 - **Description**: ai嵌入式开发开发系列1-485温湿度_oled - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-27 - **Last Updated**: 2025-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AHT25温湿度监测系统 基于STM32F103C8T6的智能温湿度监测系统,支持Modbus RTU通信协议和OLED本地显示。 + 此项目所有代码基于ai编程 Claude code 生成 + 注册免费白嫖30刀额度 https://api.codemirror.codes/register?aff=RxHb + 演示教程 https://www.bilibili.com/video/BV19FU6BsEFQ ![设备实物图1](images/设备图片1.jpg) ![设备实物图2](images/设备图片2.jpg) ## 项目特性 ✅ **AHT25高精度传感器** - 温度±0.3°C, 湿度±2% RH ✅ **OLED实时显示** - 128x64 SSD1306本地显示 ✅ **Modbus RTU协议** - 标准工业通信,支持RS485 ✅ **可配置参数** - 设备地址、波特率可通过Modbus修改 ✅ **Python上位机** - 图形化调试工具,数据可视化 ![上位机界面1](images/桌面端.png) ![上位机界面2](images/桌面端2.png) ## 硬件配置 ### 主控芯片 - **MCU**: STM32F103C8T6 (ARM Cortex-M3, 72MHz) - **Flash**: 64KB | **RAM**: 20KB ### 外设接口 | 外设 | 接口 | 引脚 | I2C地址/波特率 | |------|------|------|----------------| | AHT25传感器 | I2C1 | PB6(SCL), PB7(SDA) | 0x38 | | OLED显示器 | I2C1 | PB6(SCL), PB7(SDA) | 0x3C | | RS485通信 | UART1 | PA9(TX), PA10(RX) | 9600 bps (默认) | | 状态LED | GPIO | PC13 | 低电平点亮 | ## 软件架构 ``` Core/ ├── Inc/ # 头文件 │ ├── main.h │ ├── aht25.h # AHT25传感器驱动 │ ├── ssd1306.h # OLED显示驱动 │ └── modbus_rtu.h # Modbus协议栈 │ └── Src/ # 源文件 ├── main.c # 主程序 ├── aht25.c # AHT25驱动实现 ├── ssd1306.c # OLED驱动实现 └── modbus_rtu.c # Modbus协议实现 ``` ## 快速开始 ### 1. 编译烧录 ```bash # 使用Keil MDK-ARM打开项目 MDK-ARM/aht25_oled1306.uvprojx # 编译 (F7) → 烧录 (F8) ``` ### 2. 硬件连接 1. **I2C设备** (PB6=SCL, PB7=SDA) - AHT25传感器 + OLED显示器 - 确保3.3V供电和4.7kΩ上拉电阻 2. **串口通信** (UART1) - PA9 → RS485模块 TXD - PA10 → RS485模块 RXD 3. **观察运行状态** - PC13 LED每500ms闪烁 - OLED显示温湿度数值 ### 3. Modbus通信测试 ![串口调试](images/串口调式.png) 使用串口助手 (9600, 8N1): ``` 发送 (HEX): 01 03 00 00 00 04 44 09 响应示例: 01 03 08 00 19 00 03 00 3C 00 08 [CRC] 解析: 温度 = 25 + 0.3 = 25.3°C 湿度 = 60 + 0.8 = 60.8% ``` ### 4. 使用Python上位机 ```bash cd testReadUart python modbus_gui.py # 打包成EXE build_direct.bat ``` 详见 [testReadUart/README.md](testReadUart/README.md) ## Modbus寄存器表 | 地址 | 名称 | 说明 | 权限 | |------|------|------|------| | 0x0000 | 温度整数 | 温度整数部分 | R | | 0x0001 | 温度小数 | 温度小数×10 | R | | 0x0002 | 湿度整数 | 湿度整数部分 | R | | 0x0003 | 湿度小数 | 湿度小数×10 | R | | 0x0004 | 设备地址 | 1-247 | R/W | | 0x0005 | 波特率索引 | 0-6 (见下表) | R/W | | 0x0006 | 固件版本 | 0x0100 = v1.0 | R | ### 波特率索引 | 索引 | 波特率 | |------|--------| | 0 | 2400 | | 1 | 4800 | | 2 | 9600 (默认) | | 3 | 19200 | | 4 | 38400 | | 5 | 57600 | | 6 | 115200 | ## Modbus命令示例 ### 读取温湿度 (功能码 0x03) **请求**: `01 03 00 00 00 04 44 09` - 地址: 0x01 - 功能码: 0x03 (读保持寄存器) - 起始地址: 0x0000 - 寄存器数: 4 (温度整数、温度小数、湿度整数、湿度小数) **响应**: `01 03 08 00 19 00 03 00 3C 00 08 [CRC]` - 温度整数: 25 (0x0019) - 温度小数: 3 → 0.3°C - 湿度整数: 60 (0x003C) - 湿度小数: 8 → 0.8% - **实际值**: 温度=25.3°C, 湿度=60.8% ### 修改设备地址 (功能码 0x06) **请求**: `01 06 00 04 00 05 88 0A` - 将设备地址从1改为5 **响应**: 原样返回请求报文表示成功 ## 文档说明 - **📘 [CLAUDE.md](CLAUDE.md)** - AI助手开发指南 - **📗 [说明文档.md](说明文档.md)** - 系统架构和代码详解 - **📙 [调试步骤.md](调试步骤.md)** - Modbus通信和测试步骤 - **📁 [testReadUart/](testReadUart/)** - Python上位机工具 ![对话记录](images/对话内容.png) ## 开发工具 - **IDE**: Keil MDK-ARM (µVision 5) - **配置工具**: STM32CubeMX - **库**: STM32 HAL Driver - **调试器**: ST-LINK V2 - **上位机**: Python + PyQt5 + matplotlib ## 性能指标 | 参数 | 数值 | |------|------| | 传感器采样率 | 1 Hz | | 温度范围 | -40~85°C | | 湿度范围 | 0~100% RH | | 温度精度 | ±0.3°C | | 湿度精度 | ±2% RH | | Modbus响应时间 | < 50ms | | Flash占用 | ~30KB | | RAM占用 | ~5KB | ## 技术特点 ### 鲁棒的I2C通信 - 自动检测I2C总线故障 - 时钟线脉冲恢复机制 - 传感器自动重新初始化 ### 可靠的UART通信 - 中断接收模式 - 帧超时检测 (3.5字符时间) - CRC16校验 - 错误自动恢复 ### 工业标准协议 - 完整的Modbus RTU协议 - 支持功能码: 0x03, 0x06 - 标准异常响应 - 可配置设备参数 ## 常见问题 ### Q: Modbus无响应? 1. 检查波特率是否为9600 2. 检查设备地址 (默认0x01) 3. 验证CRC16计算是否正确 4. 查看LED是否正常闪烁 ### Q: 温湿度值异常? 1. 检查AHT25传感器连接 2. 确认I2C上拉电阻 (4.7kΩ) 3. 等待传感器预热30秒 4. 查看OLED显示是否正常 ### Q: OLED不显示? 1. 检查I2C地址 (0x3C) 2. 测量I2C总线电压 3. 确认OLED供电3.3V ## 二次开发指南 ### 添加新功能 1. **创建驱动文件** ```c // Core/Src/my_driver.c // Core/Inc/my_driver.h ``` 2. **在main.c的USER CODE区域添加代码** ```c /* USER CODE BEGIN Includes */ #include "my_driver.h" /* USER CODE END Includes */ /* USER CODE BEGIN 2 */ MyDriver_Init(); /* USER CODE END 2 */ ``` 3. **在Keil中添加源文件** - 右键项目 → Add Existing Files... - 选择.c文件添加到Application/User组 ### 修改硬件配置 1. 打开 `aht25_oled1306.ioc` (STM32CubeMX) 2. 修改外设配置 3. 重新生成代码 (保留USER CODE区域) 4. 在Keil中重新编译 ### 扩展Modbus功能 ```c // 在modbus_rtu.c中添加新寄存器 #define REG_MY_PARAMETER 0x0007 // 在Modbus_HandleReadHoldingRegisters()中处理 case REG_MY_PARAMETER: tx_buffer[3 + i*2] = (my_value >> 8) & 0xFF; tx_buffer[4 + i*2] = my_value & 0xFF; break; ``` ## 项目信息 **开发日期**: 2025年 **固件版本**: v1.0 **MCU**: STM32F103C8T6 **开发框架**: STM32 HAL + CubeMX **许可证**: 基于STMicroelectronics HAL库 --- **如有问题或建议,请查阅项目文档或提交Issue。**