183 lines
5.3 KiB
Markdown
183 lines
5.3 KiB
Markdown
# STM32智能传感器节点
|
|
|
|
基于STM32F10x微控制器的多功能智能传感器节点,集成OLED显示屏、WiFi通信、多种传感器和外设控制功能。
|
|
|
|
## 功能特性
|
|
|
|
- 🌡️ **传感器监测**: DHT11温湿度传感器 + ADC多通道模拟量采集
|
|
- 📡 **WiFi通信**: ESP8266模块,支持TCP客户端连接
|
|
- 🖥️ **OLED显示**: 128x64分辨率,支持中英文显示
|
|
- 💡 **状态指示**: 3路LED + 蜂鸣器报警
|
|
- ⚙️ **系统保护**: 独立看门狗(IWDG)监控
|
|
- 📦 **数据格式**: JSON格式数据传输
|
|
|
|
## 硬件连接
|
|
|
|
### 核心连接
|
|
```
|
|
DHT11传感器: PC10
|
|
ESP8266 WiFi: PA2(TX)/PA3(RX) - USART2
|
|
OLED显示屏: PB6(SCL)/PB7(SDA) - I²C
|
|
LED指示灯: PB0/PB1/PB2
|
|
蜂鸣器: PB5
|
|
ADC输入: PA0-PA7
|
|
```
|
|
|
|
### 系统架构
|
|
```
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ 传感器层 │ │ 处理层 │ │ 通信层 │
|
|
│ │ │ │ │ │
|
|
│ • DHT11温湿度 │───▶│ • STM32F103 │───▶│ • ESP8266 WiFi │
|
|
│ • ADC模拟输入 │ │ • 数据处理 │ │ • TCP协议 │
|
|
│ • GPIO输入 │ │ • OLED显示 │ │ • JSON数据 │
|
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
```
|
|
|
|
## 快速开始
|
|
|
|
### 1. 环境配置
|
|
- IDE: Keil MDK-ARM v5.0+
|
|
- 调试器: ST-Link V2
|
|
- 开发板: STM32F103C8T6
|
|
|
|
### 2. 网络配置
|
|
先将 `user/network_config.example.h` 复制为 `user/network_config.h`,再编辑其中的配置参数(本地配置不上传仓库):
|
|
```c
|
|
#define WIFI_SSID "Your_WiFi_Name"
|
|
#define WIFI_PASS "Your_WiFi_Password"
|
|
#define SERVER_IP "192.168.1.100"
|
|
#define SERVER_PORT 5000
|
|
#define DEVICE_ID "sensor_001"
|
|
```
|
|
|
|
### 3. 编译烧录
|
|
```bash
|
|
cd 32/project
|
|
# 打开 myproject.uvprojx
|
|
# F7编译 → F8烧录
|
|
```
|
|
|
|
### 4. 运行状态
|
|
- **LED0**: 系统电源 (常亮=正常)
|
|
- **LED1**: WiFi状态 (闪烁=连接中, 常亮=已连接)
|
|
- **LED2**: 服务器状态 (闪烁=连接中, 常亮=已连接)
|
|
- **OLED**: 实时显示温湿度数据
|
|
|
|
## 数据协议
|
|
|
|
### 设备注册
|
|
```json
|
|
{
|
|
"type": "register",
|
|
"device_id": "sensor_001",
|
|
"action": "connect"
|
|
}
|
|
```
|
|
|
|
### 传感器数据
|
|
```json
|
|
{
|
|
"device_id": "sensor_001",
|
|
"temp": 25.6,
|
|
"humidity": 60.2,
|
|
"adc0": 1.23,
|
|
"led0": 1,
|
|
"led1": 1,
|
|
"led2": 1
|
|
}
|
|
```
|
|
|
|
## 目录结构
|
|
|
|
```
|
|
32/
|
|
├── cmsis/ # CMSIS核心库
|
|
├── fwlib/ # STM32标准外设库
|
|
├── mylib/ # 自定义驱动库
|
|
│ ├── dht11.c/.h # DHT11传感器驱动
|
|
│ ├── esp8266.c/.h # ESP8266 WiFi驱动
|
|
│ ├── oled.c/.h # OLED显示驱动
|
|
│ ├── adc.c/.h # ADC模数转换
|
|
│ ├── led.c/.h # LED控制
|
|
│ ├── beep.c/.h # 蜂鸣器控制
|
|
│ ├── systick.c/.h # 系统定时器
|
|
│ └── usart1.c/.h # 串口通信
|
|
├── user/ # 用户应用代码
|
|
│ ├── main.c # 主程序
|
|
│ └── stm32f10x_it.c/.h # 中断服务
|
|
├── project/ # Keil项目文件
|
|
├── README.md # 项目说明
|
|
├── HARDWARE_SETUP.md # 硬件连接指南
|
|
└── QUICK_START.md # 快速开始指南
|
|
```
|
|
|
|
## 核心API
|
|
|
|
### WiFi通信模块
|
|
```c
|
|
void esp8266_init(void);
|
|
int esp8266_connect_wifi(const char *ssid, const char *passwd);
|
|
int esp8266_tcp_connect(const char *ip, uint16_t port);
|
|
int esp8266_write(const char *data, uint16_t len);
|
|
```
|
|
|
|
### 传感器模块
|
|
```c
|
|
void dht11_init(void);
|
|
int dht11_get_values(u8 buf[5]); // [湿度整数, 湿度小数, 温度整数, 温度小数, 校验和]
|
|
|
|
void adc1_init(void);
|
|
float adc1_read_channel(u8 channel);
|
|
```
|
|
|
|
### 显示模块
|
|
```c
|
|
void oled_init(void);
|
|
void oled_clear(void);
|
|
void oled_draw_text8(u8 x, u8 y, const char *text);
|
|
void oled_draw_text16(u8 x, u8 y, const char *text);
|
|
```
|
|
|
|
## 故障排除
|
|
|
|
### WiFi连接失败
|
|
- 检查SSID/密码配置
|
|
- 确认ESP8266供电稳定
|
|
- 查看串口调试信息
|
|
|
|
### 传感器读取异常
|
|
- 检查DHT11接线(PC10)
|
|
- 确认供电电压3.3V
|
|
- 更换传感器测试
|
|
|
|
### OLED无显示
|
|
- 检查I²C接线(PB6/PB7)
|
|
- 确认I²C地址(0x3C/0x3D)
|
|
- 检查显示屏供电
|
|
|
|
## 性能指标
|
|
|
|
- **启动时间**: < 10秒
|
|
- **数据频率**: 200ms间隔(可配置)
|
|
- **测量精度**: 温度±0.5°C, 湿度±2%RH
|
|
- **系统稳定性**: 连续运行24小时无故障
|
|
- **资源使用**: Flash 60KB, RAM 8KB
|
|
|
|
## 开发文档
|
|
|
|
- [硬件连接指南](HARDWARE_SETUP.md) - 详细硬件连接步骤
|
|
- [快速开始指南](QUICK_START.md) - 5分钟快速上手
|
|
- [系统架构设计](ARCHITECTURE.md) - 系统架构和模块设计
|
|
- [模块接口文档](MODULES.md) - 各模块接口说明
|
|
- [核心算法实现](ALGORITHMS.md) - 关键算法实现详解
|
|
|
|
## 许可证
|
|
|
|
MIT License
|
|
|
|
---
|
|
|
|
**最后更新**: 2025-11-16
|
|
**版本**: v2.0.0
|