5.3 KiB
5.3 KiB
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,再编辑其中的配置参数(本地配置不上传仓库):
#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. 编译烧录
cd 32/project
# 打开 myproject.uvprojx
# F7编译 → F8烧录
4. 运行状态
- LED0: 系统电源 (常亮=正常)
- LED1: WiFi状态 (闪烁=连接中, 常亮=已连接)
- LED2: 服务器状态 (闪烁=连接中, 常亮=已连接)
- OLED: 实时显示温湿度数据
数据协议
设备注册
{
"type": "register",
"device_id": "sensor_001",
"action": "connect"
}
传感器数据
{
"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通信模块
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);
传感器模块
void dht11_init(void);
int dht11_get_values(u8 buf[5]); // [湿度整数, 湿度小数, 温度整数, 温度小数, 校验和]
void adc1_init(void);
float adc1_read_channel(u8 channel);
显示模块
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
开发文档
许可证
MIT License
最后更新: 2025-11-16 版本: v2.0.0